简短的回答:
block
元素,比如<div>
默认采用父元素的宽度(如果没有width
设置),并且不会进一步扩展(即使子内容溢出)。inline
元素的情况并非如此,例如<span>
,它将取而代之的是子内容的宽度。
因此,通过使用,inline-block
您将受益于子内容的宽度和高度,并拥有您想要的。
(存在其他解决方案,例如:float: left;
、、position: absolute;
...)
更多解释:
我遇到了同样的问题,我想创建一个旋转木马(或 OP 要求的带有平铺的水平滚动窗格),最后有填充,所以最后一个项目不会折叠到视口的边缘。
因此,基本上,您将拥有可滚动的 carrousel 元素(the frame
),然后是带有填充物(the )的瓷砖容器,pane
最后是瓷砖(the item
s):
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>