【发布时间】:2016-07-21 07:00:34
【问题描述】:
我正在尝试使水平列表居中,其项目也相对于主要父级(窗口或主体)居中;而且因为我不知道我将在该列表中生成什么样的项目和多少项目,所以我需要项目的宽度是动态的并且列表可滚动,以便我可以浏览所有项目。
到目前为止,我的尝试都很好,我得到了:一个居中的列表,其中包含动态宽度的非居中项目;以及具有固定宽度项目的完全居中的可滚动列表。
核心思想基本上是通过使用来实现的:
ul {
width: 100%;
overflow-x: scroll;
overflow-y: hidden;
white-space: nowrap;
}
li {
display: inline-block;
}
然后通过将<ul> 包裹到<div> 中来进行居中,并使<div> 滚动<ul> 而不是<ul> 滚动<li>。它允许将基于百分比的边距添加到<ul>
div {
width: 100%;
overflow-x: scroll;
overflow-y: hidden;
white-space: nowrap;
}
ul {
margin: 0 50%;
}
li {
display: inline-block;
}
对于按宽度居中的项目,想法是使用 translateX(-50%) 稍加改动:因为我不希望我的列表在滚动结束时有额外的空间,所以我删除了最后一个项目通过将其绝对定位在末尾来从流程中提取;这样,<ul> 的宽度看起来就像项目宽度的总和减去一项。
ul {
position: relative;
margin: 0 50%;
}
li {
display: inline-block;
width: some_number;
transform: translateX(-50%);
}
li:last-child {
position: absolute;
left: 100%;
}
但是如何在不设置宽度的情况下保持这种状态对我来说是个谜。
有什么想法吗?
这是我在 CSS 部分中对一些 cmets 的摆弄:https://jsfiddle.net/11gkrju0/
我希望不为此使用 javascript,因为这只是样式问题,但与 dom 混在一起是一个完全可行的选择。
感谢大家的阅读,
【问题讨论】:
标签: html css width centering horizontal-scrolling