简短的回答:
block元素,比如<div>默认采用父元素的宽度(如果没有width设置),并且不会进一步扩展(即使子内容溢出)。inline元素的情况并非如此,例如<span>,它将取而代之的是子内容的宽度。
因此,通过使用,inline-block您将受益于子内容的宽度和高度,并拥有您想要的。
(存在其他解决方案,例如:float: left;、、position: absolute;...)
更多解释:
我遇到了同样的问题,我想创建一个旋转木马(或 OP 要求的带有平铺的水平滚动窗格),最后有填充,所以最后一个项目不会折叠到视口的边缘。
因此,基本上,您将拥有可滚动的 carrousel 元素(the frame),然后是带有填充物(the )的瓷砖容器,pane最后是瓷砖(the items):
body {
margin: 20px;
}
.frame {
overflow-x: scroll;
}
.pane {
background-color: grey;
padding: 20px;
white-space: nowrap
}
.item {
background-color: red;
display: inline-block;
width: 100px;
height: 100px;
margin-right: 20px;
}
.item:last-child {
margin-right: 0;
}
<div class="frame">
<div class="pane">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>
如您所见,填充在开始时起作用,但在结束时不起作用,因为pane' 的宽度不会超出父宽度(frame在本例中为 ' 宽度)。
添加修复问题display: inline-block;:pane
body {
margin: 20px;
}
.frame {
overflow-x: scroll;
}
.pane {
background-color: grey;
display: inline-block;
padding: 20px;
white-space: nowrap
}
.item {
background-color: red;
display: inline-block;
width: 100px;
height: 100px;
margin-right: 20px;
}
.item:last-child {
margin-right: 0;
}
<div class="frame">
<div class="pane">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>
现代解决方案(没有white-space: nowrap;):
与 OP 关于white-space: nowrap;规则的问题有点不同,如果您正在寻找更现代的解决方案来创建轮播,您可以使用flex规则来实现这一点,因为 flex 容器中的项目默认情况下不会包装,而且它也会使 CSS 更简洁:
body {
margin: 20px;
}
.frame {
overflow-x: scroll;
}
.pane {
background-color: grey;
display: inline-flex;
padding: 20px;
}
.item {
background-color: red;
width: 100px;
height: 100px;
margin-right: 20px;
}
.item:last-child {
margin-right: 0;
}
<div class="frame">
<div class="pane">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>