【问题标题】:centred list but broken down to 3 items per line居中列表,但每行分解为 3 个项目
【发布时间】:2017-01-10 21:38:25
【问题描述】:

我有一个项目列表,每个项目都包含各种长度的单词。此列表以页面为中心。为了控制它的自动换行方式,我想让它在每四个项目之后添加一个换行符。

例如,当前包含 8 个项目的列表可能会显示如下:

1 | 2 | 3 | 4 | 5 | 6
7 | 8

显然,它包裹的位置取决于每个项目的宽度,不能是固定宽度。我希望它显示如下:

1 | 2 | 3 | 4
5 | 6 | 7 | 8

目前scss是:

li {
    list-style: none;
    float: left;
    display: inline;
    border-right: 2px $cuco-pink solid;
    margin-bottom: 10px;
    padding: 0 15px;
}
li:nth-child(4) {
    border-right: 0px $cuco-pink solid;
}
li:last-child {
    border-right: 0px $cuco-pink solid;
}
li:nth-child(4n+5) {
    clear: both;
}

在玩了一下午之后,如果我使用 float:left 和 display:inline,我可以在每 4 个项目后换行,但无法使其居中

或者我可以通过使用 float: none 和 display:inline-block 来使其居中,但然后无法正确包装。

请参阅jsfiddle,一旦修复,我将通过更改第 n 个子设置使其响应。

【问题讨论】:

  • 是否应该总是每四件物品包装一次?更小和更大的屏幕呢? (这就是发明响应式网格的原因。)
  • 是每四个项目包装一次。该列表是用户输入的,属于标准的 WordPress 内容,即 所以我不能使用我通常使用的东西(Foundation6 Block Grid)。
  • 这很难。伪元素清除似乎不起作用。有几种解决方案涉及 SO 上的 JavaScript。如果你在 PHP 中工作,你可以在那里做。为每 4 个项目添加一个 CSS 类。

标签: html css list centering word-wrap


【解决方案1】:

将它包裹在一个DIV中,然后你可以将div居中:IE:

#ul-container {
 width: 300px;
 margin: 0 auto;
}

div 被赋予了 ul-container 的 id

【讨论】:

  • 并确保你所有的 li 都有它们的结束 li。在使用所有结束标签在测试中运行它之后。一切都很好。
  • 在我的 jsfiddle [jsfiddle.net/cucocreative/cvk15qj5/] 他们确实有所有结束标签,但我无法让列表在每 4 个项目处换行并居中。
【解决方案2】:

尝试使用 display:flex;为此目的的财产。并给 li 25% 的宽度(4 个项目为 20%);

ul { 
width: 100%;
display: flex;
flex-wrap: wrap;
}

这里是更新的小提琴;希望它会有所帮助。 https://jsfiddle.net/cvk15qj5/2/

【讨论】:

  • 谢谢,但是
  • 不能有固定的宽度,它们需要和内容一样大/小。
  • 但是列表的第二行仍然是左对齐而不是居中,并且它不再在第 4 项之后添加中断?
  • 在每 4 个项目之后添加中断的静态方法是为它们提供宽度。如果您的内容是动态生成的,那么您需要设置循环。在该循环中,您需要启动一个计数器,该计数器将在每 4 个项目后添加一个 clearfix div。您正在寻求每 4 个或第 5 个 nth-child 明确的方式:两者;将不起作用..因为它会影响顶部和底部元素;
  • 该列表是用户输入的,属于标准的 WordPress 内容,即
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签