flex
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´9æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
flex 㯠CSS ã®ä¸æ¬æå®ããããã£ã§ããã¬ãã¯ã¹ã¢ã¤ãã ããã¬ãã¯ã¹ã³ã³ããã¼ã®é åã«åããããã«ãã©ã®ããã«ä¼¸é·ã»å縮ãããããæå®ãã¾ãã
試ãã¦ã¿ã¾ããã
flex: 1;
flex: 2;
flex: 1 30px;
flex: 1 1 100px;
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element">ãããå¤ããã¾ã</div>
<div>flex: 1</div>
<div>flex: 1</div>
</section>
.default-example {
border: 1px solid #c5c5c5;
width: auto;
max-height: 300px;
display: flex;
}
.default-example > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
margin: 10px;
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0;
}
#example-element {
background-color: rgb(255 0 200 / 0.2);
border: 3px solid rebeccapurple;
}
æ§æè¦ç´ ã®ããããã£
ãã®ããããã£ã¯ä»¥ä¸ã® CSS ããããã£ã®ä¸æ¬æå®ã§ãã
æ§æ
/* ãã¼ã¯ã¼ãå¤ */
flex: none; /* 0 0 auto */
/* åä½ããªãæ°å¤ã 1 ã¤æå®: flex-grow
ãã®å ´å flex-basis 㯠0 ã¨çãããªã*/
flex: 2; /* 2 1 0% */
/* å¹
ã¾ãã¯é«ãã 1 ã¤æå®: flex-basis */
flex: auto; /* 1 1 auto */
flex: 10em; /* 1 1 10em */
flex: 30%;
flex: min-content;
/* å¤ã 2 ã¤æå®: flex-grow | flex-basis */
flex: 1 30px; /* 1 1 30px */
/* å¤ã 2 ã¤æå®: flex-grow | flex-shrink */
flex: 2 2; /* 2 2 0% */
/* å¤ã 3 ã¤æå®: flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;
/* ã°ãã¼ãã«å¤ */
flex: inherit;
flex: initial; /* 0 1 auto */
flex: revert;
flex: revert-layer;
flex: unset;
flex ããããã£ã¯ 1 ã¤ã2 ã¤ã3 ã¤ã®å¤ãåããã¨ãã§ãã¾ãã
-
å¤ 1 ã¤ã®æ§æ: å¤ã¯ä»¥ä¸ã®ãã¡ã® 1 ã¤ã§ãã
<flex-grow>ã¨ãã¦æå¹ãªå¤ã®å ´åããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§ããã®ä¸æ¬æå®ã¯flex: <flex-grow> 1 0%ã¨å±éããã¾ãããã ãã仿§æ¸ã§ã¯flex: <flex-grow> 1 0ã¨å±éãã¹ãã§ããã¨ãã¦ãã¾ãã<flex-basis>ã¨ãã¦æå¹ãªå¤ã®å ´åã䏿¬æå®ã¯flex: 1 1 <flex-basis>ã¨å±éããã¾ãã- ãã¼ã¯ã¼ã
noneã¾ãã¯ã°ãã¼ãã«ãã¼ã¯ã¼ãã®ããããã
-
å¤ 2 ã¤ã®æ§æ:
-
1 ã¤ç®ã¯
flex-growã¨ãã¦æå¹ãªå¤ã§ãªããã°ãªãã¾ããã -
2 ã¤ç®ã¯ä»¥ä¸ã®ããããã®å¤ã§ãªããã°ãªãã¾ããã
flex-shrinkã¨ãã¦æå¹ãªå¤ã®å ´åããã¹ã¦ã®ãã©ã¦ã¶ã¼ã«ããã¦ããã®ä¸æ¬æå®ã¯flex: <flex-grow> <flex-shrink> 0%ã¨å±éããã¾ããflex-basisã¨ãã¦æå¹ãªå¤ã®å ´åããã®ä¸æ¬æå®ã¯flex: <flex-grow> 1 <flex-basis>ã¨å±éããã¾ãã
-
-
å¤ 3 ã¤ã®æ§æ: å¤ã¯ä»¥ä¸ã®é åºã§ãªããã°ãªãã¾ããã
flex-growã¨ãã¦æå¹ãªå¤ãflex-shrinkã¨ãã¦æå¹ãªå¤ãflex-basisã¨ãã¦æå¹ãªå¤ã
å¤
<'flex-grow'>-
ãã¬ãã¯ã¹ã¢ã¤ãã ã®
flex-growãå®ç¾©ãã¾ããè² ã®å¤ã¯ç¡å¹ã¨ã¿ãªããã¾ããçç¥æã®æ¢å®å¤ã¯1ã§ãã (åæå¤ã¯0) <'flex-shrink'>-
ãã¬ãã¯ã¹ã¢ã¤ãã ã®
flex-shrinkãå®ç¾©ãã¾ããè² ã®å¤ã¯ç¡å¹ã¨ã¿ãªããã¾ããçç¥æã®æ¢å®å¤ã¯1ã§ãã (åæå¤ã¯1) <'flex-basis'>-
ãã¬ãã¯ã¹ã¢ã¤ãã ã®
flex-basisãå®ç¾©ãã¾ããçç¥æã®æ¢å®å¤ã¯0%ã§ããåæå¤ã¯autoã§ãã none-
ã¢ã¤ãã ã¯
widthããã³heightããããã£ã«ãã£ã¦å¯¸æ³ã決ãããã¾ãã寸æ³ã¯å®å ¨ã«åºå®ã§ããã¬ãã¯ã¹ã³ã³ããã¼ã«é£åãã¦å縮ããã伸é·ããããããã¨ã¯ããã¾ãããããã¯"flex: 0 0 auto" ã¨åçã§ãã
ä¸è¬çã«æã¾ãããã¬ãã¯ã¹ããã¯ã¹ã®å¹æã¯ã次㮠flex å¤ã使ç¨ãã¦å®ç¾ã§ãã¾ãã
-
initial: ãã¬ãã¯ã¹ã¢ã¤ãã ã¯ä¼¸é·ãã¾ãããã縮å°ãããã¨ãã§ãã¾ãããããæ¢å®å¤ã§ã¯flex: 0 1 autoã«å±éããã¾ããã¢ã¤ãã ã®ãµã¤ãºã¯ãflex-directionã«å¿ãã¦ãwidthã¾ãã¯heightããããã£ã«å¾ãã¾ããè² ã®ç©ºç½ãããå ´åãã¢ã¤ãã ã¯ã³ã³ããã¼å ã«åã¾ãããã«æå°ãµã¤ãºã¾ã§ç¸®å°ãã¾ããããã¬ãã¯ã¹ã³ã³ããã¼å ã§æ£ã®å¤ããã£ã¦ããããå¸åããããã«ä¼¸é·ãããã¨ã¯ããã¾ããã -
auto: ãã¬ãã¯ã¹ã¢ã¤ãã ã¯ä¼¸é·ããã縮å°ããããã¾ãããã®å¤ã¯flex: 1 1 autoã«å±éããã¾ããã¢ã¤ãã ã¯ãflex-directionã«å¿ãã¦ããã®widthã¾ãã¯heightããããã£ã«å¾ã£ã¦ãµã¤ãºæå®ããã¾ããããã¬ãã¯ã¹ã³ã³ããã¼å ã§å©ç¨ã§ããæ£ã®å¤ãå¸åããããã«ä¼¸é·ããããè² ã®å¤ã®å ´åã¯ã³ã³ããã¼ã«åããã¦æå°ãµã¤ãºã¾ã§ç¸®å°ãã¾ãããã¬ãã¯ã¹ã¢ã¤ãã ã¯å®å ¨ã«ä¼¸ç¸®èªå¨ã§ãã -
none: ãã¬ãã¯ã¹ã¢ã¤ãã ã¯ä¼¸é·ã縮å°ããã¾ããããã®å¤ã¯flex: 0 0 autoã«å±éããã¾ããã¢ã¤ãã ã¯ããã¬ãã¯ã¹ã³ã³ããã¼ã®æ¹åã«å¿ãã¦ãwidthã¾ãã¯heightããããã£ã«å¾ã£ã¦ãµã¤ãºèª¿æ´ããã¾ãããã¬ãã¯ã¹ã¢ã¤ãã ã¯å®å ¨ã«æè»æ§ãããã¾ããã -
flex: <number [1,â]>: ãã¬ãã¯ã¹ã¢ã¤ãã ã®ä¸»è¦ãµã¤ãºã¯è¨å®ããæ°å¤ã«æ¯ä¾ãã¾ãããã®å¤ã¯flex: <number> 1 0ã«å±éããã¾ããããã¯flex-basisãã¼ãã«è¨å®ãããã¬ãã¯ã¹ã¢ã¤ãã ã伸縮èªå¨ã«ãã¾ãããã®ã¢ã¤ãã ã¯æå°ã®å¯¸æ³ã¨åãå¹ ã¾ãã¯é«ãã«ãªããã³ã³ããã¼å ã§å©ç¨ã§ããæ£ã®å¤ã¯ããã®ã¢ã¤ãã ã¨å å¼ãã¬ãã¯ã¹ã¢ã¤ãã ã®æé·ä¿æ°ã«åºã¥ãã¦æ¯ä¾é åããã¾ãããã¹ã¦ã®ãã¬ãã¯ã¹ã¢ã¤ãã ããã®ãã¿ã¼ã³ã使ç¨ããå ´åããã¹ã¦ã®ã¢ã¤ãã ã¯ãã®æ°å¤ã«æ¯ä¾ãããµã¤ãºã«ãªãã¾ããè¦å: ãã©ã¦ã¶ã¼ã¯
flexå¤ã§flex-basisãæå®ããã¦ããªãå ´åãflex-basiså¤ã«0%ã使ç¨ãã¾ããããã¯ä»æ§ã§è¨ããã¦ããflex-basiså¤ã®0ã¨ã¯ç°ãªãã¾ããããã¯ãã¬ãã¯ã¹ã¬ã¤ã¢ã¦ãã«å½±é¿ãä¸ããå ´åãããã¾ãããã®å¹æã flex-basis ã® 0 㨠0% ã®éãã®ä¾ã§ç¢ºèªãã¦ãã ããã
解説
å¤ãã®å ´åã flex ã«ã¯ auto, initial, none, ã¾ãã¯åä½ã®ãªãæ£ã®æ°ãè¨å®ãã¾ãããããã®å¤ã®å¹æã確èªããã«ã¯ã以ä¸ã®ãã¬ãã¯ã¹ã³ã³ããã¼ã®å¤§ããã夿´ãã¦ã¿ã¦ãã ããã
æ¢å®ã§ã¯ãã¬ãã¯ã¹ã¢ã¤ãã ã¯å
容ç©ã®æå°ã®å¯¸æ³ãããå縮ãããã¨ã¯ããã¾ãããããã夿´ããã«ã¯ã min-width ã¾ã㯠min-height ãè¨å®ãã¦ãã ããã
å ¬å¼å®ç¾©
| åæå¤ | 䏿¬æå®ã®æ¬¡ã®åããããã£ã¨ãã¦
|
|---|---|
| é©ç¨å¯¾è±¡ | ããã¼å ã®æ¬ä¼¼è¦ç´ ãå«ããã¬ãã¯ã¹ã¢ã¤ãã |
| ç¶æ¿ | ãªã |
| è¨ç®å¤ | 䏿¬æå®ã®æ¬¡ã®åããããã£ã¨ãã¦
|
| ã¢ãã¡ã¼ã·ã§ã³ã®ç¨®é¡ | 䏿¬æå®ã®æ¬¡ã®åããããã£ã¨ãã¦
|
形弿æ³
flex =
none |
[ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
<flex-grow> =
<number [0,â]>
<flex-shrink> =
<number [0,â]>
<flex-basis> =
content |
<'width'>
<width> =
auto |
<length-percentage [0,â]> |
min-content |
max-content |
fit-content( <length-percentage [0,â]> ) |
<calc-size()> |
<anchor-size()> |
stretch |
fit-content |
contain
<length-percentage> =
<length> |
<percentage>
<calc-size()> =
calc-size( <calc-size-basis> , <calc-sum> )
<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )
<calc-size-basis> =
<size-keyword> |
<calc-size()> |
any |
<calc-sum>
<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*
<anchor-name> =
<dashed-ident>
<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline
<calc-product> =
<calc-value> [ [ '*' | / ] <calc-value> ]*
<calc-value> =
<number> |
<dimension> |
<percentage> |
<calc-keyword> |
( <calc-sum> )
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
ä¾
>flex: auto ã®è¨å®
ãã®ä¾ã§ã¯ã flex: auto ãæã¤ãã¬ãã¯ã¹ã¢ã¤ãã ãã³ã³ããã¼å
ã®ä½ç½ãå¸åããããã«æé·ããæ§åã示ãã¦ãã¾ãã
HTML
<div id="flex-container">
<div id="flex-auto">
flex: auto ï¼ã¯ãªãã¯ã§ `flex: initial` ããã¯ã¹ãåé¤/追å ï¼
</div>
<div id="default">flex: initial</div>
</div>
CSS
#flex-container {
border: 2px dashed gray;
display: flex;
}
#flex-auto {
cursor: pointer;
background-color: wheat;
flex: auto;
}
#default {
background-color: lightblue;
}
JavaScript
const flexAutoItem = document.getElementById("flex-auto");
const defaultItem = document.getElementById("default");
flexAutoItem.addEventListener("click", () => {
defaultItem.style.display =
defaultItem.style.display === "none" ? "block" : "none";
});
çµæ
ãã®ãã¬ãã¯ã¹ã³ã³ããã¼ã«ã¯ 2 ã¤ã®ãã¬ãã¯ã¹ã¢ã¤ãã ãããã¾ãã
#flex-autoã®ã¢ã¤ãã ã¯flexå¤ãautoã§ããautoå¤ã¯1 1 autoã«å±éãããã¤ã¾ãã¢ã¤ãã ã¯æ¡å¤§ã許å¯ããã¾ãã#defaultã¢ã¤ãã ã«ã¯flexå¤ãè¨å®ããã¦ããªãã®ã§ãããã©ã«ãå¤ã¨ãã¦initialå¤ãè¨å®ããã¾ããinitialå¤ã¯0 1 autoã«å±éãããã¢ã¤ãã ã¯æ¡å¤§ããã¾ããã
#default ã¢ã¤ãã ã¯ãã®å¹
ãè¦æ±ãããã ãã®ç©ºéãåãã¾ããããã以ä¸ç©ºéãåãããã«æ¡å¤§ããããã¨ã¯ããã¾ãããæ®ãã®ç©ºéã¯ãã¹ã¦ #flex-auto ã¢ã¤ãã ãå ãã¾ãã
#flex-auto ã¢ã¤ãã ãã¯ãªãã¯ããã¨ã #default ã¢ã¤ãã ã® display ããããã£ã none ã«è¨å®ãããã¬ã¤ã¢ã¦ãããé¤å»ããã¾ããããã¨ã #flex-auto ã¢ã¤ãã ãã³ã³ããã¼å
ã§å©ç¨ã§ãã空éããã¹ã¦å ããããã«å±éããã¾ããããä¸åº¦ #flex-auto ã¢ã¤ãã ãã¯ãªãã¯ããã¨ã #default ã¢ã¤ãã ãã³ã³ããã¼å
ã«åã³è¿½å ããã¾ãã
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Flexible Box Layout Module Level 1 > # flex-property > |