【问题标题】:Color border in corners seperatly角落的颜色边框分别
【发布时间】:2014-08-18 15:08:03
【问题描述】:

有没有办法在 CSS 中为 边框角 着色?

即:border-top-left-corner-color: red

如果不能用纯 CSS 做,能不能用一些 JS/jQuery 技巧来做?

【问题讨论】:

  • 试试看这个previous question。我想它可能会对你有所帮助。
  • 我不知道 - 你能用border-image达到同样的效果吗?
  • 您需要指定多少像素或显示图片应该是什么样子。

标签: jquery html css border css-shapes


【解决方案1】:

您可以使用 4 个伪元素分别为每个边框角上色,并分别设置每个角的边框颜色、宽度和样式:

DEMO

.outer{
    width:500px;
    height:500px;
    background:gold;
    position:relative;
}
div:before, div:after{
    content:'';
    position:absolute;
    height:10%;
    width:10%;
}
.outer:after{
    right:0;
    border-right: 3px solid red;
    border-top: 3px solid red;
}
.outer:before{
    border-left: 3px solid green;
    border-top: 3px solid green;
}
.inner:before{
    bottom:0;
    border-left: 3px solid black;
    border-bottom: 3px solid black;
}
.inner:after{
    bottom:0; right:0;
    border-right: 3px solid blue;
    border-bottom: 3px solid blue;
}
<div class="outer">
    <div class="inner"></div>
</div>

【讨论】:

  • @srekoble 如果您在div 中添加其他元素,您可以将其应用于所有角落
  • 是的,但干净的标记总是更好,否则你就拿了我的 +1 来使用伪元素。
【解决方案2】:

有点晚了..

这是我的解决方案

.test {
    width: 200px;
    height: 100px;
    border: 10px solid transparent;
    background-image: linear-gradient(0deg, white 0%, white 100%),
        linear-gradient(0deg, green 0%, green 100%),
        linear-gradient(0deg, red 0%, red 100%),
        linear-gradient(0deg, yellow 0%, yellow 100%),
        linear-gradient(0deg, blue 0%, blue 100%);
    background-origin: padding-box, border-box, border-box, border-box, border-box;
    background-repeat: no-repeat;
    background-size: 100% 100%, 50% 50%, 50% 50%, 50% 50%, 50% 50%;
    background-position: top left, top left, top right, bottom left, bottom right;
}
&lt;div class="test"&gt;&lt;/div&gt;

颜色是通过设置为边框框的 4 个背景来实现的。然后它们被设置为 padding-box 的白色背景所掩盖。

请注意,边框的粗细仍由border 属性设置。 (但边框本身是透明的)

另一种方法,使用伪元素来掩盖内部部分

.test {
    width: 200px;
    height: 100px;
    border: 10px solid transparent;
    background-image: linear-gradient(0deg, green 0%, green 100%),
        linear-gradient(0deg, red 0%, red 100%),
        linear-gradient(0deg, yellow 0%, yellow 100%),
        linear-gradient(0deg, blue 0%, blue 100%);
    background-origin: border-box, border-box, border-box, border-box;
    background-repeat: no-repeat;
    background-size: 50% 50%, 50% 50%, 50% 50%, 50% 50%;
    background-position: top left, top right, bottom left, bottom right;
    border-radius: 40px;
  position: relative;
}

.test:after {
  content: "";
  position: absolute;
  top: 0px;
  right: 0px;
  left: 0px;
  bottom: 0px;
  background-color: white;
  border-radius: 30px;
}
&lt;div class="test"&gt;&lt;/div&gt;

【讨论】:

  • 有趣的答案。一旦border-image 在所有浏览器中都可用,也许它会更直接一些。
  • @Harry 是的,当然,使用边框图像会更直接。但是,这种方法允许圆角,目前在边框图像中不可用。 (除非您在图像本身中设置它,但这是一种更难的方法)
  • 嗯,很有趣。还没有真正尝试过border-image 选项,所以不知道圆角问题。
  • 如果背景是透明的,怎么办?
【解决方案3】:

我必须做一些类似想要的结果的事情(我只是想让 正方形 角被着色)。

所以我做了这个:

div#jazzyDIV {
 --borderWidth: 5px;
 background-repeat: no-repeat;
 background-origin: padding-box, border-box, border-box, border-box, border-box;
 background-image: linear-gradient(0deg, transparent 0%, transparent 100%), linear-gradient(0deg, green 0%, green 100%), linear-gradient(0deg, red 0%, red 100%), linear-gradient(0deg, yellow 0%, yellow 100%), linear-gradient(0deg, blue 0%, blue 100%);
 width: 40px;
 height: 40px;
 border-width: var(--borderWidth);
 border-style: solid;
 border-color: transparent;
 background-size: cover, var(--borderWidth) var(--borderWidth), var(--borderWidth) var(--borderWidth), var(--borderWidth) var(--borderWidth), var(--borderWidth) var(--borderWidth);
 background-position: center,top left, top right, bottom right, bottom left;
}
&lt;div id="jazzyDIV"&gt;&lt;/div&gt;

如果你想扩大彩色角落,你可以在每对“背景大小”的值(宽度和高度)上使用“calc(...)”(跳过第一个,因为它用于内部背景)

如果你想要一张背景图片,你可以将 background-image 的第一个参数替换为“url('your_image.png')”。它将在填充框中呈现

另一个转折点:

div#jazzyDIV {
 --borderWidth: 5px;
 background-repeat: no-repeat;
 background-origin: padding-box, border-box, border-box, border-box, border-box, border-box, border-box, border-box, border-box;
 background-image: linear-gradient(0deg, transparent 0%, transparent 100%), linear-gradient(0deg, green 0%, green 100%), linear-gradient(0deg, red 0%, red 100%), linear-gradient(0deg, yellow 0%, yellow 100%), linear-gradient(0deg, blue 0%, blue 100%), linear-gradient(0deg, orange 0%, orange 100%), linear-gradient(0deg, pink 0%, pink 100%), linear-gradient(0deg, magenta 0%, magenta 100%), linear-gradient(0deg, cyan 0%, cyan 100%);
 width: 90px;
 height: 40px;
 border-width: var(--borderWidth);
 border-style: solid;
 border-color: transparent;
 background-size: cover, var(
 --borderWidth) var(--borderWidth), calc(100% - var(--borderWidth) * 2) var(--borderWidth), var(--borderWidth) var(--borderWidth), var(--borderWidth) calc(100% - var(--borderWidth) * 2), var(--borderWidth) var(--borderWidth), calc(100% - var(--borderWidth) * 2) var(--borderWidth), var(--borderWidth) var(--borderWidth), var(--borderWidth) calc(100% - var(--borderWidth) * 2);
 background-position: center,top left, top, top right, right, bottom right, bottom, bottom left, left;
}
&lt;div id="jazzyDIV"&gt;&lt;/div&gt;

两者都基于@vals 给出的解决方案。

【讨论】:

    猜你喜欢
    • 2012-10-26
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    相关资源
    最近更新 更多