CSS中的line-hight属性是用来控制文本行之间的空隙的。它一般情况下没有单位的设定(如:line-height:1.4;)所以这是一个按字体尺寸的比例来计算。这对印刷版来说是一个很重要的属性。线条过低就会挤在一起,线条过高就会相距甚远,这两种情况都会降低可读性。不过你可能已经知道了这一点。
本文中,我们将把注意力放在一些设计上。如果你知道(或可以计算出)的line-height的精确值,你可以做一些奇妙的东西!
每行文本设置不同颜色
很遗憾这里没有::nth-line(),我们直接使用<span>是不可靠的,因为会有很多不同的事情导致文本在不同的地方被打乱。
尽管是非标准的,但这里还有一种用法就是使用一个元素的背景作为文字的背景。
- .text {
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- }
而这里还有另一个绝招,你可以用linear-gradient()来让颜色排列在一起就不会褪变成另一个颜色。它只是会突然的结束然后开始另一个。比方说我们知道line-height是22px,我们可以制作一个像这样的阶梯色。
- .text {
- background-image: linear-gradient(
- to bottombottom,
- #9588DD,
- #9588DD 22px,
- #DD88C8 22px,
- #DD88C8 44px,
- #D3DD88 44px,
- #D3DD88 66px,
- #88B0DD 66px,
- #88B0DD);
- }
结合着两种技巧
在不支持文本背景剪裁的浏览器里,比如Firefox,你会得到一个文本后面的实心背景颜色块。也许这很酷你会喜欢它。但也可能你只是想要得到那样的文本颜色。在这种情况下,你可以使用@support去单独的支持它。
此外,当你需要在各处使用line-height,把他设置成变量或许会更好。我将在这里使用SCSS,或许有一天在CSS中也可以使用变量。所以改变之后,他依旧被渲染,看起来它一直保持工作。
- $lh: 1.4em;
- body {
- font-size: 1em;
- line-height: $lh;
- }
- @supports (-webkit-background-clip: text) {
- p {
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-image: linear-gradient(
- to bottombottom,
- #9588DD,
- #9588DD $lh,
- #DD88C8 $lh,
- #DD88C8 $lh*2,
- #D3DD88 $lh*2,
- #D3DD88 $lh*3,
- #88B0DD $lh*3,
- #88B0DD);
- }
- }
在元素的顶部使用这种方式是最容易的。下面是一个例子,重点是前几行被改变。
- .text {
- -webkit-background-clip: text;
- -webkit-text-fill-color: transparent;
- background-image: linear-gradient(
- to bottombottom,
- rgba(