CSS:3列<ul>布局,配对<li> -elements </li> </ul>

时间:2014-06-03 16:45:19

标签: html css

寻找一种样式列表的方式,它看起来像一个网格。

<div class="name">
<ul>
  <li>1</li>
  <li>Text</li>
  <li>2</li>
  <li>Text</li>
  <li>3</li>
  <li>Text</li>
  ...
<ul>

在我已经使用过的css中:

.name {
    -moz-column-count: 3;
    -moz-column-gap: 20px;
    -webkit-column-count: 3;
    -webkit-column-gap: 20px;
    column-count: 3;
    column-gap: 20px;
}

现在每个<li>元素都位于之前的元素之下。

1            3
Text         Text
2            4
Text         ....

我想要实现以下目标:每隔一个<li>将与之前的一个1 Text 4 Text 7 Text 2 Text 5 Text 8 Text 3 Text 6 Text 9 Text 配对:

<ul>

如何实现? PS:如果可能的话,无需向<li>或{{1}}元素添加类。

2 个答案:

答案 0 :(得分:1)

我改变了你的代码:
jsfiddle上看到它 我使用了:nth-of-type选择器!但我建议你使用table标签

CSS:

*{
    font-family:"Trebuchet MS", Helvetica, sans-serif;
}
.name{
    position:relative;
    width:90%;
    margin:0;
    margin-left:5%;
    background:#e7e7e7;
    padding:0;
}
div.name li{
    color:#2E99DB;
    width:2%;
    display:inline-block;
}
div.name li:nth-of-type(even){
    color:#000;
    width:21%;
    display:inline-block;
}

HTML:

<div class="name">
    <ul>
        <li>1</li>
        <li>Text</li>
        <li>2</li>
        <li>Text</li>
        <li>3</li>
        <li>Text</li>
        <li>4</li>
        <li>Text</li>
        <li>5</li>
        <li>Text</li>
        <li>6</li>
        <li>Text</li>
        <li>7</li>
        <li>Text</li>
    <ul>
</div>

注意:为宽度使用更准确的比例...

答案 1 :(得分:0)

你可以用伪类做到这一点,但它真的很hacky,并且不能在IE9下工作(我想你可能不关心,因为你试图使用css列)。无论是修改原始代码还是尝试用一些js改变dom,你都会好得多。

<强>代码:

.name {
    width: 600px; // set to whatevs. Should work with or without width.
}

li {
    list-style: none;
    display: block;
    float: left;
    padding: 1%;
    box-sizing: border-box; // need to set this if you want to pad the list items
}

li:nth-child(odd) {
    color: #f0f;
    width: 1%;
}

li:nth-child(even){
    color: #00F;
    width: 31.3333%; // using this number as a root since you want three cols 
                     // (33.333%, minus the 2% for width and padding above).
                     // No matter what you want, make sure total width == 100%
}

li:nth-child(7n){
    clear:both;      // clear the 7th (or new row) element
}

小提琴: http://jsfiddle.net/6uSzS/