将div居中并为一侧的空间赋予颜色

时间:2018-05-22 12:00:48

标签: html css

我想要一个居中的div,而我的魔杖左侧则用颜色填充(如我的例子所示)。

我在这里有2个解决方案(不使用flexbox),他们都感觉像黑客一样。

body {
    margin: 0;
    padding: 0;
}

.header {
    width: 100%;
    height: 60px;
    position: fixed;
}

.center-part {
    width: 500px;
    margin: 0 auto;
    height: inherit;
    background-color: rgba(0,255,0,0.8);
    position: relative;
}

.blue-big {
    background-color: blue;
    width: 9999px;
    height: inherit;
    position: absolute;
    right: 500px;
}

.equal-side {
    display: table-cell;
}
<div class="header" style="top: 0px">
    <div class="center-part">
        <div class="blue-big">
        
        </div>
    </div>
</div>

<div class="header" style="top: 70px; display: table;">
    <div class="equal-side" style="background-color: blue">
    </div>
    <div class="center-part" style="display: table-cell;">
    </div>
    <div class="equal-side">
    </div>
</div>

上一个使用大div和定位,但第二个使用“display:table”

我想知道他们中的任何一个是好的好的练习还是应该在其他方面做到这一点?

蓝色绿色DIV实际上不是全高,所以在背景中放置50%宽度的div不是一个选项

3 个答案:

答案 0 :(得分:3)

更简单的解决方案是使用线性渐变,如下所示:

&#13;
&#13;
.container {
  background: linear-gradient(to right, green 50%, transparent 0) 0 0/100% 40% no-repeat;
  height: 100px;
  background-color:rgba(255,0,0,0.5);
}

.container>div {
  width: 300px;
  height: 40%;
  background:blue;
  margin: 0 auto;
}
&#13;
<div class="container">
  <div></div>
</div>
&#13;
&#13;
&#13;

或者考虑伪元素溢出:

&#13;
&#13;
.container {
  overflow:hidden;
  height: 100px;
}

.container>div {
  width: 300px;
  height: 100%;
  background:blue;
  margin: 0 auto;
  position:relative;
}
.container>div:before {
  content:"";
  position:absolute;
  top:0;
  right:0;
  left:-1000%;
  bottom:0;
  background:green;
  z-index:-1;
}
&#13;
<div class="container">
  <div></div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

此解决方案适用于我https://codepen.io/anon/pen/GdeYdK?editors=1100

HTML:

    <div class="test-header">
  <div class="equal-side left-side">
  </div>
  <div class="center-part">
     <div class="center">
       SOME TEXT HERE
    </div>
  </div>
  <div class="equal-side right-side">
  </div>
</div>

CSS:

    .test-header {
  position: relative;
  width: 100%;
  height: 60px;
  text-align: center;
}

.equal-side {  
  display: inline-block;
  height: 100%;
  width: 49%;
}

.left-side {
  background: blue;
}

.right-side {
  background: red;
}

.center-part {
  background: white;
  width: 500px;
  height: 60px;
  display: block;
  position: absolute;
  margin-left: -250px;   /*half of center element's width*/
  left: 50%;
  top: 0;
}

.center {
  width: 100%;
  border: 1px dashed;
}

答案 2 :(得分:-1)

您可以使用线性渐变,只需要一个元素 - 有关此主题,另请参阅CSS-tricks。他们对如何做这件事有很好的解释。

在我的原始答案中,我忘了将容器包括在div中心。我已经更新了两个例子 - 一个使用flexbox而另一个没有。我不太确定你是否不能使用flexbox,或者不想 - 所以我已将两者都包括在内。

&#13;
&#13;
.container {
  display: flex;
  justify-content: center;
}

.bar {
  height: 50px;
  width: 400px;
  background-image:
    linear-gradient(
      to right, 
      red,
      red 50%,
      orange 50%,
      orange 100%
    );
}

.bar-noflexbox {
  height: 50px;
  width: auto;
  margin: 1rem 20%;
  background-image:
    linear-gradient(
      to right, 
      red,
      red 50%,
      orange 50%,
      orange 100%
    );
}
&#13;
<div class="container">
  <div class="bar"></div>
</div>

<div>
  <div class="bar-noflexbox"></div>
</div>
&#13;
&#13;
&#13;