CSS3跟大家见面已经有些年头了,都很熟悉,各种高级属性随口就来,但是,如果冷不丁让你实现一个效果,可能并没那么快想出实现方案——一用就想不起来,说的是不是你?~
字体样式
我们知道,CSS中设置字体常用的属性,无非是
- font-size
- color
- font-weight等,
比如下面一段代码:
<div class="test-box">
<h2>A</h2>
</div>
我们把它设置为红色,只需要这样:
.test-box h2{
color:red;
}
效果如下:
你会觉得,这简单得简直侮辱智商,那么问题来了:
怎么让它一半红一半绿呢?
color…似乎无能为力。
打破思维的墙
为了实现以上效果,我们总不能去绘制,没必要,也不能把A拆成两半,一左一右,然后分别设置color吧,你拆一个看看?
但总能想到办法,就像以前模拟三角形或者牛角那样。
我们来分拆:
从一个颜色到另一个颜色,怎么实现?——渐变。
一半红,一半绿呢?起点到中点是一个颜色,中点到终点是另外一个颜色即可。
颜色解决了,文字呢?我们的主角要登场了。
background-clip
废话不多说,直接亮代码:
.test-box h2{
display: inline-block;
background: linear-gradient(to right, #f44e30 0%,#f44e30 50%,#29db35 51%,#29db35 100%);
color: transparent; //关键
font-size: 20px;
-webkit-background-clip: text; //关键
}
效果如下:
可以看到,上面的代码里,我标了两处”关键“,是因为除了这两个地方,其他均可变,只是视觉效果不同,而这两者是必须的。
看到这里,你突然觉得,也不难啊,的确不难,这个问题只是将我们思考问题的维度缩小了,以至于忘了本来可能熟悉的东西,例如,我们通常会实现这样的效果:
<div class="test-box">
<h2>Hello world</h2>
</div>
.test-box h2{
display:inline-block;
font-size:40px;
background: linear-gradient(to bottom, #f44e30 0%,#29db35 100%);
-webkit-background-clip:text;
-webkit-text-fill-color:transparent;
}
变一种形式可能那个弯儿就转不过来了。
小tips:上面代码我都加了display:inline-block;为什么,不加不行?不是,这关乎一个细节,很多时候,如果你用一个块元素直接包裹,它会撑满整行,那么渐变的背景也会撑满整行,而文字可能只占了它的一个片段,多数情况下,都会跟想要的视觉效果有差别,故而,我们需要渐变的区域和文字区域完全重合。
常规应用
”text“这个值虽然神奇,但只能算是它带给我们的奖励,它还有三个常规的值:
background-clip: border-box|padding-box|content-box;
拿一张图片举例,它们分别对应的效果如下:
.img-clip{
width: 80px;
height: 80px;
background: url(98.jpg);
background-repeat: no-repeat;
background-size: cover;
border:10px solid rgba(207, 56, 56, 0.3);
padding: 20px;
}
可看出,属性值代表的意思——即背景图可以延展到的范围。
小结
关于background-clip就先聊到这儿,它可能远不止我们聊的这些看起来普通的应用,更重要的,是需要它们派上用场的时候,我们能够想到,祝我们好运!~