双边框有不同的颜色

时间:2013-10-19 08:07:32

标签: css border less

使用Photoshop,我可以将两个不同的边框放在一个具有两种不同颜色的元素上。有了它,我可以用我的元素制作许多动态的阴影效果。即使使用Photoshop效果,我也可以使用Drop Shadow和Inner Shadow来管理它。

关于网页设计问题,如果我有如下图所示的设计,我该如何用CSS实现?真的有可能吗?
border with different color

注意:我给了白色元素两个边框:外边框是白色,内边框是灰色的。它们一起创造出动感的外观,使其感觉像插入元素,白色元素是枕头压花。所以事情有点:

div.white{
   border: 2px solid white;
   border: 1px solid grey;
}

但是你知道它是双重声明,并且无效。那么如何在CSS中管理这样的事情呢?

如果我放border-style: double,那么你知道我不能为单double边框传递两种不同的颜色。

div.white{
       border: double white grey;
}

此外,我熟悉LESS CSS预处理器。因此,如果使用CSS预处理器可以做到这一点,请告诉我。

8 个答案:

答案 0 :(得分:73)

或者,您可以使用伪元素来实现这一点:)伪元素解决方案的优点是您可以使用它来隔离距离实际边界任意距离的内边框,并且背景将显示穿过那个空间。标记:

body {
  background-image: linear-gradient(180deg, #ccc 50%, #fff 50%);
  background-repeat: no-repeat;
  height: 100vh;
}
.double-border {
  background-color: #ccc;
  border: 4px solid #fff;
  padding: 2em;
  width: 16em;
  height: 16em;
  position: relative;
  margin: 0 auto;
}
.double-border:before {
  background: none;
  border: 4px solid #fff;
  content: "";
  display: block;
  position: absolute;
  top: 4px;
  left: 4px;
  right: 4px;
  bottom: 4px;
  pointer-events: none;
}
<div class="double-border">
  <!-- Content -->
</div>

如果您想要彼此连续的边框(它们之间没有空格),您可以使用多个box-shadow声明(以逗号分隔)来执行此操作:

body {
  background-image: linear-gradient(180deg, #ccc 50%, #fff 50%);
  background-repeat: no-repeat;
  height: 100vh;
}
.double-border {
  background-color: #ccc;
  border: 4px solid #fff;
  box-shadow:
    inset 0 0 0 4px #eee,
    inset 0 0 0 8px #ddd,
    inset 0 0 0 12px #ccc,
    inset 0 0 0 16px #bbb,
    inset 0 0 0 20px #aaa,
    inset 0 0 0 20px #999,
    inset 0 0 0 20px #888;
  /* And so on and so forth, if you want border-ception */
  margin: 0 auto;
  padding: 3em;
  width: 16em;
  height: 16em;
  position: relative;
}
<div class="double-border">
  <!-- Content -->
</div>

答案 1 :(得分:14)

我使用大纲简单的css 2属性。看看这个,很简单,甚至很容易制作动画:

.double-border {
  display: block;
  clear: both;
  background: red;
  border: 5px solid yellow;
  outline: 5px solid blue;
  transition: 0.7s all ease-in;
  height: 50px;
  width: 50px;
}
.double-border:hover {
  background: yellow;
  outline-color: red;
  border-color: blue;
}
<div class="double-border"></div>

答案 2 :(得分:5)

Terry 建议使用伪元素有一个PRO和一个CON:

  1. PRO - 出色的跨浏览器兼容性,因为旧IE上也支持伪元素
  2. CON - 它需要创建一个额外的(即使生成的)元素,其实例是伪元素
  3. 无论如何都是一个很好的解决方案。

    其他解决方案

    如果您可以接受IE9(IE8 does not have support for this)以来的兼容性,您可以通过其他两种方式获得所需的结果:

    1. 使用outline属性与border和单个插入 box-shadow
    2. 使用两个box-shadow结合border
    3. Here a jsFiddle使用 Terry 的修改后的代码,并排显示这些其他可能的解决方案。每个主要的特定属性如下(其他在.double-border类中共享):

      .left
      {
        outline: 4px solid #fff;
        box-shadow:inset 0 0 0 4px #fff;
      }
      
      .right
      {
        box-shadow:0 0 0 4px #fff, inset 0 0 0 4px #fff;
      }
      

      LESS代码

      您询问使用LESS等预处理器可能带来的好处。我这个具体案例,实用程序并不是那么好,但无论如何你可以用 @variable 来优化某些东西,声明颜色和边框/ ouline / shadow。

      这里是我的CSS代码示例,在LESS中声明(更改颜色和边框宽度变得非常快):

      @double-border-size:4px;
      @inset-border-color:#fff;
      @content-color:#ccc;
      
      .double-border 
      {
        background-color: @content-color;
        border: @double-border-size solid @content-color;
        padding: 2em;
        width: 16em;
        height: 16em;
        float:left;
        margin-right:20px;
        text-align:center;
      }
      
      .left
      {
        outline: @double-border-size solid @inset-border-color;
        box-shadow:inset 0 0 0 @double-border-size @inset-border-color;
      }
      
      .right
      {
        box-shadow:0 0 0 @double-border-size @inset-border-color, inset 0 0 0 @double-border-size @inset-border-color;
      }
      

答案 3 :(得分:3)

也许使用大纲属性

    <div class="borders">
      Hello
    </div>

    .borders{
    border: 1px solid grey; 
    outline: 2px solid white;
     }

https://jsfiddle.net/Ivan5646/5eunf13f/

答案 4 :(得分:2)

你可以使用css3使用box-shadow添加无限边框 假设你想在一个div上应用多个边框,那么代码就像:

div {
    border-radius: 4px;
    /* #1 */
    border: 5px solid hsl(0, 0%, 40%);

    /* #2 */
    padding: 5px;
    background: hsl(0, 0%, 20%);

    /* #3 
    outline: 5px solid hsl(0, 0%, 60%); */

    /* #4 AND INFINITY!!! (CSS3 only) */
    box-shadow:
        0 0 0 10px red,
        0 0 0 15px orange,
        0 0 0 20px yellow,
        0 0 0 25px green,
        0 0 0 30px blue;
}

答案 5 :(得分:1)

您可以使用带轮廓偏移的轮廓

<div class="double-border"></div>
.double-border{
background-color:#ccc;
outline: 1px solid #f00;
outline-offset: 3px;
}

答案 6 :(得分:0)

尝试使用以下结构来应用两个颜色边框

<div class="white">
    <div class="grey">
    </div>
</div>

.white
{
    border: 2px solid white;   
}

.grey
{
    border: 1px solid grey;   
}

答案 7 :(得分:0)

您可以使用border和box-shadow属性以及CSS伪元素来实现三重边界效果。请参阅下面的示例,了解如何在div底部创建三个边框:

.triple-border:after {
    content: " ";
    display: block;
    width: 100%;
    background: #FFE962;
    height: 9px;
    padding-bottom: 8px;
    border-bottom: 9px solid #A3C662;
    box-shadow: -2px 11px 0 -1px #34b6af;
}
<div class="triple-border">Triple border bottom with multiple colours</div>

您必须使用这些值才能使对齐正确。但是,您也可以获得更大的灵活性,例如如果将一些属性放在正确的元素而不是伪选择器中,则为4个边框。