CSS calc-size() 颿°
å©ç¨å¯è½æ§ã¯éå®ç
ãã®æ©è½ã¯ãã¼ã¹ã©ã¤ã³ã§ã¯ããã¾ãããæãåºã使ç¨ããã¦ãããã©ã¦ã¶ã¼ã®ä¸é¨ã§åä½ãã¾ããã
Want more browser support for this feature? Tell us why.
Experimental: ããã¯å®é¨çãªæ©è½ã§ãã
æ¬çªã§ä½¿ç¨ããåã«ãã©ã¦ã¶ã¼äºææ§ä¸è¦§è¡¨ããã§ãã¯ãã¦ãã ããã
calc-size() 㯠CSS ã®é¢æ°ã§ãautoã fit-contentãmax-content ãªã©ã®å
å¨ãµã¤ãºå¤ã«å¯¾ãã¦è¨ç®ãè¡ããã¨ãã§ãã¾ããããã¯ãé常㮠calc() 颿°ã§ã¯å¯¾å¿ãã¦ãã¾ããã
calc-size() ã®è¿å¤ã¯è£éå¦çãå¯è½ã§ããããµã¤ãºãã¼ã¯ã¼ãã®å¤ãã¢ãã¡ã¼ã·ã§ã³ããã³ãã©ã³ã¸ã·ã§ã³ã§ä½¿ç¨ãããã¨ãã§ãã¾ããäºå®ä¸ãããããã£å¤ã« calc-size() ãå«ããã¨ã鏿ç¯å²ã« interpolate-size: allow-keywords ãèªåçã«é©ç¨ããã¾ãã
ãã ãã interpolate-size ã¯ç¶æ¿ããããããè¦ç´ ã«é©ç¨ããã¨ããã®è¦ç´ ã¨ãã®åè¦ç´ ã«é©ç¨ããã¦ãããã¹ã¦ã®ããããã£ã®ãå
å¨ãµã¤ãºã®ãã¼ã¯ã¼ãã®è£éå¦çãå¯è½ã«ãªãã¾ãããã®ãããå
å¨ãµã¤ãºã®ã¢ãã¡ã¼ã·ã§ã³ãæå¹ã«ããã«ã¯ãinterpolate-size ã使ç¨ãããã¨ããå§ããã¾ããå
å¨ãµã¤ãºã®ã¢ãã¡ã¼ã·ã§ã³ãæå¹ã«ããããã« calc-size() ã使ç¨ããã®ã¯ãè¨ç®ãå¿
è¦ãªå ´åã®ã¿ã«ãã¦ãã ããã
æ§æ
/* calc-size() ã§å¤ã渡ã */
calc-size(auto, size)
calc-size(fit-content, size)
/* è¨ç®ãå®è¡ */
calc-size(min-content, size + 100px)
calc-size(fit-content, size / 2)
/* 颿°ãå«ãè¨ç® */
calc-size(auto, round(up, size, 50px))
弿°
calc-size() 颿°ã®æ§æã¯æ¬¡ã®ã¨ããã§ãã
calc-size(<calc-size-basis>, <calc-sum>)
弿°ã¯æ¬¡ã®éãã§ãã
<calc-size-basis>-
è¨ç®ãå®è¡ããå¤ï¼é常ã¯å å¨ãµã¤ãºï¼ã
<calc-sum>-
<calc-size-basis>ã«å¯¾ãã¦å®è¡ããè¨ç®ãå®ç¾©ããå¼ã§ãã
è¿å¤
<calc-size-basis> ã <calc-sum> å¼ã§å¤æ´ããå¤ãè¿ãã¾ãã<calc-size-basis> å¤ã¯å
å¨ãµã¤ãºå¤ã§ãããããè¿å¤ã¯ã颿°ã«å
¥åãããå
å¨ãµã¤ãºå¤ã¨åæ§ã«åä½ããã夿´ãããå
å¨ãµã¤ãºå¤ã«ãªãã¾ãã
解説
ä¸é¨ã®ãã©ã¦ã¶ã¼ã®ã¬ã¤ã¢ã¦ãã¢ã«ã´ãªãºã ã¯ãå
å¨ãµã¤ãºãã¼ã¯ã¼ãã«å¯¾ãã¦ç¹å¥ãªåä½ããã¾ãã calc-size() 颿°ã¯ã<length-percentage> ã§ã¯ãªããå
å¨ãµã¤ãºã表ãããã«æç¤ºçã«å®ç¾©ããã¦ãããããã«ãã£ã¦æ£ç¢ºæ§ã確ä¿ãã¦ãã¾ãã calc-size() ã使ç¨ããã¨ãå
å¨ãµã¤ãºã®æ°å¤ã«å¯¾ãã¦ãå®å
¨ãã¤æç¢ºã«å®ç¾©ãããæ¹æ³ã§è¨ç®ãè¡ããã¨ãã§ãã¾ãã
æåã®å¼æ°ï¼<calc-size-basis>ï¼ã®æå¹ãªå¤
æåã® calc-size() 弿°ã¯ã次ã®å
å¨å¤ã®ããããã«ãªãã¾ãã
automin-contentmax-contentfit-contentcontentï¼flex-basisã使ç¨ãã¦ãµã¤ãºè¨å®ãããã³ã³ããã¼ã®å ´åï¼
ãã®å¼æ°ã«ã¯ãããã¤ãã®ç¹å¥ãªå¤ãåããã¨ãã§ãã¾ãã
-
å ¥ãåã«ãªã£ã
calc-size()å¤ãããã¯ãã¾ãé »ç¹ã«è¡ããã¨ã§ã¯ãªãã§ããããã CSS 夿°ã使ç¨ãããã¨ã§ç¢ºå®ã«å©ç¨ã§ãã¾ããããã¯ã<calc-size-basis>ã¯ã夿°ãcalc-size()ãè¨å®ããã¦ããããããã£ã«å¯¾ãã¦æå¹ãªå¤ã§ããå ´åã«å¸¸ã«æ©è½ããããã§ããä¾ãã°ãããã¯ãã¾ãåä½ãã¾ããcsssection { height: calc-size(calc-size(max-content, size), size + 2rem); }ããã¨åãã§ãã
css:root { --intrinsic-size: calc-size(max-content, size); } section { height: calc-size(var(--intrinsic-size), size + 2rem); } -
2 ã¤ç®ã®å¼æ°ã¨ãã¦æå®ãã
<calc-sum>ã¨åãå¶éãé©ç¨ãããå¥ã®<calc-sum>ã§ãããã ãããã¼ã¯ã¼ãsizeãåãè¾¼ããã¨ã¯ã§ãã¾ãããå å¨ãµã¤ãºå¤ã«å¯¾ãã¦è¨ç®ãè¡ããªããªã£ããããããã¯ãããã使ç¨ããªãã§ããããããããç¬èªã®ããããã£å¤ã<calc-sum>ã§ããå ´åããã®é¢æ°ã¯å¼ãç¶ãåä½ãã¾ããä¾ãã°ãããã¯ç´æ¥åä½ãã¾ããã¾ãã300px + 2remã®å¤ã®ç¬èªã®ããããã£ã使ç¨ããå ´åãåä½ãã¾ããcsssection { height: calc-size(300px + 2rem, size / 2); } -
ä¸ç¹å®ã®ç¢ºå®ãµã¤ãºã表ããã¼ã¯ã¼ã
anyããã®å ´åãsizeãã¼ã¯ã¼ã㯠2 ã¤ç®ã®å¼æ°ã«ã¯åãè¾¼ããã¨ã¯ã§ãã¾ãããcalc-size()㯠2 ã¤ç®ã®å¼æ°ã®è¨ç®çµæãè¿ãã¾ããä¾ãã°æ¬¡ã®ããã«ãã¾ããcsssection { height: calc-size(any, 300px * 1.5); /* 450px ãè¿ã */ }
ç°ãªãå
å¨ãµã¤ãºãåä¸ã®è¨ç®ã§æ··å¨ããããã¨ã¯ã§ãã¾ãããä¾ãã°ãmax-content - min-content ã¯æå³ãæãã¾ãããcalc-size() ã¯ãããããã®è¨ç®ã§ 1 ã¤ã®å
å¨ãµã¤ãºå¤ã®ã¿ã使ç¨ããããããã®åé¡ãåé¿ãã¦ãã¾ãã
2 ã¤ç®ã®å¼æ°ã®æå¹ãªå¤ (<calc-sum>)
2 ã¤ç®ã® calc-size() 弿°ã¯ã<calc-sum> å¼ã§ãã
ãã®å¼ã§ã¯ã
- ãã¼ã¯ã¼ã
sizeã¯ãæåã®å¼æ°ã¨ãã¦æå®ããã<calc-size-basis>ã表ãã¾ãã - ãªãã©ã³ãã«ã¯ã
sizeããã³ã³ã³ããã¹ãã§æå³ã®ããå¤åãå«ãããã¨ãã§ãã¾ãã +ã-ã*ã/æ¼ç®åãå«ãããã¨ãã§ãã¾ãã- ãã以å¤ã«ãã
round()ãmax()ããããã¯å ¥ãåã«ããcalc-size()ãªã©ã®æ°å¦é¢æ°ãå«ãããã¨ãã§ãã¾ãã - å
¨ä½çãªè¡¨ç¾ã¯
<length-percentage>ã¨ä¸è´ãã<length>ã«è§£æ±ºãããå¿ è¦ãããã¾ãã
å å¨ãµã¤ãºã®å¤ãã¢ãã¡ã¼ã·ã§ã³ã§ããããã«ãã
calc-size() ã®è¿å¤ã¯è£éå¦çãå¯è½ã§ããã<length-percentage> å¤ã¨ calc-size() ã®å
å¨ãµã¤ãºè¿å¤ã¨ã®éã§ã¢ãã¡ã¼ã·ã§ã³ãå®ç¾ãããã¨ãã§ãã¾ãã
ã¡ã¢: ã¬ã¤ã¢ã¦ãã¤ãã³ãã忏ããããã©ã¼ãã³ã¹ã¸ã®å½±é¿ã軽æ¸ãããããå¯è½ã§ããã°ããã¯ã¹ã¢ãã«ã®ããããã£ã®ã¢ãã¡ã¼ã·ã§ã³ã¯é¿ããã¹ãã§ãï¼éè¦ãªã¬ã³ããªã³ã°ãã¹ > ã¬ã¤ã¢ã¦ããåç §ï¼ã
ä¾ãã°ããã©ã³ã¸ã·ã§ã³ã使ç¨ãã¦ãã³ã³ããã¼ã® width ã 0 ãã auto ã¾ã§åæ§ã«ã¢ãã¡ã¼ã·ã§ã³ãããã¨ãã§ãã¾ãã
section {
width: 0;
transition: width ease 1s;
}
section:hover,
section:focus {
width: calc-size(auto, size);
}
ä¸è¨ã®ä¾ã§ã¯ãä½ããã®è¨ç®ã¯è¡ããã¦ãã¾ããã auto ã calc-size() ã«ä»£å
¥ãã夿´ããã«è¿ãã¦ãã¾ãã interpolate-size ããããã£ã使ç¨ããã¨ãä¸è¨ã®ã¢ãã¡ã¼ã·ã§ã³ã®ãããªã¢ãã¡ã¼ã·ã§ã³ããã»ã¨ãã©ã®å ´åãããç°¡åã«å®è£
ã§ãã¾ããç¹ã«ãè¤æ°ã®ã¢ãã¡ã¼ã·ã§ã³ãèæ
®ããå ´åã«æå¹ã§ãããã®ããããã£ã¯ç¶æ¿ããããããç¥å
ã®ããããã£ã§ä¸åº¦å®£è¨ããã ãã§æ¸ã¿ã¾ããã¤ã¾ãã calc-size() ã使ç¨ããã« 0 㨠auto éã®ãã©ã³ã¸ã·ã§ã³ãè¡ããã¨ãã§ãã¾ãã
calc-size() 颿°ã¯ãè¨ç®ãè¦æ±ãããå ´åã«ã®ã¿ãå
å¨ãµã¤ãºã®ã¢ãã¡ã¼ã·ã§ã³ãæå¹ã«ããããã«ä½¿ç¨ãã¾ããããä¾ãã°ã次ã®ä¾ã§ã¯ãwidth ãã¢ãã¡ã¼ã·ã§ã³åãããã¤ãå
å¨ãµã¤ãºã®çµäºç¶æ
ã«è¨ç®ãé©ç¨ãã¦ãã¾ãã
section {
width: 0;
transition: width ease 1s;
}
section:hover,
section:focus {
width: calc-size(auto, size + 2rem);
}
calc-size() ãå½¹ç«ã¤ã±ã¼ã¹ã®ã²ã¨ã¤ã¯ãå
å¨ãµã¤ãºã¨ããã®å
å¨ãµã¤ãºãä¿®æ£ãããã¼ã¸ã§ã³ã¨ã®éã§ã¢ãã¡ã¼ã·ã§ã³ãè¡ãããå ´åã§ããããã¯ãinterpolate-size ããã³ calc() ã§ã¯ä½¿ç¨ã§ãã¾ãããä¾ãã°ã次㮠@keyframes å®ç¾©ã¯ãã³ã³ããã¼ã® width ã fit-content 㨠fit-content ã® 70% ã¨ã®éã§ã¢ãã¡ã¼ã·ã§ã³ãã¾ãã
@keyframes narrower {
from {
width: fit-content;
}
to {
width: calc-size(fit-content, size * 0.7);
}
}
ã¡ã¢:
calc-size() ã¯ã2 ã¤ã®ç°ãªãå
å¨ãµã¤ãºå¤éã®ã¢ãã¡ã¼ã·ã§ã³ãã§ããããã«ãªãããã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããã
形弿æ³
<calc-size()> =
calc-size( <calc-size-basis> , <calc-sum> )
<calc-size-basis> =
<size-keyword> |
<calc-sum> |
<calc-size()> |
any
<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*
<calc-product> =
<calc-value> [ [ '*' | / ] <calc-value> ]*
<calc-value> =
<number> |
<dimension> |
<percentage> |
<calc-keyword> |
( <calc-sum> )
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
ä¾
>åºæ¬ç㪠calc-size ã®ä½¿ãæ¹
ãã®ä¾ã§ã¯ãcalc-size() ã使ç¨ããã³ã³ããã¼ã®åºæ¬çãªãµã¤ãºè¨å®ã示ãã¦ãã¾ãã
HTML
HTML ã«ã¯ãåã³ã³ãã³ããå«ãåä¸ã® <section> è¦ç´ ãå«ã¾ãã¦ãã¾ãã
<section>
<h2>好ããªå¼ç¨</h2>
<p>
ãã¡ãã·ã§ã³ã¨ã¯ãã¨ã¦ãéããã®ã ããã15åãã¨ã«å¤æ´ããªããã°ãªããªããã®ã ã
</p>
</section>
CSS
CSS ã§ã¯ããã¬ãã¯ã¹ããã¯ã¹ ã使ç¨ãã¦ã<section> å
ã®åè¦ç´ ãä¸å¤®ã«é
ç½®ãããã® <section> ã® width ããã³ height ã calc-size() 颿°ã«è¨å®ãã¾ããwidth 㯠fit-content ã« 6rem ãå ããå¤ã«è¨å®ãã¾ããheight 㯠auto ã« 2 ãæããå¤ã«è¨å®ãã¾ãã
section {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: calc-size(fit-content, size + 6rem);
height: calc-size(auto, size * 2);
}
ç°¡æ½ã«ãããããæ®ãã® CSS ã¯é表示ã«ãã¦ãã¾ãã
çµæ
ããã£ã³ã°ã使ç¨ããã«ãããã¹ããä¸å¤®ã«é ç½®ããããã®æ°´å¹³æ¹åã¨åç´æ¹åã®ä½ç½ã使ãã¾ããã
åºæ¬ç㪠calc-size ã®ã¢ãã¡ã¼ã·ã§ã³
ãã®ä¾ã§ã¯ã calc-size() ã使ç¨ãã¦ãç¹å®ã®ãµã¤ãºã¨å
å¨ãµã¤ãºã®éã§ã¢ãã¡ã¼ã·ã§ã³ã表示ããæ¹æ³ã示ãã¾ãããã®ãã¢ã§ã¯ããã£ã©ã¯ã¿ã¼ã®ããã¸/ãååã¿ã°ããæ©è½ãããã®ããã¸ã«ã«ã¼ã½ã«ãåãããããã©ã¼ã«ã¹ãåãããã¨ããã®ãã£ã©ã¯ã¿ã¼ã«é¢ããæ
å ±ã表示ããã¾ããæ
å ±ã®è¡¨ç¤ºã¯ãè¨å®ããé·ããã max-content ã¸ã® height é·ç§»ã«ãã£ã¦å¦çããã¾ãã
HTML
HTML ã«ã¯ããã¼ãã¼ãã®ãã©ã¼ã«ã¹ãåãåããã¨ãã§ããããã« tabindex="0" ãè¨å®ãããåä¸ã® <section> è¦ç´ ãå«ã¾ãã¦ãã¾ãã <section> ã«ã¯ãããããèªåèªèº«ã®åã³ã³ãã³ããå«ã <header> ããã³ <main> è¦ç´ ãå«ã¾ãã¦ãã¾ãã
<section tabindex="0">
<header>
<h2>Chris Mills</h2>
</header>
<main>
<p>Chris is the silent phantom of MDN.</p>
<ul>
<li><strong>Height</strong>: 3.03m</li>
<li><strong>Weight</strong>: 160kg</li>
<li><strong>Tech Fu</strong>: 7</li>
<li><strong>Bad Jokes</strong>: 9</li>
</ul>
</main>
</section>
CSS
CSS ã§ã¯ã <section> ã® height ã 2.5rem ã«ã overflow ã hidden ã«è¨å®ãã¦ãæ¢å®ã§ã¯ <header> ã ãã表示ãããããã«ããç¶æ
å¤åæã« transition ã§ <section> ã® height ã 1 ç§ããã¦ã¢ãã¡ã¼ã·ã§ã³ãããæå®ããã¾ããæå¾ã«ã <section> ã® height ã calc-size() 颿°ã§ã :hover ããã³ :focus ã§å¼ã³åºãããã«è¨å®ãã¾ãããã®é¢æ°ã®è¿å¤ã¯ã max-content + 2rem ã¨åçã§ãã
section {
height: 2.5rem;
overflow: hidden;
transition: height ease 1s;
}
section:hover,
section:focus {
height: calc-size(max-content, size + 2rem);
}
ç°¡æ½ã«ãããããæ®ãã® CSS ã¯çç¥ãã¦ãã¾ãã
çµæ
<section> ã«ã«ã¼ã½ã«ãå½ã¦ããããã¼ãã¼ãã§ãã©ã¼ã«ã¹ãå½ã¦ãããã¦ã¿ã¦ãã ããããã®é åã®é«ãã 2rem ã ã伸ã³ãã³ã³ãã³ãããã¹ã¦è¡¨ç¤ºãããä¸é¨ã« 2rem ã®ä½ç½ãã§ãã¾ãã
fit-content ã«åºã¥ãã¦èªã¿åãå¹
ã調æ´ãã
ãã®ä¾ã§ã¯ãããã¹ããå«ã¾ãã¦ããã³ã³ããã¼ã¨ãèªã¿åãç°å¢è¨å®ã«å¿ãã¦ã³ã³ããã¼ã®å¹ ãçããããåºããããã§ãããã¿ã³ã示ãã¦ãã¾ãã
HTML
HTML ã«ã¯ãåããã¹ãã³ã³ãã³ããå«ãåä¸ã® <section> è¦ç´ ã¨ã<section> ã®å¹
ã夿´ãã <button> ãå«ã¾ãã¦ãã¾ãã
<section class="easy-reader">
<h2>Easy reader</h2>
<p>
Eius velit aperiam ipsa. Deleniti eum excepturi ut magni maxime maxime
beatae. Dicta aperiam est laudantium ut illum facere qui officiis. Sunt
deleniti quam id. Quis sunt voluptatem praesentium minima dolorum autem
consequatur velit.
</p>
<p>
Vitae ab incidunt velit aspernatur deleniti distinctio rerum. Et natus sed
et quos mollitia quia quod. Quae officia ex ea. Ducimus ut voluptatem et et
debitis. Quidem provident laboriosam exercitationem similique deleniti.
Temporibus vel veniam mollitia magni unde a nostrum.
</p>
<button class="width-adjust">Narrower</button>
</section>
CSS
CSS ã§ã¯ã<section> ã® width ãæ¢å®ã® fit-content ã«è¨å®ãã¾ããæ¬¡ã«ã2 çµã® @keyframes ãå®ç¾©ãã¾ãã1 ã¤ã¯ fit-content ãã fit-content ã® 70% ï¼calc-size() ã使ç¨ãã¦è¨ç®ï¼ã¾ã§ã¢ãã¡ã¼ã·ã§ã³ãã narrowerããã 1 ã¤ã¯åãå¤ãéæ¹åã«ã¢ãã¡ã¼ã·ã§ã³ãã wider ã§ããæå¾ã«ããããã®ã¢ãã¡ã¼ã·ã§ã³ã 2 ã¤ã®ã¯ã©ã¹ã.narrower ããã³ .wider ã«åãä»ãã¾ããããããã®ã¢ãã¡ã¼ã·ã§ã³ã¯ã 1 ç§éç¶ç¶ããå®äºããã¨æçµç¶æ
ãç¶æãããããã«å®ç¾©ããã¦ãã¾ãã
section {
width: fit-content;
}
@keyframes narrower {
from {
width: fit-content;
}
to {
width: calc-size(fit-content, size * 0.7);
}
}
@keyframes wider {
from {
width: calc-size(fit-content, size * 0.7);
}
to {
width: fit-content;
}
}
.narrower {
animation: narrower 1s ease forwards;
}
.wider {
animation: wider 1s ease forwards;
}
ç°¡æ½ã«ãããããæ®ãã® CSS ã¯çç¥ãã¦ãã¾ãã
JavaScript
JavaScript ã¯ããã¿ã³ãã¯ãªãã¯ãããã¨ãã« <section> ã«é©åãªã¯ã©ã¹ãé©ç¨ãããçã/åºãåãæ¿ãããã°ã«ãæä¾ãã¾ãã
const widthAdjustBtn = document.querySelector(".width-adjust");
const easyReader = document.querySelector(".easy-reader");
widthAdjustBtn.addEventListener("click", () => {
if (easyReader.classList.length === 1) {
easyReader.classList.add("narrower");
widthAdjustBtn.textContent = "Wider";
} else if (easyReader.classList.contains("wider")) {
easyReader.classList.replace("wider", "narrower");
widthAdjustBtn.textContent = "Wider";
} else if (easyReader.classList.contains("narrower")) {
easyReader.classList.replace("narrower", "wider");
widthAdjustBtn.textContent = "Narrower";
}
});
çµæ
<button> ãä½åº¦ãã¯ãªãã¯ãã¦ã <section> ãå¹
ã®åºã表示ã¨çã表示ã®éã§èª¿æ´ãã¦ã¿ã¦ãã ãããããã¯ã width ã fit-content ã®å¤ã«åºã¥ãã¦æä½ãããã¨ã§å®ç¾ãã¦ãã¾ãã
颿° calc-size() å
ã§é¢æ°ã使ç¨ãã
åè¿°ã®ããã«ãcalc-size() å
ã§å¥ã®é¢æ°ã使ç¨ãããã¨ãã§ãã¾ãããã®ä¾ã§ã¯ã field-sizing: content ã <input> è¦ç´ ã«è¨å®ãã¦ãå
¥åã³ã³ãã³ãã¨åãå¹
ã«ããmax() 颿°ã使ç¨ãã¦ã<input> ãæå°ãµã¤ãºä»¥ä¸ã§ãããã¨ã確å®ã«ä¿æããå
¥åããã¹ãããã®ãµã¤ãºããåºããªã£ãå ´åã«ã®ã¿ä¼¸é·ãéå§ããããã«ãã¾ããããã¯ã fit-content ã« 20px ãå ç®ãã¦è¨å®ãããã¨ã§å®ç¾ãã¦ãã¾ãã
HTML
ãã® HTML ã«ã¯ã3 ã¤ã®ããã¹ãåã® <input> ãå«ã <form> è¦ç´ ãå«ã¾ãã¦ãã¾ããããããã® <input> ã«ã¯ããã©ã¼ã ã«ã¢ã¯ã»ã¹ã§ããããã«ãé¢é£ä»ãããã <label> ãããããã©ã¼ã ã®ã¬ã¤ã¢ã¦ããå´©ããã»ã©å
¥åå¤ãé·ããªãã®ãé²ãããã« maxlength ãé©ç¨ããã¦ãã¾ãã
<form>
<div>
<label for="name">åå:</label>
<input type="text" id="name" name="name" maxlength="48" />
</div>
<div>
<label for="email">ã¡ã¼ã«ã¢ãã¬ã¹:</label>
<input type="email" id="email" name="email" maxlength="48" />
</div>
<div>
<label for="address">使:</label>
<input type="text" id="address" name="address" maxlength="60" />
</div>
</form>
CSS
CSS ã§ã¯ã <label> è¦ç´ ã® width ã 100px ã«è¨å®ãã¾ãã field-sizing: content ã <input> è¦ç´ ã«è¨å®ãã¦ãå
¥åãããã³ã³ãã³ãã¨åãå¹
ã«ããããã«ãã¾ããæ¢å®ã§ã¯ãä½ãå
¥åãããªããããå¹
ã¯è¨å®ããã¾ãããããã«å¯¾å¦ããããã«ããããã® width å¤ã calc-size(fit-content, max(100px, size + 20px)) ã«è¨å®ãã¾ããããã¯ãå¤ãå
¥åããã¦ããªãã¦ããå¹
ã¯æå° 100px ã«ãªããã¨ãæå³ãã¾ããå
¥åå¤ã 100px ããåºããªã£ãå ´åãwidth 㯠fit-content ã« 20px ãå ããå¤ã«å¤æ´ããã¾ããããã¯ãã³ã³ãã³ãã®ãµã¤ãºã«å¿ãã¦ä¼¸é·ãå§ããããå³å´ã« 20px ã®ééãæ®ããã¨ãæå³ãã¦ãã¾ãã
label {
width: 100px;
}
input {
field-sizing: content;
width: calc-size(fit-content, max(100px, size + 20px));
}
ç°¡æ½ã«ãããããæ®ãã® CSS ã¯é表示ã«ãã¦ãã¾ãã
çµæ
ãã©ã¼ã ã®å
¥åæ¬ã«ããã¹ããå
¥åãã¦ããã®å¤ã max() 颿°ã«ãã£ã¦å¼·å¶ãããæå°å¹
ã¨åãå¹
ã«ãªãå§ããã¨ãã«ãããã¹ããã©ã®ããã«ä¼¸é·ãããã確èªãã¦ãã ããã
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Values and Units Module Level 5 > # calc-size > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
interpolate-sizecalc()round()- Animate to height: auto; (and other intrinsic sizing keywords) in CSS (developer.chrome.com, 2024)