我知道这可以很容易地用Javascript解决,但我只对纯CSS解决方案感兴趣。

我想要一种动态调整文本大小的方法,以便它总是适合固定的div。下面是示例标记:

<div style="width: 200px;身高:1 em;溢出:隐藏;" > <p>这里的一些示例动态文本量</p> < / div >

我在想,也许这可以通过在ems中指定容器的宽度,并获得字体大小继承该值?


当前回答

calc(42px + (60 - 42) * (100vw - 768px) / (1440 - 768));

用这个方程。

对于大于或小于1440和768的任何值,您可以给它一个静态值,或者应用相同的方法。

vw解决方案的缺点是你不能设置缩放比例,比如在屏幕分辨率1440下的5vw最终可能是60px的字体大小,这是你的想法字体大小,但当你将窗口宽度缩小到768时,它可能最终是12px,而不是你想要的最小尺寸。使用这种方法,您可以设置上边界和下边界,字体将在两者之间自行缩放。

其他回答

编辑:注意attr()它与css中的calc()有关。将来你也许能做到。

不幸的是,目前没有css唯一的解决方案。这就是我建议你做的。给元素一个title属性。并使用文本溢出省略号来防止设计的破坏,让用户知道有更多的文本在那里。

<div style="width: 200px; height: 1em; text-overflow: ellipsis;" title="Some sample dynamic amount of text here">
 Some sample dynamic amount of text here
</div>

.

.

.

或者,如果您只是想根据视口减小大小。CSS3支持相对于视图端口的新维度。

body {
   font-size: 3.2vw;
}

3.2vw =视口宽度的3.2% 3.2vh =视口高度的3.2% 3.2vmin =小于3.2vw或3.2vh 3.2vmax =大于3.2vw或3.2vh 看到css-tricks.com/..。也可以看看caniuse.com/....

你的动态文本一定来自某个地方。在我的例子中,这看起来像:

<div class="large" :data-contentlength="Math.floor(item.name.length/7)">[[ item.name ]]</div>

我的CSS类:

.large[data-contentlength="1"]{ font-size: 1.2em; }
.large[data-contentlength="2"]{ font-size: 1.1em; }
.large[data-contentlength="3"]{ font-size: 1.0em; }
.large[data-contentlength="4"]{ font-size: 0.9em; }
.large[data-contentlength="5"]{ font-size: 0.8em; }
.large[data-contentlength="6"]{ font-size: 0.7em; }
.large[data-contentlength="7"]{ font-size: 0.6em; }

我也有“非大型”文本类:

[data-length="1"]{ font-size: 1.00em; }
...

编辑: 当attr()在所有浏览器中都可用时,这变得更容易一些: https://developer.mozilla.org/en-US/docs/Web/CSS/attr#browser_compatibility

此外,如果CSS可以划分2个单位值(例如px和ch),这可能会更动态,目前这必须手动完成。

在这里看到的:

https://jsfiddle.net/qns0pov2/3/

创建一个1ch的立方体,看看它在你的目标单位中有多大(在它的px中),计算每行字符的数量,并使用该值来获得每个内容长度的完美字体大小。

小提琴也显示了这种方法的问题:平均字符宽度小于1ch(基于0),但有像M这样的字符更大(大约70%)。

因此,如果你希望保证字符适合空间调整小提琴这样:——ch-width: calc(8.109 * 1.7);

如果你对平均情况更感兴趣:——ch-width: calc(8.109 * 0.92);

试试MartijnCuppens的RFS(响应式字体大小)库,它可能会在Bootstrap中实现

注意:此解决方案根据视口大小而不是内容的数量而更改

我刚刚发现这是可能的使用大众单位。它们是与设置视口宽度相关的单元。它有一些缺点,比如缺乏传统浏览器的支持,但这绝对是值得认真考虑的。另外,你仍然可以为旧的浏览器提供备份,如下所示:

p {
    font-size: 30px;
    font-size: 3.5vw;
}

http://css-tricks.com/viewport-sized-typography/ 而且 https://medium.com/design-ux/66bddb327bb1

我是这样使用smth的:

1 .风格。fontSize = 15.6/(文档。

哪里:1 -父母div Id和2 - Id的div与我的文本