【问题标题】:Make text responsive to whether its overflows its parent div使文本响应其是否溢出其父 div
【发布时间】:2016-01-19 18:14:20
【问题描述】:

如何确保文本调整其字体大小以防止其溢出静态的 50 像素导航栏?

我有一个初步的脚本,但它并不能真正起到作用。每次浏览器调整大小时,它只会将像素调整 1px,甚至没有考虑到有人直接进入移动设备:

          window.onresize = function(){    
            var title = document.getElementById('testing');             
            var style = window.getComputedStyle(title, null).getPropertyValue('font-size');
            var fontSize = parseFloat(style);  
            if(title.scrollHeight > 51){
              title.style.fontSize = (fontSize - 0.5) + 'px';
              $(title).height(50);
            } else if (title.scrollHeight < 51) {
              title.style.fontSize = (fontSize + 0.5) + 'px';
              $(title).height(50);
            }
          };

【问题讨论】:

  • 更可靠的方法是使用 CSS 媒体查询并为您的导航栏提供移动安全布局。
  • 我不完全理解您要做什么,那么您的导航大小会根据屏幕大小而变化还是总是 50 x 50?那么您是否基本上希望您的文本根据其大小“填满”整个导航?
  • @NaturalLam,Nav 大小保持在 50px,但内部 div 的文本会根据数据库内容而变化。因此,如果内容过长,内容会溢出,导致该div的高度超过50px。 Nav 的溢出是隐藏的,因此该内容仅部分可见。由于这些原因,我认为单纯的 CSS 是行不通的,因为文本的初始大小也应该响应这个内部 div 中的文本长度。

标签: javascript jquery html css responsive-design


【解决方案1】:

只需使用 CSS...

#testing{
    font-size:1.5vw
}

? - 当然相应地改变价值

【讨论】:

  • 当您将平板电脑或全屏窗口旋转到不同的纵横比时,这个问题就会变得很明显。也就是说:缩小的窗口会很快产生微小的文本,因为它“缩小”了......
  • 是的,但那是当您使用@media 方向查询将值更改为 ems 的时候?只是一个想法
  • 是的,只是因为我们的导航栏被硬编码为保持在50px.,所以在改变屏幕比例时会出现问题,也许答案是编写一个算法来考虑导航栏本身的高宽比,而不是比屏幕。
  • 换句话说,单词与 div 尺寸的比例可以而且应该改变以保持可读性。
【解决方案2】:

我整理了一个 jQuery 解决方案: http://jsfiddle.net/dsunr5px/1/

它将逐渐减小文本的大小,直到它适合其父级:

jQuery(document).ready(function() {

adjustWidth();

jQuery(window).onresize(adjustWidth());

function adjustWidth() {

    jQuery(".text").each(function() {
        var width = jQuery(this).width();

        while(width <= jQuery(this).children().width() )
        {
            var fontsize = parseInt(jQuery(this).children().css('font-size'));
            var newfs = fontsize - 1 + 'px';
            jQuery(this).children().css({'font-size': newfs}); 
        }
    });
}

});

但是,正如您所看到的,它可能会变得有点疯狂。一般来说,换行符会更加用户友好。您可能可以在其中放置更多逻辑来确定在什么时候太小太小,它应该只是换行。然而,解决响应式问题的行业标准始终是媒体查询。除非您有理由不这样做,否则我会朝这个方向研究解决方案。

【讨论】:

  • 明天我会试一试。我不使用媒体查询的原因可能是消息不灵通,因为断点会根据用户在此标题部分的独特内容而有所不同。 (我会注意到我们使用的是 Foundation,这部分被封装为一个专栏。)
  • 可以接受换行吗?例如,如果文本超出列的宽度,它会在一个单词处中断到下一行。如果是这样,只需确保文本具有 css 属性 display:inline 并且其父级具有属性 display:block。
  • 哦 - 我明白了。我不是那么清楚。我的 div 垂直溢出它的父导航栏,而不是水平溢出。文字没有溢出。 div 的高度增加,文本留在里面,但我需要高度保持在 50px 并让文本在溢出 50px div 之前调整它们的字体大小......如果这还不够混乱!
  • 我在这个答案中给出的解决方案是针对宽度测量的,但是小提琴示例显示了如果将太多文本放在太小的地方,它会如何变得太小。它可能满足您的要求,但我自己在这里的经验总是让我强制设计接受可变高度,以便动态文本始终可读。用户体验第一,设计第二。
猜你喜欢
  • 2022-08-08
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多