如何为一个元素实现两种不同的线性渐变边框?
How to implement two different linear gradient borders to an element?
我是 CSS 的新手,我的任务是创建 2 个线性渐变作为 div 的边框,如下图所示。
我使用 border-image
作为内部边框,但我不知道如何创建另一个边框。
border-image: linear-gradient(#EEEEEE ,#666666, #EEEEEE) 1 1% !important;
使用额外的伪元素:
我认为使用 border-image
只用一个元素(即没有额外的 pseudo/real 元素)是不可能做到这一点的,但是你可以使用伪元素来做到这一点在父元素上设置一个边框,在伪元素上设置另一个边框,如下面的代码片段所示。
div{
position: relative;
height: 200px;
width: 400px;
border-image-source: linear-gradient(to bottom, #FFFFFF, #CCCCCC 50%, #FFFFFF);
border-style: solid;
border-width: 5px;
border-image-slice: 1;
}
div:before{
position: absolute;
content: '';
height: calc(100% - 10px);
width: calc(100% - 10px);
border-image-source: linear-gradient(to bottom, #EEEEEE, #666666 50%, #EEEEEE);
border-style: solid;
border-width: 5px;
border-image-slice: 1;
}
<div></div>
使用单个元素:
只有一个元素(没有 pseudo/real 个元素),我们可以使用 background-image
而不是 border-image
来实现这个 * ].它要复杂得多,因为我们必须为 8 个(4 个外 + 4 个内)边框中的每一个创建一个渐变条,然后相应地放置它们。
* - 这不会产生与 border-image 完全相同的输出,但足够接近。
div{
height: 200px;
width: 400px;
background: linear-gradient(to right, #FFFFFF, #FFFFFF),
linear-gradient(to bottom, #FFFFFF, #CCCCCC 50%, #FFFFFF),
linear-gradient(to right, #FFFFFF, #FFFFFF),
linear-gradient(to bottom, #FFFFFF, #CCCCCC 50%, #FFFFFF),
linear-gradient(to right, #EEEEEE, #EEEEEE),
linear-gradient(to bottom, #EEEEEE, #666666 50%, #EEEEEE),
linear-gradient(to right, #EEEEEE, #EEEEEE),
linear-gradient(to bottom, #EEEEEE, #666666 50%, #EEEEEE);
background-repeat: no-repeat;
background-size: 100% 5px, 5px 100%, 100% 5px, 5px 100%, calc(100% - 10px) 5px, 5px calc(100% - 10px), calc(100% - 10px) 5px, 5px calc(100% - 10px);
background-position: 0px 0px, 100% 0px, 0px 100%, 0px 0px, 5px 5px, calc(100% - 5px), 0px calc(100% - 5px), 5px 5px;
}
<div></div>
我是 CSS 的新手,我的任务是创建 2 个线性渐变作为 div 的边框,如下图所示。
我使用 border-image
作为内部边框,但我不知道如何创建另一个边框。
border-image: linear-gradient(#EEEEEE ,#666666, #EEEEEE) 1 1% !important;
使用额外的伪元素:
我认为使用 border-image
只用一个元素(即没有额外的 pseudo/real 元素)是不可能做到这一点的,但是你可以使用伪元素来做到这一点在父元素上设置一个边框,在伪元素上设置另一个边框,如下面的代码片段所示。
div{
position: relative;
height: 200px;
width: 400px;
border-image-source: linear-gradient(to bottom, #FFFFFF, #CCCCCC 50%, #FFFFFF);
border-style: solid;
border-width: 5px;
border-image-slice: 1;
}
div:before{
position: absolute;
content: '';
height: calc(100% - 10px);
width: calc(100% - 10px);
border-image-source: linear-gradient(to bottom, #EEEEEE, #666666 50%, #EEEEEE);
border-style: solid;
border-width: 5px;
border-image-slice: 1;
}
<div></div>
使用单个元素:
只有一个元素(没有 pseudo/real 个元素),我们可以使用 background-image
而不是 border-image
来实现这个 * ].它要复杂得多,因为我们必须为 8 个(4 个外 + 4 个内)边框中的每一个创建一个渐变条,然后相应地放置它们。
* - 这不会产生与 border-image 完全相同的输出,但足够接近。
div{
height: 200px;
width: 400px;
background: linear-gradient(to right, #FFFFFF, #FFFFFF),
linear-gradient(to bottom, #FFFFFF, #CCCCCC 50%, #FFFFFF),
linear-gradient(to right, #FFFFFF, #FFFFFF),
linear-gradient(to bottom, #FFFFFF, #CCCCCC 50%, #FFFFFF),
linear-gradient(to right, #EEEEEE, #EEEEEE),
linear-gradient(to bottom, #EEEEEE, #666666 50%, #EEEEEE),
linear-gradient(to right, #EEEEEE, #EEEEEE),
linear-gradient(to bottom, #EEEEEE, #666666 50%, #EEEEEE);
background-repeat: no-repeat;
background-size: 100% 5px, 5px 100%, 100% 5px, 5px 100%, calc(100% - 10px) 5px, 5px calc(100% - 10px), calc(100% - 10px) 5px, 5px calc(100% - 10px);
background-position: 0px 0px, 100% 0px, 0px 100%, 0px 0px, 5px 5px, calc(100% - 5px), 0px calc(100% - 5px), 5px 5px;
}
<div></div>