html - 向部分添加边距会破坏三列设计
问题描述
下面是一个简单的三栏设计的 HTML & CSS 代码。但是当我添加时padding: 0 1%;
,它会破坏列并将第三列推到第二行。这真的很奇怪,因为我认为我添加了填充,它应该在 div 内,而不是边距?我该如何解决?
#container {
width: 800px;
margin: 0 auto;
}
.row {
width: 100%
}
.part {
width: 33.33%;
padding: 0 1%;
}
<div id="container">
<div class="row">
<div class="part"><img>
<p class="text">some text</p>
</div>
<div class="part"><img>
<p class="text">some text</p>
</div>
<div class="part"><img>
<p class="text">some text</p>
</div>
</div>
<div class="row">
<div class="part"><img>
<p class="text">some text</p>
</div>
<div class="part"><img>
<p class="text">some text</p>
</div>
<div class="part"><img>
<p class="text">some text</p>
</div>
</div>
<div class="row">
<div class="part"><img>
<p class="text">some text</p>
</div>
<div class="part"><img>
<p class="text">some text</p>
</div>
<div class="part"><img>
<p class="text">some text</p>
</div>
</div>
</div>
解决方案
第一个注意事项:你display: inline-block
从part
div 中丢失了。
我添加了填充,它应该在 div 内,而不是边距
不,默认情况下填充不在 div 内,填充添加到实际宽度,以便每个部分的全宽为:
33% + 1% 左边距 + 1% 右边距 = 35%;
并且行的总宽度将为:105%,因此它不适合容器并将拆分到另一行。
一种解决方案是part
宽度:31%;
#container {
width: 800px;
margin: 0 auto;
}
.row {
width: 100%;
}
.part {
width: 31%;
padding: 0 1%;
display: inline-block
}
<div id="container">
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
</div>
如果您想将所有填充视为宽度的一部分,则其他解决方案是使用:
* {
box-sizing: border-box;
}
* {
box-sizing: border-box;
}
#container {
width: 800px;
margin: 0 auto;
}
.row {
width: 100%;
}
.part {
width: 33%;
padding: 0 1%;
display: inline-block;
}
<div id="container">
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
</div>
</body>
第三种解决方案,我认为最好的方法是使用display: grid
每一行;
#container {
width: 800px;
margin: 0 auto;
}
.row {
width: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
.part {
padding: 0 1%;
}
<div id="container">
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
<div class="row">
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
<div class="part">
<img />
<p class="text">some text</p>
</div>
</div>
</div>
推荐阅读
- python - 如何使用 try-except 块来验证输入,并使用 while 语句提示用户,直到 Python 中的有效输入?
- git - git push 失败,错误对象 hasDotgit: contains '.git'
- java - Wiremock-独立 jar --port 选项不起作用
- python - Python pandas 将输出保存到一个 txt 文件中
- loops - 如何让我的机器人永远做某事,直到它被告知停止
- ruby - Mac Ruby 卡在 2.6.3p62
- javascript - 获取表单数据并将其发布到 URL
- docker - 如何解决 Prometheus/Grafana/Jenkins 的 Docker 权限问题?
- c++ - 位运算符更快吗?如果是,那为什么?
- windows - 使用 wmic 加入域并同时更改计算机名称