Css 如何创建栅格/平铺视图?

Css 如何创建栅格/平铺视图?,css,grid,positioning,css-float,tiles,Css,Grid,Positioning,Css Float,Tiles,例如,我有一些class.article,我想把这个类看作网格视图。所以我采用了这种风格: .article{ width:100px; height:100px; background:#333; float:left; margin:5px; } 该样式将使.article看起来平铺/网格化。在固定高度下工作很好。但是如果我想将高度设置为自动(根据其中的数据自动拉伸),网格看起来很糟糕 我想把视图做成这样: 这种布局称为砌体布局。砌体是另一种网格布局,但它将填充因图元

例如,我有一些class.article,我想把这个类看作网格视图。所以我采用了这种风格:

.article{
  width:100px;
  height:100px;
  background:#333;
  float:left;
  margin:5px;
}
该样式将使.article看起来平铺/网格化。在固定高度下工作很好。但是如果我想将高度设置为自动(根据其中的数据自动拉伸),网格看起来很糟糕

我想把视图做成这样:


这种布局称为砌体布局。砌体是另一种网格布局,但它将填充因图元高度不同而产生的空白

是jQuery插件之一,用于创建砌体布局


或者,您可以使用CSS3S。但是现在基于jQuery的插件是最好的选择,因为它与CSS3列存在兼容性问题。

如果你想更进一步,请使用同位素,它是砌体的高级版本(由同一作者开发)。它不是纯CSS,它使用Javascript的帮助,但非常流行,所以你会找到大量的文档

如果您发现它非常复杂,那么有许多高级插件已经基于同位素进行了开发,例如媒体盒,您可以使用flexbox

  • 将图元放置在多行列flex容器中

    #柔性容器{
    显示器:flex;
    柔性流:柱包裹;
    }
    
  • 对元素重新排序,使DOM顺序在水平方向上而不是垂直方向上得到遵守。例如,如果需要3列

    #flex container>:第n个子(3n+1){order:1;}/*第1列*/
    #flex容器>:第n个子(3n+2){顺序:2;}/*第2列*/
    #flex容器>:第n个子(3n+3){顺序:3;}/*第3列*/
    
  • 在每列的第一项之前强制分栏:

    #flex container>:第n个子级(-n+3){
    分页符之前:始终;/*CSS 2.1语法*/
    在之前中断:始终;/*新语法*/
    }
    
    遗憾的是,并非所有浏览器都支持flexbox中的换行符。不过,它可以在Firefox上运行

  • #柔性容器{
    显示器:flex;
    柔性流:柱包裹;
    }
    #flex容器>:第n个子(3n+1){顺序:1;}/*第1列*/
    #flex容器>:第n个子(3n+2){顺序:2;}/*第2列*/
    #flex容器>:第n个子(3n+3){顺序:3;}/*第3列*/
    #flex容器>:第n个子级(-n+3){
    分页符之前:始终;/*CSS 2.1语法*/
    在之前中断:始终;/*新语法*/
    }
    /*以下是可选的*/
    #flex容器>div{
    背景:#666;
    颜色:#fff;
    保证金:3倍;
    显示器:flex;
    证明内容:中心;
    对齐项目:居中;
    字体大小:36px;
    }
    #flex容器>:第n个子(1){高度:100px;}
    #flex容器>:第n个子(2){高度:50px;}
    #flex容器>:第n个子(3){高度:75px;}
    #flex容器>:第n个子(4){高度:50px;}
    #flex容器>:第n个子(5){高度:100px;}
    #flex容器>:第n个子(6){高度:50px;}
    #flex容器>:第n个子(7){高度:100px;}
    #flex容器>:第n个子(8){高度:75px;}
    #flex容器>:第n个子(9){高度:125px;}
    
    123
    456
    789
    
    解决仅使用css的问题的最佳选项是使用css列计数属性

     .content-box {
       border: 10px solid #000000;
       column-count: 3;
     }
    
    查看此项了解更多信息:

    既然CSS3在主要浏览器中广泛可用且兼容,那么现在是时候使用配备SO代码片段工具的纯解决方案了:


    对于使用CSS3创建砌体布局,
    柱数
    以及
    柱间距
    就足够了。但我也使用了
    媒体查询
    ,使其具有响应性

    在跳入实现之前,请考虑添加一个jQuery砖石库回退以使您的代码兼容传统浏览器,尤其是IE8-:

    会更安全。
    <!--[if lte IE 9]>
        <script src="/path/to/js/masonry.pkgd.min.js"></script>
    <![endif]-->
    
    
    砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体
    砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体
    砌体纯CSS3砌体纯CSS3
    砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体
    砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体
    砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体
    砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体纯CSS3砌体
    
    使用,您可以创建非常相似的布局

    1) 设置三个固定宽度的网格列

    ul{
    显示:网格;
    网格模板列:150px 150px 150px;
    ...
    }
    
    2) 确保高度较大的项目跨越两行

    li:n个孩子(1),
    李:第n个孩子(3),
    李:第n个孩子(5岁),
    李:第n个孩子(8岁),
    李:第n个孩子(9岁),
    李:第n个孩子(10岁),
    李:第n个孩子(12)
    {
    网格行:跨度2;
    }
    
    正文{
    保证金:0;
    }
    保险商实验室{
    显示:网格;
    网格模板列:150px 150px 150px;
    网格间距:1rem;
    证明内容:中心;
    对齐项目:居中;
    /*钻孔特性:*/
    列表样式:无;
    宽度:90vw;
    高度:85vh;
    保证金:4vh自动;
    边框:5px纯绿色;
    填充:1rem;
    溢出:自动;
    计数器重置:项目;
    }
    李{
    位置:相对位置;
    }
    李:之后{
    内容:柜台(项目);
    反增量:项目;
    位置:绝对位置;
    填充:0.3rem;
    背景:鲑鱼;
    颜色:白色;
    左:0;
    排名:0;
    }
    img{
    外形:5px固体鲑鱼;
    }
    李:第n个孩子(1),
    李:第n个孩子(3),
    李:第n个孩子(5岁),
    李:第n个孩子(8岁),
    李:第n个孩子(9岁),
    李:第n个孩子(10岁),
    李:第n个孩子(12)
    {
    网格行:跨度2;
    }
    您可以使用display:grid

    例如:

    这是一个有7列的网格,您的行具有自动大小

    .myGrid{
    显示