【问题标题】:CSS Two Columns of Lists - responsive merge into one columnCSS 两列列表 - 响应式合并为一列
【发布时间】:2013-08-26 04:32:14
【问题描述】:

我有两个列表浮动到两列中。我想在小屏幕上做到这一点,项目变成一列,但我想交替项目。

<div>
    <ul class="left">
        <li>Item A</li>
        <li>Item B</li>
        <li>Item C</li>
        <li>Item D</li>
    </ul>
    <ul class="right">
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
    </ul>
</div>

所以结果在小屏幕上应该是这样的。

Item A
Item 1
Item B
Item 2
Item C
Item 3
Item D
Item 4

这是我开始的 jsfiddle。我是否应该将li width 设置为50% 列出一份清单?我想看看这是否可行,同时保持 HTML 标记原样。

http://jsfiddle.net/aAhX9/

【问题讨论】:

  • 列表有多大?
  • @JoshC 我就是这么想的。
  • 只有 5 件。我想我会先合并这些列表,然后再为移动设备制作第三个。

标签: html css responsive-design


【解决方案1】:

做到这一点的唯一方法(除了一些非常费力的定位之外)是将元素组合到一个列表中,给每个 li 一个类名并适当地设置它们的样式:

<div>
    <ul>
        <li class="left">Item A</li>
        <li class="right">Item 1</li>
        <li class="left">Item B</li>
        <li class="right">Item 2</li>
        <li class="left">Item C</li>
        <li class="right">Item 3</li>
        <li class="left">Item D</li>
        <li class="right">Item 4</li>
    </ul>
</div>

li {
    list-style-type: none;
    width: 50%;
}

li.left {
    float: left;
    background-color: #0f0;
}

li.right {
    float: right;
    background-color: #00f;
}

@media only screen and (max-width: 480px) {
    .left, .right {
        float: none;
        width: 100%;
    }
}

Updated JS Fiddle demo.

正如 Hashem 所指出的,在下面的 cmets 中,可以使用 :nth-child() 选择器而不是类名来设置左侧或右侧各种 li 元素的样式:

li:nth-child(odd) {
    float: left;
    background-color: #0f0;
}

li:nth-child(even) {
    float: right;
    background-color: #00f;
}

@media only screen and (max-width: 480px) {
    li {
        float: none;
        width: 100%;
    }
}

Updated JS Fiddle demo.

【讨论】:

  • 出色的@David。干得好。
  • 这让我的父母非常感慨,我还没有发现什么盒子;更不用说 哪里... ;)
  • 也可以选择使用:nth-child(odd):nth-child(even)
  • @Hashem:这是一个很好的观点;将其编辑为答案,谢谢!
  • 在原始示例中,媒体查询只需要移动浏览器支持,因为li 是按类定位的,因此桌面可以毫无问题地浮动它们。 :nth-child(odd):nth-child(even) 选项不会被非现代浏览器浮动并保留为单个列表。
【解决方案2】:

你不能用两个ul 做到这一点。但是,您可以在每个li 中放置两个span

例子:

HTML:

<div>
    <ul>
        <li><span class="left">Item A</span><span class="right">Item 1</span></li>
        <li><span class="left">Item B</span><span class="right">Item 2</span></li>
        <li><span class="left">Item C</span><span class="right">Item 3</span></li>
        <li><span class="left">Item D</span><span class="right">Item 4</span></li>
    </ul>
</div>

CSS:

ul{
    list-style: none;
    margin: 0;
    padding: 0;
}

span{
    width: 50%;
}


.left {
    float: left;
    background:blue;
}


.right {
    float: right;
    background:Red;
}


@media only screen and (max-width: 480px) {
    .left, .right {
        float: none;
        width: 100%;
        display:blocK;
    }
}

JSFiddle

【讨论】:

  • 它在视觉上可以工作,但从语义的角度来看,这是不一致的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
相关资源
最近更新 更多