“自动换列”的CSS设计

来源:互联网 发布:淘宝卖家的钱怎么提 编辑:程序博客网 时间:2024/04/29 22:19

       CSS中只有自动换行的概念,常规流中的东西如果无法塞入当前行盒子中就会另起新行来放置。但对于列满的情况并没有“自动换列”的概念,因为对于一个容器而言,行盒子只有一列,即使这一列行盒子超出容器的范围,它也只是撑开或超出容器,不会产生新的列。

但实现起来有点猥琐了。既然CSS有自动换行的性质,那么我们把行和列的概念互换不就可以得到“自动换列”了吗?我们需要对行列转置,并且为了保持内容的方向,也需要让内容反方向转置。这可以直接使用CSS3中的transition来做。
<!DOCTYPE html>
<style>
ol {
  width
:80px;/*表示容器的高度*/
  height
:450px;/*表示容器的宽度*/
  border
:1px solid red;overflow:hidden;padding:0px;margin:0px;
  margin-bottom
:-370px;/*这个值为width-height*/
  -webkit-transform-origin
:0px 0px;
  transform-origin
:0px 0px;
  -webkit-transform
:rotate(-90degtranslate(-80px/*这个值为负的width*/);
  transform
:rotate(-90degtranslate(-80px/*这个值为负的width*/);
}
li {
  width
:150px;height:150px;/*这两个值相等,表示子项的宽度*/
  margin-right
:-130px;/*这个值为lineHeight-width*/
  line-height
:20px;
  list-style-position
:inside;float:right;
  -webkit-transform-origin
:0px 0px;
  transform-origin
:0px 0px;
  -webkit-transform
:rotate(90degtranslateY(-20px/*这个值为lineHeight*/);
  transform
:rotate(90degtranslateY(-20px/*这个值为lineHeight*/);
}
</style>
<ol id="list"></ol>
<input type="button" value="添加项" id="btn" />
<script>
btn.onclick=function(){
  var li=document.createElement("li");
  li.innerHTML=Date.now();
  list.appendChild(li);
};
</script>
  

        转置会带来一些副作用,我们需用用margin来调整。另外由于容器是转置的,所以实际上width表示高度、height表示宽度。
  最后是关于低版本IE的兼容问题,我们只用了一些CSS3的变换,这些操作在IE上使用滤镜也能实现,只是性能可能跟不上。但是IE中有其特有的writing-mode样式,它可以直接修改文本的方向,而不需要转置每一个子元素。具体的代码我就不写了,这东西我压根就没打算做低版本IE的兼容,但是非要实现并不是不可以。

0 0
原创粉丝点击