渐层色边框
渐层色边框除了使用“图像边框”的做法,也可以透过虚拟元素定位、background-clip 裁切背景和图像边框这几种方式,产生“渐层色边框”的有趣效果,这篇教学会介绍这几种制作渐层色边框的方法。
快速导览:
使用虚拟元素定位制作渐层色边框
有别于“图像边框”可以直接改变边框样式,padding 外边界的做法需要额外使用一个虚拟元素作为渐层色背景,运用定位和尺寸的差异,就能产生渐层边框的效果,下方范例额外使用 CSS 变数取代宽度、圆角半径等需要修改的数值,产生三种不同粗细和颜色的边框 ( 注意,这种做法会让元素的宽度额外多出两倍边框宽度 )。
<!-- HTML 程式碼 -->
<div class="d">apple</div>
<div class="d d1">banana</div>
<div class="d d2">oxxo</div>
<!-- CSS 程式碼 -->
<style>
.d {
--r: 5px; /* 圓角半徑 */
--bw: 5px; /* 邊框粗細 */
position: relative;
width: 100px;
height: 100px;
margin: 20px;
padding: 5px;
background: #fff;
box-sizing: border-box; /* 避免 padding 影響寬度 */
border-radius: var(--r); /* 邊框圓角 */
}
.d::before {
position: absolute;
content: "";
z-index: -1;
top: calc(var(--bw) * -1); /* 往上偏移一個邊框寬 */
left: calc(var(--bw) * -1); /* 往左偏移一個邊框寬 */
width: calc(100% + 2 * var(--bw)); /* 寬度增加兩個邊框寬 */
height: calc(100% + 2 * var(--bw)); /* 高度增加兩個邊框寬 */
background: linear-gradient(#f00, #00f);
border-radius: var(--r); /* 邊框圓角 */
}
.d1{
--r: 10px;
--bw: 10px;
width: 150px;
margin: 30px 25px;
}
.d1::before {
background: linear-gradient(#f00, #fc0, #0c0, #09c, #00c);
}
.d2{
--r: 20px;
--bw: 20px;
width: 200px;
margin: 50px 35px;
}
.d2::before {
background:conic-gradient(
#500 0, #500 45deg,
#f00 45deg, #f00 90deg,
#f50 90deg, #f50 135deg,
#ff0 135deg,#ff0 180deg,
#0c0 180deg, #0c0 225deg,
#09d 225deg, #09d 270deg,
#00b 270deg, #00b 315deg,
#909 315deg, #909 360deg
);
}
</style>
使用 background-clip 制作渐层色边框
虽然使用定位的方式可以制作渐层边框,但却无法改变边框样式,因此可以额外使用 background-clip 进行背景裁切,将正常边框的宽度纳入裁切范围中,就可以修改原本边框样式,产生更多不同的边框变化 ( 注意,虽然这个做法的宽度不会变宽,但如果要设定虚线的边框样式,则需要将内容背景色与后方背景色设为一致 )。
<!-- HTML 程式碼 -->
<div class="d">apple</div>
<div class="d d1">banana</div>
<div class="d d2">oxxo</div>
<!-- CSS 程式碼 -->
<style>
.d {
--r: 5px; /* 圓角半徑 */
--bw: 5px; /* 邊框粗細 */
position: relative;
width: 100px;
height: 100px;
margin: 10px;
background: #fff;
padding: 5px;
box-sizing: border-box; /* 避免 padding 影響寬度 */
border: var(--bw) solid #0000; /* 原本邊框顏色設為透明 */
background-clip: padding-box; /* 背景裁切設定 */
border-radius: calc(var(--r) + var(--bw)); /* 邊框圓角 */
}
.d::before {
position: absolute;
content: "";
z-index: -1;
top: calc(var(--bw) * -1); /* 往上偏移一個邊框寬 */
left: calc(var(--bw) * -1); /* 往左偏移一個邊框寬 */
width: calc(100% + 2 * var(--bw)); /* 寬度增加兩個邊框寬 */
height: calc(100% + 2 * var(--bw)); /* 高度增加兩個邊框寬 */
border-radius: calc(var(--r) + var(--bw));
background: linear-gradient(#f00, #00f);
}
.d1 {
--r: 10px;
--bw: 10px;
width: 150px;
border: calc(var(--bw) + 1px) dashed #fff;
}
.d1::before {
background: linear-gradient(#f00, #fc0, #0c0, #09c, #00c);
}
.d2 {
--r: 15px;
--bw: 15px;
width: 200px;
}
.d2::before {
background:conic-gradient(
#500 0, #500 45deg,
#f00 45deg, #f00 90deg,
#f50 90deg, #f50 135deg,
#ff0 135deg,#ff0 180deg,
#0c0 180deg, #0c0 225deg,
#09d 225deg, #09d 270deg,
#00b 270deg, #00b 315deg,
#909 315deg, #909 360deg
);
}
</style>
使用 border-image 制作渐层色边框
第三种方式可以使用 CSS 新的样式属性 border-image,运用类似背景色的方式,产生渐层色边框,下方范例先用 border-image-source 让渐层色作为图像边框,接着运用 border-image-slice 将渐层色以 33% 的宽高切开,分别放入对应的元素区域中,就可以很快速的产生渐层色边框啰!
这个做法只能呈现
solid实心线与 90 度角的边框,如果要改变边框造型请参考:图像边框 border-image
<!-- HTML 程式碼 -->
<div class="a"></div>
<div class="b"></div>
<div class="c"></div>
<!-- CSS 程式碼 -->
<style>
div {
border-style: solid;
height: 100px;
margin: 10px;
border-image-source: linear-gradient(135deg, red, orange, yellow, green, blue, purple);
border-image-slice: 33%;
}
.a {
border-width: 10px;
width: 100px;
}
.b {
border-width: 20px;
width: 150px;
}
.c {
border-width: 30px;
width: 200px;
}
</style>
小结
渐层色边框的效果其实并不难做,但整体实用性并不高,通常会应用在凸显重点文字,如果网站有类似需求,不妨可以套用这个效果。
微信扫码关注
抖音扫码关注