2016-08-30 31 views
4

是否可以使用CSS3更改列表项的顺序?是否可以使用CSS3更改列表项的顺序?

例如,如果列表以1,2,3,4,5顺序在HTML中编码,但我希望它以5,1,2,3,4顺序显示。

我使用CSS覆盖来修改Firefox扩展,所以我不能只改变HTML。

HTML代码

<ul> 
 
<li>1</li> 
 
<li>2</li> 
 
<li>3</li> 
 
<li>4</li> 
 
<li>5</li> 
 
</ul>

+1

你可以使用CSS来配合'order'道具因为在下面的解决方案中,但我个人不喜欢它,因为您不能动画/转换订单的更改。 – Noitidart

+1

@Noitidart首先,爱你的代码。你的粉丝。总是印象深刻。 :-)其次,你有什么建议? – RockPaperLizard

+0

谢谢@RockPaperLizard!我真的很感激这个笔记!我使用反应,所以这对我来说很容易在几分钟内完成,但没有UI /组件套件,可能需要更多时间。我使用块级元素和'transformY'。修改perf的转换很好,因为它不会导致重绘。 – Noitidart

回答

11

可以使用Flexbox的做到这一点。

这是我为您创建一个小提琴:https://jsfiddle.net/x56hayht/

ul { 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 
ul li:first-child { 
 
    order: 5; 
 
} 
 
ul li:nth-child(2) { 
 
    order: 4; 
 
} 
 
ul li:nth-child(3) { 
 
    order: 3; 
 
} 
 
ul li:nth-child(4) { 
 
    order: 2; 
 
}
<ul> 
 
    <li>1</li> 
 
    <li>2</li> 
 
    <li>3</li> 
 
    <li>4</li> 
 
    <li>5</li> 
 
</ul>

根据csstricks:

顺序属性是灵活的盒子布局模块的子属性。

默认情况下,Flex项目按照它们在源文档中显示的顺序显示。

订单属性可用于更改此订购。

语法:

顺序:number

希望它能帮助。干杯!

+0

很棒的回答。谢谢! Leo的答案使用'flex-flow:wrap',而你选择'flex-direction:column'。哪一个更好的选择?或者更好的是另一个问题? – RockPaperLizard

+0

基本上,我选择了柔性方向而不是柔性流动,因为柔性流动是柔性方向和包裹的缩写。如果我没有记错的话。我只是基于你的需求。但它几乎是一样的。你不需要包装元素。狮子座的答案和我的答案几乎一样。所以,我们真棒:D –

2

是的,您可以使用灵活框模型的order css属性。请注意,父元素必须display:flex设置

ul { 
 
    display: -webkit-box; 
 
    display: -moz-box; 
 
    display: -ms-flexbox; 
 
    display: -moz-flex; 
 
    display: -webkit-flex; 
 
    display: flex; 
 
    
 
    -moz-flex-flow: wrap; 
 
    -webkit-flex-flow: wrap; 
 
    flex-flow: wrap; 
 
} 
 
ul li { 
 
    width: 100% 
 
} 
 
ul li:nth-of-type(1) { 
 
    order: 2; 
 
} 
 
ul li:nth-of-type(2) { 
 
    order: 3; 
 
} 
 
ul li:nth-of-type(3) { 
 
    order: 4; 
 
} 
 
ul li:nth-of-type(4) { 
 
    order: 5; 
 
} 
 
ul li:nth-of-type(5) { 
 
    order: 1; 
 
}
<ul> 
 
    <li>1</li> 
 
    <li>2</li> 
 
    <li>3</li> 
 
    <li>4</li> 
 
    <li>5</li> 
 
</ul>

另外要注意,不是所有的浏览器都支持灵活的盒子模型,这里列出... http://caniuse.com/#feat=flexbox

不过,也有相当多的polyfills可以用来为旧版浏览器带来支持,如果你需要支持旧版浏览器

+0

很好的答案。谢谢! Herm Luna的答案使用'flex-direction:column',而你选择'flow-flow:wrap'。哪一个更好的选择?或者更好的是另一个问题? – RockPaperLizard

+0

那么,在你的问题的背景下,这与项目的顺序无关。这一切都取决于你想如何布置项目,你会使用'flex-wrap'或'flex-direction'的适当值......'flex-flow'只是上述属性的缩写。类似'font-size'的'font','border-width','border-style'等的'font-weight' ...或'border'等。 – Leo

+0

感谢Leo。你的回答和Herm Luna的回答都是一流的。我会接受Herm Luna的回答,因为我使用'flex-direction:column'并因为他/她的代表低。但是,我也真诚地赞赏和感谢你,这比代表更有价值!非常感谢您的帮助! – RockPaperLizard