ç叿µå¸å±
æéå¯ç¨
æ¤ç¹æ§ä¸å±äºåºçº¿ï¼å 为å®å°æªå¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æã
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
CSS ç½æ ¼å¸å±ç第 3 çè§èå
å«äº masonry å¼ï¼ç¨äº grid-template-columns å grid-template-rowsãæ¬æå详ç»ä»ç»äºç叿µå¸å±æ¯ä»ä¹ï¼ä»¥åå¦ä½ä½¿ç¨å®ã
ç叿µå¸å±æ¯ä¸ç§å¸å±æ¹å¼ï¼å ¶ä¸ä¸ä¸ªè½´ä½¿ç¨æ åççä¸¥æ ¼ç½æ ¼å¸å±ï¼é常æ¯åï¼ï¼å¦ä¸ä¸ªè½´åéç¨ç叿µå¸å±ãå¨ç叿µè½´ä¸ï¼åç»è¡çå ç´ ä¼åä¸å¯¹é½ï¼å®å ¨å¡«è¡¥è¾çå ç´ çä¸ç空éï¼èéä¸¥æ ¼æç½æ ¼æå导è´ç©ºéæ®çã
å建ç叿µå¸å±
è¦å建æå¸¸ç¨çç叿µå¸å±ï¼éè¦å°åè®¾ç½®ä¸ºç½æ ¼è½´ï¼å°è¡è®¾ç½®ä¸ºç叿µè½´ï¼éè¿ grid-template-columns å grid-template-rows 屿§è¿è¡å®ä¹ãæ¤æ¶å®¹å¨çåå
ç´ ä¼å常è§ç½æ ¼å¸å±çèªå¨æå飿 ·ï¼éè¡ä¾æ¬¡å¸å±ã
å½å ç´ æ¢è¡æ¶ï¼ä¼éµå¾ªç叿µç®æ³è¿è¡æåãå ç´ å°è¢«å è½½å°å©ä½ç©ºé´æå¤çåä¸ï¼æç»å½¢æä¸ä¸ªç´§å¯æåçå¸å±ï¼èä¸ä¼åå¨åºå®çè¡è½¨éã
.grid {
display: grid;
gap: 10px;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
grid-template-rows: masonry;
}
<div class="grid">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
// prettier-ignore
const itemSizes = [
"2em", "3em", "1.6em", "4em", "3.2em",
"3em", "4.5em", "1em", "3.5em", "2.8em",
];
const items = document.querySelectorAll(".item");
for (let i = 0; i < items.length; i++) {
items[i].style.blockSize = itemSizes[i];
}
ä¹å¯ä»¥å建æè¡å è½½å ç´ çç叿µå¸å±ã
// prettier-ignore
const itemSizes = [
"2em", "3em", "1.6em", "4em", "2.2em",
"3em", "4.5em", "1em", "3.5em", "2.8em",
];
const items = document.querySelectorAll(".item");
for (let i = 0; i < items.length; i++) {
items[i].style.inlineSize = itemSizes[i];
}
.grid {
display: grid;
gap: 10px;
grid-template-columns: masonry;
grid-template-rows: repeat(3, 100px);
}
æ§å¶ç½æ ¼è½´
å¨ç½æ ¼è½´ä¸ï¼å®ç工使¹å¼åä½ é¢æçç½æ ¼å¸å±å®å
¨ä¸è´ãä½ å¯ä»¥ä½¿ç¨ span å
³é®å让å
ç´ å¨èªå¨æåçç¶æä¸è·¨è¶å¤æ¡è½¨éï¼ä¹å¯ä»¥åºäºè¡çº¿çä½ç½®æ¥å®ä½å
ç´ ã
跨轨éçç叿µå¸å±
æ¬ç¤ºä¾ä¸ï¼æä¸¤ä¸ªå ç´ è·¨ä¸¤æ¡è½¨éï¼å ¶ä½ç叿µå ç´ ä¼å´ç»è¿ä¸¤ä¸ªå ç´ è¿è¡æåã
<div class="grid">
<div class="item"></div>
<div class="item span-2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item span-2"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
.grid {
display: grid;
gap: 10px;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
grid-template-rows: masonry;
}
.span-2 {
grid-column-end: span 2;
}
æ¬ç¤ºä¾å å«ä¸ä¸ªéè¿åå®ä½çå ç´ ãå ·ææç¡®ä½ç½®çå ç´ ä¼å¨ç叿µå¸å±çæä¹å宿æ¾ç½®ã
<div class="grid">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item positioned">å·²å®ä½ã</div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
.grid {
display: grid;
gap: 10px;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
grid-template-rows: masonry;
}
.positioned {
padding: 1em;
grid-column: 2 / 4;
}
ç叿µå¸å±çåé
å¨ä¸æ¯æç叿µçæµè§å¨ä¸ï¼å°ä½¿ç¨å¸¸è§çç½æ ¼èªå¨å¸å±è¿è¡æ¿ä»£ã
è§è
| è§è |
|---|
| CSS Grid Layout Module Level 3> # masonry-layout> |
æµè§å¨å ¼å®¹æ§
>css.properties.grid-template-columns.masonry
css.properties.grid-template-rows.masonry
åè§
grid-auto-flowç¨äºæ§å¶ç½æ ¼èªå¨æåç屿§- åç CSS ç叿µå¸å±ï¼åºäº CSS ç½æ ¼å¸å±ï¼æ¥èª Smashing Magazineï¼2020ï¼