2014-02-13 94 views

回答

1

這裏是設置文本以適應容器的寬度的方法。它的工作方式是逐漸增加隱藏div的字體大小,直到它小於要將文本放入其中的容器的寬度。然後它將容器的字體大小設置爲隱藏的div的字體大小。

這有點低效,可以通過緩存容器的舊寬度,然後根據容器的寬度如何改變從舊字體大小增加到更大或更小的值來優化。

的jsfiddlehttp://jsfiddle.net/sarathijh/XhXQk/

<div class="scale-text styles"> 
    This is a test of scaling text to fit the container. Lorem Ipsum Dolor Sit Amet. 
</div> 
<div id="font-metrics"></div> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
<script> 
    var fontMetrics = document.getElementById('font-metrics'); 
    var scaleTexts = $('.scale-text'); 

    $(window).on('resize', updateFontSize); 
    updateFontSize(); 

    function updateFontSize() 
    { 
     scaleTexts.each(function() 
     { 
      var $scaleText = $$(this); 

      fontMetrics.innerHTML = this.innerHTML; 
      fontMetrics.style.fontFamily = $scaleText.css('font-family'); 
      fontMetrics.style.fontWeight = $scaleText.css('font-weight'); 
      fontMetrics.style.fontStyle = $scaleText.css('font-style'); 
      fontMetrics.style.textTransform = $scaleText.css('text-transform'); 

      var fontSize = 50; // max font-size to test 
      fontMetrics.style.fontSize = fontSize + 'px'; 

      while ($$(fontMetrics).width() > $scaleText.width() && fontSize >= 0) 
      { 
       fontSize -= 1; 
       fontMetrics.style.fontSize = fontSize + 'px'; 
      } 

      this.style.fontSize = fontSize + 'px'; 
     }); 
    } 

    /** 
    * A simple caching function for jQuery objects. 
    */ 
    function $$(object) 
    { 
     if (!object.jquery) 
      object.jquery = $(object); 

     return object.jquery; 
    } 
</script> 
+0

應該指出,這個腳本應該加載在你想要轉換的文本之後(如在頁腳中)。我使用谷歌字體,這造成了一個錯誤,我需要調整我的瀏覽器的文本以適當填充。 –

0

你應該能夠做到這一點使用jQuery - 像..

$('#cooldiv').css('font-size', '100%') 

$("#cooldiv").animate({ 
    'width' : (xWidth * (35/100)) + 'px', 
    'minWidth' : (xWidth * (35/100)) + 'px', 
    'maxWidth' : (xWidth * (35/100)) + 'px', 
    'fontSize' : (xWidth * (35/100)) + '%' 
}, 1000); 
0

我不能工作了如何使用CSS做,所以我用純JS(不需要jquery)。

var els = document.getElementsByClassName('abc') 
for (var i = 0; i < els.length; i++){ 
    els[i].style.fontSize = els[i].clientHeight + 'px' 
} 

實施例:http://jsfiddle.net/nickg1/H64mQ/

+0

如果容器的大小不斷變化,它會工作嗎? – user3304179

+1

是否這樣? http://jsfiddle.net/nickg1/H64mQ/2/ - 是的,如果您記得每次調整容器時剪切的代碼。 –

+0

這很好,但如果容器水平變小,我還希望文本縮小。 – user3304179

0

下面是如何實現它 - 我包裹在一個跨距中的文本,並調整下來用CSS變換:

<div id="fit-text-in-here"> 
    <span>Scale this text to fit inside the parent div.</span> 
</div> 

的jQuery:

$(function(){ 
    var textWidth = $('#fit-text-in-here span').width(), 
     fitWidth = $('#fit-text-in-here').width(); 

    if (textWidth > fitWidth) { 
     var scaleTo = fitWidth/textWidth, 
      offset = (fitWidth - textWidth)/2; 

     $('#fit-text-in-here span').css({ 
      '-moz-transform': 'scale('+scaleTo+')', 
      '-webkit-transform': 'scale('+scaleTo+')', 
      '-o-transform': 'scale('+scaleTo+')', 
      'transform': 'scale('+scaleTo+')', 
      'margin-left': offset, 
      'display': 'inline-block' 
     }); 
    } 
}); 
相關問題