单独使用 CSS,如何实现从右到左的 Border-bottom 渐变?

2024-01-13

我想知道是否可以单独使用 CSS 来制作边框底部,渐变从右到左而不是从中心向外。

在寻找答案的过程中,我发现了一个JSFiddle http://jsfiddle.net/necolas/vqnk9/链接显示可以有一个从上到下透明的边框渐变;

方法一/* 仅使用背景渐变 */

.one { 
    width: 400px;
    padding: 20px 25px;
    border-top: 5px solid #000;
    margin: 40px auto;
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#000), to(transparent));
    background-image: -webkit-linear-gradient(#000, transparent);
    background-image:
        -moz-linear-gradient(#000, transparent),
        -moz-linear-gradient(#000, transparent)
    ;
    background-image:
        -o-linear-gradient(#000, transparent),
        -o-linear-gradient(#000, transparent)
    ;
    background-image: 
        linear-gradient(#000, transparent),
        linear-gradient(#000, transparent)
    ;
    -moz-background-size:5px 100%;
    background-size:5px 100%;
    background-position:0 0, 100% 0;
    background-repeat:no-repeat;
}

Method 2/* 使用伪元素和背景渐变 */

.two {
    position: relative;
    width: 400px;
    padding: 20px;
    border: 5px solid transparent;
    border-top-color: #000;
    margin: 40px auto;
}

.two:before,
.two:after {
    content: "";
    position: absolute;
    top: -5px;
    bottom: -5px;
    left: -5px;
    width: 5px;
    background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#000), to(transparent));
    background-image: -webkit-linear-gradient(#000, transparent);
    background-image: -moz-linear-gradient(#000, transparent);
    background-image: -o-linear-gradient(#000, transparent);
    background-image: linear-gradient(#000, transparent);
}

.two:after {
    left: auto;
    right: -5px;
}

我不明白上面的CSS是如何让页面知道方向的,我认为这只是一个小小的、简单的、被忽视的编辑,我现在似乎无法及时找到它,因此我提出这个问题寻求帮助。

我还想知道如果边框是虚线或点线,这是否有效?

感谢您提前提供的任何帮助和/或建议。

此致, 蒂姆


NOTE- 编辑 CSS,使渐变跨越元素的宽度,而不仅仅是边框宽度。

这就是我想到的,这或多或少是 h3n 建议填写的更多特定于供应商的属性:

border-right: 5px solid #000; /* Don't forget to modify to the right border. */
background-image: 
    -webkit-gradient(linear, 0 0, 0 100%, from(#000), to(transparent));
background-image: 
    -webkit-linear-gradient(180deg, #000, transparent),
    -webkit-linear-gradient(180deg, #000, transparent)
;
background-image: 
    -moz-linear-gradient(180deg, #000, transparent),
    -moz-linear-gradient(180deg, #000, transparent)
;
background-image:
    -o-linear-gradient(180deg, #000, transparent),
    -o-linear-gradient(180deg, #000, transparent)
;
background-image: 
    linear-gradient(90deg, #000, transparent),
    linear-gradient(90deg, #000, transparent)
;
-moz-background-size: 100% 5px; /* This get flipped. */
background-size: 100% 5px; /* This get flipped. */
background-position: 0 0, 0 100%; /* The last argument gets flipped. */
background-repeat: no-repeat;

http://jsfiddle.net/vqnk9/1548/ http://jsfiddle.net/vqnk9/1548/

MDN 有一个合理的教程 https://developer.mozilla.org/en-US/docs/CSS/linear-gradient以及如何处理这个跨浏览器。

现在,如果您仔细观察,您可能会注意到非供应商background-image uses 90deg代替180deg。我原来的想法是-90deg,所以当然这对我来说是有意义的(?),但至于为什么它们不同,这是W3 spec http://dev.w3.org/csswg/css3-images/#linear-gradients(请参阅最后引用以了解这种差异背后的原因):

4.1.1.线性梯度()语法

线性梯度语法为:

<linear-gradient> = linear-gradient(
    [ [ <angle> | to <side-or-corner> ] ,]? 
    <color-stop>[, <color-stop>]+
)

<side-or-corner> = [left | right] || [top | bottom]

该函数的第一个参数指定渐变线,它为渐变提供方向并确定色标的位置。可以省略;如果是这样,它默认为“到底部”。

渐变线的方向可以通过两种方式指定:

使用角度

就本论点而言,“0deg”指向上方,正角度表示顺时针旋转,因此“90deg”指向右侧。

使用关键字

如果参数为 'to top'、'to right'、'tobottom' 或 'to left',则渐变线的角度分别为 '0deg'、'90deg'、'180deg' 或 '270deg' 。

如果参数指定了框的一个角,例如“到左上角”,则渐变线必须倾斜,使其指向与指定角相同的象限,并且垂直于与框的两个相邻角相交的线。渐变框。这会导致 50% 处的颜色停止点与两个相邻角相交(参见示例)。

从渐变框的中心开始,以指定角度向两个方向延伸一条线。终点是渐变线上的点,垂直于渐变线绘制的线将在指定方向与渐变框的角相交。起点的确定方式相同,但方向相反。

来自 MDN,一些行政琐事 https://developer.mozilla.org/en-US/docs/CSS/linear-gradient为什么程度不同(怪苹果?):

前缀变体之间仍然存在最后的语义好奇心 和无前缀的提案。根据 Apple 最初的提议, 语法的前缀变体都使用 an<angle>定义为 极角,即0deg代表东方。要连贯 与 CSS 的其余部分一样,该规范定义了一个角度0deg代表北方。为了防止网站使用带前缀的版本 即使适应了其他情况,财产也会突然被破坏 向前兼容的最终语法,它们保持原始角度 定义(0deg = East)。他们会切换到正确的规格 取消属性的​​前缀。此外,由于它们并非不相容,Gecko 支持带 to 关键字和不带 to 关键字的语法。 同样,不带关键字的语法将在以下情况下被删除: 取消前缀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单独使用 CSS,如何实现从右到左的 Border-bottom 渐变? 的相关文章

随机推荐