我正在做一个练习,尝试重新创建它:https://ibb.co/Nx48VbD
* {
box-sizing: border-box;
}
.row-1 {
background-color: grey;
border: 1px solid black;
width: 1178px;
height: 146px;
margin: 96px auto 0 auto;
position: relative;
right: 12px;
}
.row-2 {
float: left;
margin: 0 auto;
}
.b1 {
background-color: grey;
border: 1px solid black;
width: 346px;
height: 248px;
margin-top: 24px;
float: left;
}
.b1:nth-of-type(1) {
margin-right: 90px;
}
.b1:nth-of-type(2) {
margin-right: 46px;
}
.b1:nth-of-type(3) {
bottom: 12px;
right: 12px;
}
.row-3 {
background-color: grey;
border: 1px solid black;
width: 1188px;
height: 326px;
margin: 24px auto;
border-radius: 36px;
}
.b2 {
background-color: gray;
border: 1px solid black;
height: 202px;
border-radius: 24px;
float: left;
}
.b2:nth-of-type(1) {
width: 726px;
margin-right: 24px;
}
.b2:nth-of-type(2) {
width: 438px;
}
.b3 {
background-color: gray;
border: 1px solid black;
height: 202px;
margin-top: 24px;
float: left;
}
.b3:nth-of-type(1) {
width: 436px;
margin-right: 84px;
border-radius: 24px;
}
.b3:nth-of-type(2) {
width: 666px;
}
<div class="row-1"></div>
<div class="row-2">
<div class="b1"></div>
<div class="b1"></div>
<div class="b1"></div>
</div>
<div style="clear: both;"></div>
<div class="row-3"></div>
<div class="row-4">
<div class="b2"></div>
<div class="b2"></div>
</div>
<div style="clear: both;"></div>
<div class="row-5">
<div class="b3"></div>
<div class="b3"></div>
</div>
我可以使用margin:0 auto;使第一行和第三行居中。但是,当我在第二行,第四行和第五行尝试此操作时,它似乎不起作用。如何像图像中显示的那样居中放置它们?
我还有背景色:灰色;边框:1px纯黑色;在很多地方。有什么办法可以使我干燥吗?
由于每个框都有12px的边框,所以我还有很多margin-top margin-bottoms。有没有办法我也可以做这个DRY-er?
注意:本练习应该在不使用flexbox或CSS网格的情况下完成。
谢谢!
答案 0 :(得分:2)
使用display: inline-block
代替.b1
上的浮点数
使用calc将它们设置为相等的宽度,然后设置text-align:第2行居中
.row-2{
text-align: center;
}
.b1{
display: inline-block;
vertical-align: top;
width: calc(100%/3 - 10px);
height: 100px;
border: 2px solid grey;
}
<div class="row-2">
<div class="b1"></div>
<div class="b1"></div>
<div class="b1"></div>
</div>
如果您想使颜色/边界变干,我建议您学习SASS / SCSS,然后就可以使用变量和mixins
答案 1 :(得分:1)
我不是要为您解决问题,这不是一个确切的例子。这暗示您要注意flex
Flex不会取消边距或填充,对于flex子代也有规则。可以毫无保留地指出容器的位置和空间。.有很多有趣的规则
* {
box-sizing: border-box;
}
.root {
display: flex;
flex-direction: column;
align-items: stretch;
}
.row-1 {
background-color: grey;
border: 1px solid black;
width: 1178px;
height: 146px;
}
.row-2 {
display: flex;
align-items: center;
display: flex;
align-items: center;
}
.b1 {
background-color: grey;
border: 1px solid black;
width: 346px;
height: 248px;
}
.row-3 {
background-color: grey;
border: 1px solid black;
width: 1188px;
height: 326px;
border-radius: 36px;
}
.row-4 {
display: flex;
}
.row-5 {
display: flex;
}
.b2 {
background-color: gray;
border: 1px solid black;
height: 202px;
border-radius: 24px;
}
.b2:nth-of-type(1) {
width: 726px;
}
.b2:nth-of-type(2) {
width: 438px;
}
.b3 {
background-color: gray;
border: 1px solid black;
height: 202px;
}
.b3:nth-of-type(1) {
width: 436px;
border-radius: 24px;
}
<div class="root">
<div class="row-1">row-1</div>
<div class="row-2">
<div class="b1">b1 in row-2</div>
<div class="b1">b1 in row-2</div>
<div class="b1">b1 in row-2</div>
</div>
<div class="row-3">row-3</div>
<div class="row-4">
<div class="b2">b2 in row-4</div>
<div class="b2">b2 in row-4</div>
</div>
<div class="row-5">
<div class="b3">b3 in row-5</div>
<div class="b3">b3 in row-5</div>
</div>
</div>
答案 2 :(得分:0)
从您的图像看来,您实际上似乎并不希望任何行浮动。 float的作用是将元素从文档流中移出,并将它们放入新的分离流中,该流仅受同一上下文中其他浮动元素的影响。
您似乎想要拥有的所有行都以相同的宽度居中,一个接一个,并且行内的元素浮动。
我将执行以下操作,而不是执行row-2
的操作:
.row-2, .row-4, .row-5 {
width: 1178px;
margin: 0 auto;
}
这是一个显示固定代码的jsfiddle:https://jsfiddle.net/fvzaujob/1/
顺便说一句,如今,一种更广泛使用的解决方案是使用flex或grids而不是float来控制文档中元素的流动,因为它使您可以更好地控制元素。
答案 3 :(得分:0)
您可以按照此代码分隔列。无需为每一列设置任何边距空间。您可以根据需要调整容器的宽度。 此代码中未使用Bootstrap和flexbox 。我希望这个答案会有所帮助。
* {
box-sizing: border-box;
}
.container {
max-width: 1178px;
margin: 0 auto;
}
.row-3 {
background-color: grey;
border: 1px solid black;
border-radius: 15px;
}
.row-1 {
background-color: grey;
border: 1px solid black;
margin: 50px 0 0;
}
.col-4 {
background-color: grey;
border: 1px solid black;
width: 32.26%;
height: 250px;
display: inline-block;
padding: 0 0;
}
.row:before,
.row:after,
{
content: "";
display: table;
}
.row {
clear: both;
padding: 0px;
margin: 0 0 15px;
overflow: hidden;
height: 140px;
}
.col-4:first-child,
.col-9:first-child,
.col-3:first-child {
margin-left: 0;
}
.col-4,
.col-9,
.col-3 {
display: block;
float: left;
margin: 0 0 0 1.6%;
height: 140px;
}
.col-9 {
background-color: grey;
border: 1px solid black;
width: 60%;
display: inline-block;
padding: 0 0;
border-radius: 15px;
}
.col-3 {
background-color: grey;
border: 1px solid black;
width: 38.26%;
display: inline-block;
padding: 0 0;
border-radius: 15px;
}
<div class="container">
<div class="row row-1"></div>
<div class="row">
<div class="col-4"></div>
<div class="col-4"></div>
<div class="col-4"></div>
</div>
<div class="row row-3"></div>
<div class="row">
<div class="col-9"></div>
<div class="col-3"></div>
</div>
<div class="row">
<div class="col-3"></div>
<div class="col-9"></div>
</div>
</div>