使色带出现在矩形后面

时间:2015-06-30 23:26:06

标签: css css3 css-shapes

我正在尝试在矩形的开头创建一个功能区。但是,我无法弄清楚如何让它看起来像是在矩形之后。

请参阅此codepen:http://codepen.io/gosusheep/pen/aOqOBy

创建功能区并将其放在矩形后面的部分位于:

.rectangle::before{
  content: "";
  width: 0;
  height: 0;
  display: block;
  position: absolute;
  z-index: -1;
  border-left: 25px solid transparent;
  border-right: 25px solid $blue;
  border-top: 25px solid $blue;
  border-bottom: 25px solid $blue;
  left: -30px;
  top: 10%;
}

即使使用position: absolutez-index: -1,它也会显示在div的顶部。

任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

问题的原因不是因为孩子不能放在父母身后,而是因为你在父母身上使用transform。使用变换会影响BoltClock在this answer中提到的堆叠上下文。

一种解决方案是完全避免transform并使用left: calc(50% - 100px)代替将功能区定位在中心(如下面的代码段所示)。 (50% - 100px)用作值,因为100px是框宽的一半(50%是父级的中心点)。

.rectangle {
  width: 200px;
  height: 50px;
  background-color: #8080ff;
  position: relative;
  left: calc(50% - 100px); /* newly added */
  border: 1px #6666ff solid;
}



ul {
  list-style: none;
}

li {
  display: inline;
}

li + li::before {
  content: " | ";
}

.container {
  width: 100%;
  position: relative;
}

.rectangle {
  width: 200px;
  height: 50px;
  background-color: #8080ff;
  position: relative;
  left: calc(50% - 100px); /* newly added */
  border: 1px #6666ff solid;
}

.rectangle::before {
  content: "";
  width: 0;
  height: 0;
  display: block;
  position: absolute;
  z-index: -1;
  border-left: 25px solid transparent;
  border-right: 25px solid #8080ff;
  border-top: 25px solid #8080ff;
  border-bottom: 25px solid #8080ff;
  left: -30px;
  top: 10%;
}

<p>put a pipe between nav elements</p>
<nav>
  <ul>
    <li>banana</li>
    <li>woof</li>
    <li>quack</li>
  </ul>
</nav>
<p>Ribbon on the end of a rectangle</p>
<div class='container'>
  <div class='rectangle'></div>
</div>
&#13;
&#13;
&#13;

如果您无法使用上述解决方案,那么您可以按照下述方法进行操作。

假设您对::after伪元素没有任何其他用途,您可以使用它来创建矩形并为其z-index高于::before伪元素使它出现在矩形后面。

/* Modified */

.rectangle {
  width: 200px;
  height: 50px;
  position: relative;
  left: 50%;
  transform: translateX(-50%);
}

/* Added */

.rectangle::after {
  content: "";
  width: 100%;
  height: 100%;
  top: 0px;
  left: 0px;
  display: block;
  position: absolute;
  background-color: #8080ff;
  border: 1px #6666ff solid;
  z-index: -1;
}

.rectangle{
  padding: 4px;
  box-sizing: border-box;
}

以下是一个示例代码段:

&#13;
&#13;
ul {
  list-style: none;
}
li {
  display: inline;
}
li + li::before {
  content: " | ";
}
.container {
  width: 100%;
  position: relative;
}
.rectangle::before {
  content: "";
  width: 0;
  height: 0;
  display: block;
  position: absolute;
  z-index: -2;
  border-left: 25px solid transparent;
  border-right: 25px solid #8080ff;
  border-top: 25px solid #8080ff;
  border-bottom: 25px solid #8080ff;
  left: -30px;
  top: 10%;
}

/* Modified */

.rectangle {
  width: 200px;
  height: 50px;
  position: relative;
  left: 50%;
  transform: translateX(-50%);
}

/* Added */

.rectangle::after {
  content: "";
  width: 100%;
  height: 100%;
  top: 0px;
  left: 0px;
  display: block;
  position: absolute;
  background-color: #8080ff;
  border: 1px #6666ff solid;
  z-index: -1;
}

.rectangle{
  padding: 4px;
  box-sizing: border-box;
}
&#13;
<p>put a pipe between nav elements</p>
<nav>
  <ul>
    <li>banana</li>
    <li>woof</li>
    <li>quack</li>
  </ul>
</nav>
<p>Ribbon on the end of a rectangle</p>
<div class='container'>
  <div class='rectangle'>
    Some content
  </div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

这里发生的事情显然是,transform: translateX(-50%);属性以某种方式“覆盖”z-index。我的解决方案只是中心矩形,例如:

.rectangle{
    margin: 0 auto;
}

DEMO

答案 2 :(得分:1)

此处的解决方案,密切关注z-indices和position

.container{
  position: relative;
  width: 100%;
  z-index: 1;
}

.rectangle{
  width: 200px;
  height: 50px;
  background-color: $blue;
  position: absolute;
  left: 50%;
  border: 1px darken($blue,5%) solid;
}

.rectangle::after{
  content: "";
  width: 0;
  height: 0;
  border-left: 25px solid transparent;
  border-right: 25px solid $blue;
  border-top: 25px solid $blue;
  border-bottom: 25px solid $blue;
  left: -30px;
  top: 10px;
  position: absolute;
  z-index: -1;
}

您的codepen已编辑http://codepen.io/anon/pen/mJXeed现在正在使用