简体   繁体   English

css网格动态多列2维布局

[英]css grid dynamic multi column 2 dimentional layout

In my HTML I have 1 container div then a dynamic number of child divs.在我的 HTML 中,我有 1 个容器 div,然后是动态数量的子 div。 I need to give them a multi-column layout based on the class name of child div.我需要根据子 div 的类名给他们一个多列布局。

<div class="list-units">
    <div class="s">s</div>
    <div class="s">s</div>
    <div class="s">s</div>
    <div class="m">m</div>
    <div class="m">m</div>
    <div class="m">m</div>
    <div class="a">a</div>
    <div class="a">a</div>
    <div class="r">r</div>
    <div class="d">d</div>
    <div class="o">o</div>
    <div class="o">o</div>
    <div class="x">x</div>
</div>

Based on the class name of the child div they should be in their column.根据子 div 的类名,他们应该在他们的列中。 ie all the child div with style s should be in one column and all the child divs with class name m should be in next column in a 2-dimensional grid and so forth for rest of the child divs.即所有样式为s的子 div 都应该在一个列中,所有类名m的子 div 应该在二维网格的下一列中,对于其余的子 div,依此类推。 This is dynamic html coming at run time, I can not modify this html.这是运行时出现的动态 html,我无法修改此 html。

I need styles as below我需要如下样式

.list-units {}
.list-units .s {}
.list-units .m {}
.list-units .a {}
.list-units .r {}
.list-units .d {}

CSS-Grid and grid-auto-flow:column can do that. CSS-Grid 和grid-auto-flow:column可以做到这一点。

 .list-units { display: grid; margin: 1em; grid-auto-flow: column; gap: 1em; text-align: center; } .list-units div { border: 1px solid grey; } .list-units .s { grid-column: 1; } .list-units .m { grid-column: 2 } .list-units .a { grid-column: 3; } .list-units .r { grid-column: 4; } .list-units .d { grid-column: 5; } .list-units .o { grid-column: 6; } .list-units .x { grid-column: 7 }
 <div class="list-units"> <div class="s">s</div> <div class="s">s</div> <div class="s">s</div> <div class="m">m</div> <div class="m">m</div> <div class="m">m</div> <div class="a">a</div> <div class="a">a</div> <div class="r">r</div> <div class="d">d</div> <div class="o">o</div> <div class="o">o</div> <div class="x">x</div> </div>

Use Grid Column Property https://www.w3schools.com/cssref/tryit.asp?filename=trycss_grid-column使用网格列属性https://www.w3schools.com/cssref/tryit.asp?filename=trycss_grid-column

 .list-units {
    display: grid;
 }
 .list-units .s {
    grid-column: 1;
 }

 .list-units .m {
    grid-column: 2;
 }

 .list-units { display: grid; margin: 10px auto; background: #ffffff; grid-template-columns: auto auto auto auto; grid-auto-flow: row dense; margin-bottom: 20px; border: 1px solid grey; } .item { height: 60px; background: pink; display: flex; justify-content: center; align-items: center; color: whitesmoke; border: 1px solid red; } .list-units .s { grid-column-start: 1; } .list-units .m { grid-column-start: 2; } .list-units .a { grid-column-start: 3; } .list-units .r { grid-column-start: 4; } .list-units .d { grid-column-start: 5; } .list-units .o { grid-column-start: 6; } .list-units .x { grid-column-start: 7; }
 <div class="list-units"> <div class="s">s</div> <div class="s">s</div> <div class="s">s</div> <div class="m">m</div> <div class="m">m</div> <div class="m">m</div> <div class="a">a</div> <div class="a">a</div> <div class="r">r</div> <div class="d">d</div> <div class="o">o</div> <div class="o">o</div> <div class="x">x</div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM