2017-07-27 56 views
0

我正在尝试设置网格块,但即使看起来好像我正在使块填满容器宽度的100%。他们似乎没有正确排列。网格中块的宽度计算

第一行应该有一个大块和三个小块。其次应由第一大块,一块小块和一块大块的剩余部分填满。

看起来好像块的总宽度大于容器宽度,迫使它进入第二行并弄乱布局。

我是否缺少一些属性?

.content { 
 
    width: 100%; 
 
    margin-top: -5px; 
 
    margin-right: -5px; 
 
    position: relative; 
 
    height: 100%; 
 
} 
 

 
.grid { 
 
    width: 100%; 
 
} 
 

 
.block { 
 
    position: relative; 
 
    display: inline-block; 
 
    margin: 5px; 
 
    width: calc(20% - 10px); 
 
    padding-bottom: calc(20% - 10px); 
 
    vertical-align: top; 
 
} 
 

 
.block:nth-child(14), 
 
.block:nth-child(18), 
 
.block:nth-child(19), 
 
.block:nth-child(20), 
 
.block:nth-child(5), 
 
.block:nth-child(6), 
 
.block:nth-child(7), 
 
.block:nth-child(8), 
 
.block:nth-child(9) { 
 
    margin-top: calc(-20% + 5px) 
 
} 
 

 
.block:nth-child(1), 
 
.block:nth-child(11), 
 
.block:nth-child(20), 
 
.block:nth-child(6) { 
 
    width: calc(40% - 10px); 
 
    padding-bottom: calc(40% - 10px) 
 
} 
 

 
.block:nth-child(5) { 
 
    margin-left: calc(40% + 5px) 
 
} 
 

 
.block:nth-child(10) { 
 
    margin-left: calc(-60% + 5px) 
 
} 
 

 
.block:nth-child(15) { 
 
    margin-left: calc(-20% + 5px) 
 
}
<div class="content"> 
 
    <div class="grid"> 
 
    <div class="block" style="background-color: #2be6d9"></div> 
 
    <div class="block" style="background-color: #d0c7dd"></div> 
 
    <div class="block" style="background-color: #f06859"></div> 
 
    <div class="block" style="background-color: #f06859"></div> 
 
    <div class="block" style="background-color: #68d2e7"></div> 
 
    <div class="block" style="background-color: #001fc9"></div> 
 
    <div class="block" style="background-color: #d040e9"></div> 
 
    <div class="block" style="background-color: #fd1341"></div> 
 
    <div class="block" style="background-color: #0c8eec"></div> 
 
    <div class="block" style="background-color: #2be6d9"></div> 
 
    <div class="block" style="background-color: #d0c7dd"></div> 
 
    <div class="block" style="background-color: #f06859"></div> 
 
    <div class="block" style="background-color: #f06859"></div> 
 
    <div class="block" style="background-color: #68d2e7"></div> 
 
    <div class="block" style="background-color: #001fc9"></div> 
 
    <div class="block" style="background-color: #d040e9"></div> 
 
    <div class="block" style="background-color: #fd1341"></div> 
 
    <div class="block" style="background-color: #0c8eec"></div> 
 
    <div class="block" style="background-color: #f06859"></div> 
 
    <div class="block" style="background-color: #f06859"></div> 
 
    <div class="block" style="background-color: #68d2e7"></div> 
 
    <div class="block" style="background-color: #001fc9"></div> 
 
    <div class="block" style="background-color: #d040e9"></div> 
 
    <div class="block" style="background-color: #fd1341"></div> 
 
    </div> 
 
</div>

+1

这看起来复杂,是一场噩梦维护。你能提供一个想要的结果吗?还可以考虑使用CSS Grid还是Flexbox进行布局? – sol

回答

2

你的问题是div s表示让您的块之间的空白。所以你的箱子是100%,加上箱子之间的“”。

快速简便的解决方案是删除div之间的新行/空格。

或者,在空白处添加注释(请参见下文)。

.content { 
 
    width: 100%; 
 
    margin-top: -5px; 
 
    margin-right: -5px; 
 
    position: relative; 
 
    height: 100%; 
 
} 
 

 
.grid { 
 
    width: 100%; 
 
} 
 

 
.block { 
 
    position: relative; 
 
    display: inline-block; 
 
    margin: 5px; 
 
    width: calc(20% - 10px); 
 
    padding-bottom: calc(20% - 10px); 
 
    vertical-align: top; 
 
} 
 

 
.block:nth-child(14), 
 
.block:nth-child(18), 
 
.block:nth-child(19), 
 
.block:nth-child(20), 
 
.block:nth-child(5), 
 
.block:nth-child(6), 
 
.block:nth-child(7), 
 
.block:nth-child(8), 
 
.block:nth-child(9) { 
 
    margin-top: calc(-20% + 5px) 
 
} 
 

 
.block:nth-child(1), 
 
.block:nth-child(11), 
 
.block:nth-child(20), 
 
.block:nth-child(6) { 
 
    width: calc(40% - 10px); 
 
    padding-bottom: calc(40% - 10px) 
 
} 
 

 
.block:nth-child(5) { 
 
    margin-left: calc(40% + 5px) 
 
} 
 

 
.block:nth-child(10) { 
 
    margin-left: calc(-60% + 5px) 
 
} 
 

 
.block:nth-child(15) { 
 
    margin-left: calc(-20% + 5px) 
 
}
<div class="content"> 
 
    <div class="grid"> 
 
    <div class="block" style="background-color: #2be6d9"></div><!-- 
 
\t --><div class="block" style="background-color: #d0c7dd"></div><!-- 
 
\t --><div class="block" style="background-color: #f06859"></div><!-- 
 
\t --><div class="block" style="background-color: #f06859"></div><!-- 
 
\t --><div class="block" style="background-color: #68d2e7"></div><!-- 
 
\t --><div class="block" style="background-color: #001fc9"></div><!-- 
 
\t --><div class="block" style="background-color: #d040e9"></div><!-- 
 
\t --><div class="block" style="background-color: #fd1341"></div><!-- 
 
\t --><div class="block" style="background-color: #0c8eec"></div><!-- 
 
\t --><div class="block" style="background-color: #2be6d9"></div><!-- 
 
\t --><div class="block" style="background-color: #d0c7dd"></div><!-- 
 
\t --><div class="block" style="background-color: #f06859"></div><!-- 
 
\t --><div class="block" style="background-color: #f06859"></div><!-- 
 
\t --><div class="block" style="background-color: #68d2e7"></div><!-- 
 
\t --><div class="block" style="background-color: #001fc9"></div><!-- 
 
\t --><div class="block" style="background-color: #d040e9"></div><!-- 
 
\t --><div class="block" style="background-color: #fd1341"></div><!-- 
 
\t --><div class="block" style="background-color: #0c8eec"></div><!-- 
 
\t --><div class="block" style="background-color: #f06859"></div><!-- 
 
\t --><div class="block" style="background-color: #f06859"></div><!-- 
 
\t --><div class="block" style="background-color: #68d2e7"></div><!-- 
 
\t --><div class="block" style="background-color: #001fc9"></div><!-- 
 
\t --><div class="block" style="background-color: #d040e9"></div><!-- 
 
\t --><div class="block" style="background-color: #fd1341"></div> 
 
    </div> 
 
</div>

+0

谢谢你让我意识到空白。结束添加字体大小:0;到.grid元素。 – sankorati

+0

这也适用;) –