我正在尝试创建一个水平滚动列表。当Javascript启用时,我将用一个花哨的版本替换它,但我希望标记和CSS在没有Javascript的情况下在合理的现代浏览器上看起来和工作正常(任何以任何方式使用Javascript的建议都是关闭的)。
我目前的标记/ css有效,但这是我不喜欢的:
div
s(标识为#extra1
,#extra2
),仅用于样式目的。 有没有办法消除这个额外的div? <a>
标签由水平列表分隔,我最好将它们保持在一起。 有没有办法让它们靠近并在CSS中干净地分开它们? 除此之外,您是否知道讨论此类事情的任何教程?我已经看过几个教程,它们展示了整个页面的滚动,我从中获取了一些想法,但我找不到任何展示滚动ul / ol元素的内容。
可能有用的额外信息:
答案 0 :(得分:30)
更新(2018年):基于display: inline
的原始解决方案现已超过7年。在今天的世界中,我会推荐使用flexbox方法,因为它可以让您完全控制图像之间出现的间隙。
首先检查browser compatibility(你可能没问题),并根据需要添加前缀。
ul.images {
margin: 0;
padding: 0;
display: flex;
flex-direction: row;
width: 900px;
overflow-x: auto;
}
ul.images li {
flex: 0 0 auto;
width: 150px;
height: 150px;
}
<ul class="images">
<!-- Inline styles added for demonstration purposes only. -->
<li style="background-color: #dff">...</li>
<li style="background-color: #fdf">...</li>
<li style="background-color: #ffd">...</li>
</ul>
display: inline
这适用于我,在Firefox 4 beta 10中测试过,建议在IE中测试它:
ul.images {
margin: 0;
padding: 0;
white-space: nowrap;
width: 900px;
overflow-x: auto;
}
ul.images li {
display: inline;
}
<ul class="images">
<!-- Inline styles added for demonstration purposes only. -->
<li style="background-color: #dff">...</li>
<li style="background-color: #fdf">...</li>
<li style="background-color: #ffd">...</li>
</ul>
CSS中的技巧是将li
设置为display: inline
,因此将它们视为字符并彼此相邻放置,并在{{1}上设置white-space:nowrap
所以没有完成换行。您无法在内联元素上指定大小,但它们将被拉伸以适合其中的ul
元素。然后,在父img
元素上滚动只是overflow-x: auto
。
添加上一个/下一个按钮可以使用ul
,也可以使用position:absolute
或其他任何您喜欢的方法。
float:left
与之前的方法类似,但允许我们在每个单独的图像块上设置大小:
display: inline-block
ul.images {
margin: 0;
padding: 0;
white-space: nowrap;
width: 900px;
overflow-x: auto;
}
ul.images li {
display: inline-block;
width: 150px;
height: 150px;
}