repeat()
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2020å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
repeat() 㯠CSS ã®é¢æ°ã§ããã©ãã¯ãªã¹ãå
ã§ã®é¨åçãªç¹°ãè¿ãã表ããç¹°ãè¿ããã¿ã¼ã³ã示ã夿°ã®åãè¡ããããã³ã³ãã¯ããªå½¢å¼ã§è¨è¿°ãããã¨ãã§ãã¾ãã
試ãã¦ã¿ã¾ããã
grid-template-columns: repeat(2, 60px);
grid-template-columns: 1fr repeat(2, 60px);
grid-template-columns: repeat(2, 20px 1fr);
grid-template-columns: repeat(auto-fill, 40px);
<section class="default-example" id="default-example">
<div class="example-container">
<div class="transition-all" id="example-element">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</div>
</section>
#example-element {
border: 1px solid #c5c5c5;
display: grid;
grid-auto-rows: 40px;
grid-gap: 10px;
width: 220px;
}
#example-element > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
}
ãã®é¢æ°ã¯ CSS ã°ãªããã®ããããã£ã§ãã grid-template-columns 㨠grid-template-rows ã®ä¸ã§ä½¿ããã¨ãã§ãã¾ãã
æ§æ
/* <track-repeat> å¤ */
repeat(4, 1fr)
repeat(4, [col-start] 250px [col-end])
repeat(4, [col-start] 60% [col-end])
repeat(4, [col-start] 1fr [col-end])
repeat(4, [col-start] min-content [col-end])
repeat(4, [col-start] max-content [col-end])
repeat(4, [col-start] auto [col-end])
repeat(4, [col-start] minmax(100px, 1fr) [col-end])
repeat(4, [col-start] fit-content(200px) [col-end])
repeat(4, 10px [col-start] 30% [col-middle] auto [col-end])
repeat(4, [col-start] min-content [col-middle] max-content [col-end])
/* <auto-repeat> å¤ */
repeat(auto-fill, 250px)
repeat(auto-fit, 250px)
repeat(auto-fill, [col-start] 250px [col-end])
repeat(auto-fit, [col-start] 250px [col-end])
repeat(auto-fill, [col-start] minmax(100px, 1fr) [col-end])
repeat(auto-fill, 10px [col-start] 30% [col-middle] 400px [col-end])
/* <fixed-repeat> å¤ */
repeat(4, 250px)
repeat(4, [col-start] 250px [col-end])
repeat(4, [col-start] 60% [col-end])
repeat(4, [col-start] minmax(100px, 1fr) [col-end])
repeat(4, [col-start] fit-content(200px) [col-end])
repeat(4, 10px [col-start] 30% [col-middle] 400px [col-end])
repeat() 颿°ã¯ 2 ã¤ã®å¼æ°ãåãã¾ãã
- å復忰: æåã®å¼æ°ã¯ããã©ãã¯ãªã¹ããç¹°ãè¿ãããåæ°ãæå®ãã¾ãããã㯠1 以ä¸ã®æ´æ°å¤ã§æå®ãããããã¼ã¯ã¼ãå¤
auto-fillã¾ãã¯auto-fitã§æå®ãã¾ãããããã®ãã¼ã¯ã¼ãå¤ã¯ãã°ãªããã³ã³ããã¼ãåããã®ã«å¿ è¦ãªåæ°ã ããã©ãã¯ã®çµã¿åãããç¹°ãè¿ãã¾ãã - ãã©ãã¯: 2 çªç®ã®å¼æ°ã¯ãç¹°ãè¿ããããã©ãã¯ã®çµã¿åãããæå®ãã¾ããåºæ¬çã«ãã㯠1 ã¤ä»¥ä¸ã®å¤ã§æ§æãããããããã®å¤ã¯ãã®ãã©ãã¯ã®ãµã¤ãºã表ãã¾ããããããã®ãµã¤ãºã¯
<track-size>ã¾ãã¯<fixed-size>ã§æå®ãã¾ããã¾ãããã©ãã¯ãµã¤ãºã®åå¾ã«<line-names>å¤ãæä¾ãããã¨ã§ãåãã©ãã¯ã®åå¾ã« 1 ã¤ä»¥ä¸ã®ç·åãæå®ãããã¨ãã§ãã¾ãã
auto-fill ã auto-fit ã使ç¨ãã¦å復忰ãè¨å®ããå ´åã<fixed-size> åã使ç¨ãã¦ã®ã¿ãã©ãã¯ãµã¤ãºãæå®ãããã¨ãã§ãã <track-size> åã使ç¨ãããã¨ã¯ã§ãã¾ãããããã§ repeat() ã®æ§æã 3 種é¡ã«ãªãã¾ããã
<track-repeat>ã¯æ¬¡ã®ããããã§ãã- å復忰ãè¨å®ããæ´æ°
- ãã©ãã¯ã®ãµã¤ãºãè¨å®ãã
<track-size>å¤
<auto-repeat>ã¯æ¬¡ã®ããããã§ãã- å復忰ãè¨å®ãã
auto-fillã¾ãã¯auto-fit - ãã©ãã¯ã®ãµã¤ãºãè¨å®ãã
<fixed-size>å¤
- å復忰ãè¨å®ãã
<fixed-repeat>ã¯æ¬¡ã®ããããã§ãã- å復忰ãè¨å®ããæ´æ°
- ãã©ãã¯ã®ãµã¤ãºãè¨å®ãã
<fixed-size>å¤
ããããã£å®£è¨ã§ <auto-repeat> ãç¨ããå ´åã<fixed-repeat> ã使ç¨ããã®ã¯ repeat() ãå¼ã³åºãã¨ãã ãã§ããä¾ãã°ããã®ä¾ã¯ <auto-repeat> å½¢å¼ã¨ <track-repeat> å½¢å¼ãçµåãã¦ããã®ã§ä¸æ£ã§ãã
.wrapper {
grid-template-columns:
repeat(auto-fill, 10px)
repeat(2, minmax(min-content, max-content));
}
ãµãã°ãªããã«ç·åã追å ããããã«ä½¿ç¨ãã <name-repeat> ã¨ãã第 4 ã®å½¢å¼ãããã¾ãããã㯠subgrid ãã¼ã¯ã¼ãã§ã®ã¿ä½¿ç¨ããç·åã®ã¿ãæå®ãããã©ãã¯ãµã¤ãºã¯æå®ãã¾ããã
å¤
<fixed-size>-
以ä¸ã®å½¢å¼ã®ããããã§ãã
<length-percentage>å¤minmax()颿°minã¯<length-percentage>å¤ã§æå®maxã¯<length-percentage>å¤ã<flex>å¤ãã¾ãã¯min-content,max-content,autoã®ãã¼ã¯ã¼ãå¤ã®ããããã§æå®
minmax()颿°minã¯<length-percentage>å¤ã¾ãã¯min-content,max-content,autoã®ãã¼ã¯ã¼ãå¤ã®ããããã§æå®maxã¯<length-percentage>å¤ã§æå®
<flex>-
åä½
frã§ãã©ãã¯ã®ãã¬ãã¯ã¹ä¿æ°ãæå®ãã¾ããããããã®<flex>ãµã¤ãºã®ãã©ãã¯ã¯ããã®ãã¬ãã¯ã¹ä¿æ°ã«æ¯ä¾ãã¦æ®ãã®ç©ºéãå ãã¾ãã <length>-
æ£ã®æ´æ°ã®é·ãã§ãã
<line-names>-
0 å以ä¸ã®ç©ºç½åºåãã®
<custom-ident>å¤ãè§æ¬å¼§ã§å²ãã ãã®ãä¾ãã°[first header-start]ã <percentage>-
åã°ãªãããã©ãã¯ã§ã¯ã°ãªããã³ã³ããã¼ã®ã¤ã³ã©ã¤ã³ãµã¤ãºãè¡ã°ãªãããã©ãã¯ã§ã¯ã°ãªããã³ã³ããã¼ã®ãããã¯ãµã¤ãºã«å¯¾ãããéè² ã®ãã¼ã»ã³ããæå®ãã¾ããã°ãªããã³ã³ããã¼ã®ãµã¤ãºããã©ãã¯ã®ãµã¤ãºã«ä¾åããå ´åã
<percentage>ã¯autoã¨ãã¦æ±ãããªããã°ãªãã¾ãããã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯ããã©ãã¯ã®å å¨ãµã¤ãºã®å¯ä¸ãã°ãªããã³ã³ããã¼ã®ãµã¤ãºã«èª¿æ´ãããã¼ã»ã³ãå¤ãå°éããçµæã¨ãªãæå°éã ããã©ãã¯ã®æçµãµã¤ãºã大ãããããã¨ãã§ãã¾ãã <track-size>-
以ä¸ã®å½¢å¼ã®ããããã§ãã
<length-percentage>å¤ã<flex>å¤ãã¾ãã¯min-content,max-content,autoã®ãã¼ã¯ã¼ãå¤ã®ããããã§æå®minmax()颿°minã¯<length-percentage>å¤ãã¾ãã¯min-content,max-content,autoã®ãã¼ã¯ã¼ãå¤ã®ããããã§æå®maxã¯<length-percentage>å¤ã<flex>å¤ãã¾ãã¯min-content,max-content,autoã®ãã¼ã¯ã¼ãå¤ã®ããããã§æå®
fit-content()颿°ã«<length-percentage>å¤ã渡ãããã®
auto-
æå¤§å¤ã¨ãã¦ã¯ã
max-contentã¨åãã§ããæå°å¤ã¨ãã¦ã¯ãã°ãªãããã©ãã¯ãå ããã°ãªããã¢ã¤ãã ã®æå¤§æå°ãµã¤ãºï¼min-width/min-heightã§æå®ããããã®ï¼ã表ãã¾ãã auto-fill-
ã°ãªããã³ã³ããã¼ãé¢é£ãã軸ã«ãå®ç¾©ãããã¾ãã¯æå¤§ã®å¹ ãæã£ã¦ããå ´åãç¹°ãè¿ãã®æ°ã¯ãã°ãªããã³ã³ããã¼ããªã¼ãã¼ããã¼ãããªãæå¤§ã®æ£ã®æ°ã«ãªãã¾ããåãã©ãã¯ã¯å®ç¾©ããã¦ãããªãã°ãæå¤§ãã©ãã¯å¹ ã調æ´ãã颿°ï¼
grid-template-rowsã¾ãã¯grid-template-columnsãå®ç¾©ããããã«ä½¿ç¨ãããããããç¬ç«ããå¤ï¼ã¨ãã¦æ±ããã¾ãããã以å¤ã®å ´åã¯ãæå°ãã©ãã¯å¹ ã調æ´ãã颿°ã¨ãã¦æ±ããã°ãªããã®ã£ãããèæ ®ã«å ¥ãã¾ããä½åç¹°ãè¿ãã¦ããªã¼ãã¼ããã¼ãã¦ãã¾ãå ´åã¯ãç¹°ãè¿ãã 1 ã¨ãããããã§ãªããã°ãã°ãªããã³ã³ããã¼ãé¢é£ãã軸ã«ãå®ç¾©ãããæå°ã®å¯¸æ³ããã£ã¦ããå ´åãç¹°ãè¿ãã®æ°ã¯æå°ã®è¦ä»¶ãæºããå¯è½æ§ãããæå°ã®æ£ã®æ´æ°ã«ãªãã¾ãããã®ä»ã®å ´åã¯ãæå®ããããã©ãã¯ãªã¹ãã¯1åã®ã¿ç¹°ãè¿ãã¾ãã auto-fit-
auto-fillã¨åæ§ã«åä½ãã¾ãããã°ãªããã¢ã¤ãã ãé ç½®ããå¾ã空ã®ç¹°ãè¿ããã©ãã¯ãæãããã¾ããç¹ãç°ãªãã¾ãã空ã®ãã©ãã¯ã¨ã¯ãããã¼å ã®ã°ãªããã¢ã¤ãã ãé ç½®ããã¦ããªããã¾ãã¯ãããã¾ããã§é ç½®ããã¦ãããã®ããªããã©ãã¯ã®ãã¨ã§ããï¼ããã¯ããã¹ã¦ã®ãã©ãã¯ã空ã®å ´åããã¹ã¦ã®ãã©ãã¯ãæãããã¾ããçµæã«ãªãå¯è½æ§ãããã¾ããï¼æãããã¾ãããã©ãã¯ã¯ã
0pxã®åä¸ã®åºå®ããããã©ãã¯ãµã¤ã¸ã³ã°é¢æ°ãæã¤ãã®ã¨ãã¦æ±ããããã®ä¸¡å´ã®æºã¯æãããã¾ãã¾ããèªåå復ãã©ãã¯ã®æ°ãæ¢ããããã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã¯ãã©ãã¯ãµã¤ãºãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ããæå®ããå¤ï¼ä¾ãã°ã
1pxï¼ã§å²ããã¼ãã«ããé¤ç®ãé¿ãã¾ãã max-content-
ã°ãªãããã©ãã¯ãå ããã°ãªããã¢ã¤ãã ã®æã大ããªæå¤§ã³ã³ãã³ãå¯ä¸ã表ãã¾ãã
min-content-
ã°ãªãããã©ãã¯ãå ããã°ãªããã¢ã¤ãã ã®æã大ããªæå°ã³ã³ãã³ãå¯ä¸ã表ãã¾ãã
形弿æ³
<track-repeat> =
repeat( [ <integer [1,â]> ] , [ <line-names>? <track-size> ]+ <line-names>? )
<auto-repeat> =
repeat( [ auto-fill | auto-fit ] , [ <line-names>? <track-size> ]+ <line-names>? )
<fixed-repeat> =
repeat( [ <integer [1,â]> ] , [ <line-names>? <fixed-size> ]+ <line-names>? )
<name-repeat> =
repeat( [ <integer [1,â]> | auto-fill ] , <line-names>+ )
<integer> =
<number-token>
<line-names> =
'[' <custom-ident>* ']'
<track-size> =
<track-breadth> |
minmax( <inflexible-breadth> , <track-breadth> ) |
fit-content( <length-percentage [0,â]> )
<fixed-size> =
<fixed-breadth> |
minmax( <fixed-breadth> , <track-breadth> ) |
minmax( <inflexible-breadth> , <fixed-breadth> )
<track-breadth> =
<length-percentage [0,â]> |
<flex [0,â]> |
min-content |
max-content |
auto
<inflexible-breadth> =
<length-percentage [0,â]> |
min-content |
max-content |
auto
<length-percentage> =
<length> |
<percentage>
<fixed-breadth> =
<length-percentage [0,â]>
ä¾
>repeat() ã使ç¨ããã°ãªããåã®æå®
HTML
<div id="container">
<div>ãã®ã¢ã¤ãã ã®å¹
㯠50 ãã¯ã»ã«ã§ãã</div>
<div>å¹
ãèªç±ãªã¢ã¤ãã ã§ãã</div>
<div>ãã®ã¢ã¤ãã ã®å¹
㯠50 ãã¯ã»ã«ã§ãã</div>
<div>å¹
ãèªç±ãªã¢ã¤ãã ã§ãã</div>
<div>å¹
100 ãã¯ã»ã«ã®æè»æ§ã®ãªãã¢ã¤ãã ã§ãã</div>
</div>
CSS
#container {
display: grid;
grid-template-columns: repeat(2, 50px 1fr) 100px;
grid-gap: 5px;
box-sizing: border-box;
height: 200px;
width: 100%;
background-color: #8cffa0;
padding: 10px;
}
#container > div {
background-color: #8ca0ff;
padding: 5px;
}
çµæ
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Grid Layout Module Level 2 > # repeat-notation > |