2012-04-20 14 views
6

मैं जावास्क्रिप्ट का उपयोग कर div में पाठ के एक टुकड़े के baseline की ऊंचाई को खोजने में सक्षम होने की उम्मीद कर रहा हूं।मैं एक निश्चित फ़ॉन्ट की आधार रेखा की ऊंचाई कैसे प्राप्त कर सकता हूं?

मैं एक पूर्वनिर्धारित फ़ॉन्ट का उपयोग नहीं कर सकता, क्योंकि मेरे कई उपयोगकर्ता अपने ब्राउज़र में एक बड़ी फ़ॉन्ट सेटिंग का उपयोग करेंगे।

मैं जावास्क्रिप्ट में यह कैसे कर सकता हूं?

उत्तर

11

मैंने इसके लिए एक छोटी jQuery प्लगइन बनाई है। सिद्धांत सरल है:

एक कंटेनर में, एक ही सामग्री के साथ 2 इनलाइन तत्व डालें लेकिन एक बहुत छोटा . और दूसरा बहुत बड़ा A स्टाइल। फिर, के बाद से वहाँ vertical-align:baseline डिफ़ॉल्ट रूप से कर रहे हैं, आधार रेखा के रूप पालन दिया जाता है:

$ = @jQuery ? require 'jQuery' 

detectBaseline = (el = 'body') -> 
    $container = $('<div style="visibility:hidden;"/>') 
    $smallA = $('<span style="font-size:0;">A</span>') 
    $bigA  = $('<span style="font-size:999px;">A</span>') 

    $container 
    .append($smallA).append($bigA) 
    .appendTo(el); 
    setTimeout (-> $container.remove()), 10 

    $smallA.position().top/$bigA.height() 

$.fn.baseline = -> 
    detectBaseline(@get(0)) 

तो, साथ धूम्रपान:

 ^+----+^
     | | +-+| | top 
height | |.|A|| v 
     | | +-+| 
     v +----+ 

======================= 
baseline = top/height 
======================= 

यहाँ coffeescript में प्लगइन (JS here) है

$('body').baseline() 
// or whatever selector: 
$('#foo').baseline() 

-

इसे आज़माएं टी: http://bl.ocks.org/3157389

+0

यह बहुत अच्छा है! आपका बहुत बहुत धन्यवाद! – EPLKleijntjens

+0

एक और पूरा विकल्प http://pomax.nihongoresources.com/pages/Font.js/ का उपयोग कर सकता है - अभी तक कोशिश नहीं की है लेकिन बहुत अच्छा लगता है। – abernier

+1

हाय @ बेर्नियर। मैंने आपके कोड की कोशिश की है और जब मैं इसे चलाता हूं तो मुझे बेसलाइन के लिए नंबर 1.1108247422680413 मिलता है जो मुझे लगता है कि मेरी वेबसाइट के लिए डिफ़ॉल्ट फ़ॉन्ट है। क्या आप मुझे बता सकते हैं कि उस नंबर का क्या अर्थ है? मैंने आंखों से बेसलाइन तैयार की है और मैं नहीं देख सकता कि आपकी विधि से मुझे प्राप्त होने वाली संख्या से संबंधित कैसे है। अग्रिम में धन्यवाद। –

4

एलन स्टर्न्स द्वारा खोज (http://blogs.adobe.com/webplatform/2014/08/13/one-weird-trick-to-baseline-align-text/) कि इनलाइन-ब्लॉक तत्वों अन्य इनलाइन तत्वों के आधारभूत संरेखण बदलने के लिए, मैं एक साथ एक डेमो जो मैंने पाया वास्तव में अधिक एक प्राप्त करने के लिए सरल https://stackoverflow.com/a/11615439/67190 से अधिक सटीक, और डाल के बाद जावास्क्रिप्ट में मूल्य: http://codepen.io/georgecrawford/pen/gbaJWJ। उम्मीद है कि यह उपयोगी है।

<div> 
    <span class="letter">T</span> 
    <span class="strut"></span> 
<div> 
div { 
    width: 100px; 
    height: 100px; 
    border: thin black solid; 
} 
.letter { 
    font-size: 100px; 
    line-height: 0px; 
    background-color: #9BBCE3; 
} 
.strut { 
    display: inline-block; 
    height: 100px; 
} 
+0

हां, आपका समाधान फ़ायरफ़ॉक्स 37 – jedierikb

+0

पर काम नहीं कर रहा है यह उपयोगी हो सकता है: https://github.com/georgecrawford/font-baseline –

+0

हाय @ जॉर्ज क्रॉफर्ड। आपके कोड और डेमो के लिए धन्यवाद। क्या कोई दस्तावेज़/चित्रण है जो बताता है कि आपके विधि से संबंधित विभिन्न मूल्य क्या हैं? फ़ॉन्ट और लाइनहाइट स्पष्ट हैं। अपने डेमो का अध्ययन करने से मैं * सोचता हूं * आधार रेखा निर्णायक आकार है और सामग्री फ़ॉन्ट का कुल आकार है, यानी डिकेंडर + टोपी ऊंचाई + ascender, लेकिन मैं गलत हो सकता है। एक अच्छी मेज या तस्वीर सहायक होगी। –

संबंधित मुद्दे

 संबंधित मुद्दे