calc()
Baseline
åºãå©ç¨å¯è½
*
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
calc() 㯠CSS ã®é¢æ°ã§ã CSS ã®ããããã£å¤ãæå®ããéã«è¨ç®ãè¡ããã¨ãã§ãããã®ã§ãã <length>ã<frequency>ã<angle>ã<time>ã<percentage>ã<number>ã<integer>ã<color-function> ã®å¤ãå©ç¨ã§ããå ´æãªãã°ä½¿ç¨ã§ãã¾ãã
試ãã¦ã¿ã¾ããã
width: calc(10px + 100px);
width: calc(100% - 30px);
width: calc(2em * 5);
width: calc(var(--variable-width) + 20px);
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element">å¹
ã夿´ãã¦ãã ãã</div>
</section>
:root {
--variable-width: 100px;
}
#example-element {
border: 10px solid black;
padding: 10px;
}
æ§æ
/* calc(å¼) */
calc(100% - 80px)
/* CSS 颿°ãç¨ããå¼ */
calc(100px * sin(pi / 2))
/* 夿°ãå«ãå¼ */
calc(var(--hue) + 180)
/* ç¸å¯¾è²ã®è²ãã£ã³ãã«ã«ç¨ããå¼ */
lch(from aquamarine l c calc(h + 180))
calc() 颿°ã¯ã弿°ã¨ãã¦åä¸ã®å¼ãåãããã®å¼ã®çµæã CSS ããããã£ã®å¤ã¨ãã¦ä½¿ç¨ããã¾ãããã®å¼ã«ããã¦ããªãã©ã³ãã¯ã以ä¸ã®ä¸è¦§ã«æ²è¼ããã¦ããæ¼ç®åã使ç¨ãã¦çµåãããã¨ãã§ãã¾ããå¼ã«è¤æ°ã®ãªãã©ã³ããå«ã¾ããå ´åã calc() ã¯æ¨æºçãªæ¼ç®åã®åªå
é ä½ã®ã«ã¼ã«ã使ç¨ãã¾ãã
+-
æå®ããããªãã©ã³ãå士ãå ç®ãã¾ãã
--
第 2 ãªãã©ã³ãã第 1 ãªãã©ã³ãããæ¸ç®ãã¾ãã
*-
æå®ããããªãã©ã³ãå士ãä¹ç®ãã¾ãã
/-
å·¦å´ã®ãªãã©ã³ãï¼è¢«é¤æ°ï¼ãå³å´ã®ãªãã©ã³ãï¼é¤æ°ï¼ã§é¤ç®ãã¾ãã
<number> å以å¤ã®ãªãã©ã³ãã«ã¯ãã¹ã¦ãpxãemã% ãªã©ã®é©åãªå使ååãæ¥å°¾èªã¨ãã¦ä»ããå¿
è¦ãããã¾ãã å¼å
ã®åãªãã©ã³ãã«ç°ãªãåä½ã使ç¨ãããã¨ãã§ãã¾ããã¾ããå¿
è¦ã«å¿ãã¦æ¬å¼§ã使ç¨ãã¦è¨ç®é åºãæå®ãããã¨ãã§ãã¾ãã
解説
calc() ã«ã¤ãã¦ãããã¤ãçæãã¹ãç¹ãããã¾ããããã«ã¤ãã¦ã¯ããã®ç¯ã§è©³ãã説æãã¾ãã
çµæã®å¤
calc() 颿°ã¯ã以ä¸ã®ããããã®åã®å®å
¨ãª CSS å¤ã®ä»£ããã«é
ç½®ããå¿
è¦ãããã¾ãã
<length><frequency><angle><time><flex><resolution><percentage><number><integer><length-percentage>ã®ãããªè¤ååã®ãããã
calc() ã¯ããã¼ã»ã³ãå¤ãé·ãå¤ãªã©ã®æ°å¤é¨åã®ã¿ãç½®ãæãããã¨ã¯ã§ãã¾ããããã®å¾ã«ç¶ãåä½ãç½®ãæããå¿
è¦ãããã¾ããä¾ãã°ã calc(100 / 4)% ã¯ä¸æ£ãªå¼ã§ããã calc(100% / 4) ã¯æ£ããå¼ã§ãã
calc() ã®çµæã®å¤ã¯ãããã使ç¨ããã¦ããã³ã³ããã¹ãã¨äºææ§ãããå¿
è¦ãããã¾ããä¾ãã°ã margin: calc(1px + 2px) ã¯æå¹ã§ããã margin: calc(1 + 2) ã¯ç¡å¹ã§ããããã¯ã margin: 3 ãæå®ãããã¨ã¨åãã§ããããã®çµæãããããã£ã¯ç¡è¦ããã¾ãã
<integer> ãæå¾
ãããå ´åã calc() å¼ã¯ <number> ã¨ãã¦è©ä¾¡ãããæãè¿ãæ´æ°ã«ä¸¸ãããã¾ãããããã£ã¦ã calc(1.4) ã¯å¤ 1 ãè¿ãã¾ããå¤ã®å°æ°ç¹ä»¥ä¸ã®æ¡æ°ãæ£ç¢ºã« 0.5 ã®å ´åãå¤ã¯æ£ã®ç¡é大ã«åãã£ã¦ä¸¸ãããã¾ããä¾ãã°ã calc(1.5) ã¯å¤ 2 ã¨ãªãã calc(-1.5) 㯠-1 ã«ä¸¸ãããã¾ãã
calc() ã¯ã IEEE-754 æ¨æºã«å¾ãæµ®åå°æ°ç¹æ¼ç®ãå®è¡ããããã infinity ããã³ NaN ã®å¤ã«ã¤ãã¦ããã¤ãã®æ³¨æäºé
ã ããã¾ãã宿°ã®ã·ãªã¢ã«åã®è©³ç´°ã«ã¤ãã¦ã¯ã <calc-keyword> ãã¼ã¸ãåç
§ãã¦ãã ããã
å ¥åã®æ³¨æäºé
calc()ã¯å å¨çãªãµã¤ãºã®å¤ãä¾ãã°autoãfit-contentã§ã¯è¨ç®ãè¡ããã¨ãã§ãã¾ããã代ããã«calc-size()颿°ã使ç¨ãã¦ãã ããã*æ¼ç®åã¨/æ¼ç®åã«ã¯åå¾ã®ãã¯ã¤ãã¹ãã¼ã¹ã¯å¿ è¦ããã¾ããããä¸è²«æ§ã®ããã«è¿½å ãããã¨ãæ¨å¥¨ããã¦ãã¾ããcalc()颿°ã¯å ¥ãåã«ãããã¨ãã§ãããã®å ´åãå å´ã®ãã®ã¯åãªãæ¬å¼§ã¨ãã¦æ±ããã¾ãã- èªåã¬ã¤ã¢ã¦ãã¨åºå®ã¬ã¤ã¢ã¦ãã®è¡¨ã®ä¸¡æ¹ã«ããã¦ã表ã®åã表ã®åã°ã«ã¼ãã表ã®è¡ã表ã®è¡ã°ã«ã¼ãã表ã®ã»ã«ã®å¹
ã¨é«ãã«ãã¼ã»ã³ãå¤ãå«ãæ°å¼ã¯ã
autoãæå®ããã¦ãããã®ããã«æ±ãããå ´åãããã¾ãã +ããã³-å¼ã®æ§æã®è©³ç´°ã«ã¤ãã¦ã¯ã<calc-sum>ãåç §ãã¦ãã ããã
CSS åä»ãæ¼ç®
calc() ã§å¤ãä¹ç®ããå ´åã* æ¼ç®åã使ç¨ããéã¯ãåä½ãå«ãå¤ã¯ 1 ã¤ã ãã§ããå¿
è¦ãããã¾ãã200px * 4px ã®ãããªè¨ç®ã¯å¯¾å¿ãã¦ãã¾ãããCSS ã«ãã㦠800px2 ã¯ç¡æå³ãªå¤ã¨ãªãããã§ãã
éã«ã200px / 4px 㯠50 ã¨è©ä¾¡ããããã㯠CSS ã«ããã¦æå³ãæãã¾ãããããã£ã¦ãcalc() 颿°ã§æ°å¤ãé¤ç®ããéã« / æ¼ç®åã使ç¨ããå ´åã対å¿ãã¦ãããã©ã¦ã¶ã¼ã§ã¯ããªãã©ã³ãã®ä¸¡è¾ºã«åä½ãæå®ãããã¨ãã§ãã¾ãããã ããããããåããã¼ã¿åã§ãããã¨ãæ¡ä»¶ã§ããä¾ãã°ã100vw / 1px ã¯æå¹ã§ãããåä½ã®ãªãå¤ãè¿ãã¾ãã
ãã®åã¯ã<number> ãå¤ã¾ãã¯å¼æ°ã¨ãã¦åãå
¥ããããããã£ã颿°ã®å¤ã¨ãã¦ä½¿ç¨ã§ããã»ããåä»ãå¤ãä¹ç®ãããã¨ã§å¥ã®ãã¼ã¿åã«å¤æãããã¨ãå¯è½ã§ãã
CSS ã«ãããåä»ãç®è¡æ¼ç®ã®å®å ¨ãªèª¬æã¨ä¾ã«ã¤ãã¦ã¯ãCSS åä»ãæ¼ç®ã®ä½¿ç¨ãåç §ãã¦ãã ããã
ç¸å¯¾è²ã«ãããè²ãã£ã³ãã«ã®è¨ç®ã®å¯¾å¿
calc() 颿°ã¯ãç¸å¯¾è²ã®ã³ã³ããã¹ãå
ã§è²ãã£ã³ãã«ãç´æ¥æä½ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ããããã«ãããrgb()ãhsl()ãlch() ãªã©ã®è²ã¢ãã«ã«ãããè²ãã£ã³ãã«ã®åçãªèª¿æ´ãå¯è½ã«ãªãã¾ãã
ç¸å¯¾è²ã®æ§æã¯ãããã¤ãã®è²ãã£ã³ãã«ãã¼ã¯ã¼ããå®ç¾©ãã¦ãã¾ããããããã®ãã¼ã¯ã¼ãã¯ãè²ãã£ã³ãã«ã®å¤ã <number> ã¨ãã¦è¡¨ãã¾ãï¼è©³ç´°ã«ã¤ãã¦ã¯ããã£ã³ãã«å¤ã¯ <number> å¤ã«è§£æ±ºããããåç
§ãã¦ãã ããï¼ã calc() 颿°ã§ã¯ããããã®è²ãã£ã³ãã«ãã¼ã¯ã¼ãã使ç¨ãã¦ãè²ãã£ã³ãã«ãåçã«èª¿æ´ãããã¨ãã§ãã¾ããä¾ãã°ã calc(r + 10) ãªã©ã§ãã
形弿æ³
<calc()> =
calc( <calc-sum> )
<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() ã使ç¨ãã¦ããã¹ãã®å¤§ãããå¶å¾¡ããå ´åã¯ã䏿¹ã®å¤ãç¸å¯¾çãªé·ãã®åä½ã«ãªããã¨ã確èªãã¦ãã ããã
h1 {
font-size: calc(1.5rem + 3vw);
}
ããã«ãã£ã¦ããã¼ã¸ãæ¡å¤§ç¸®å°ãããã¨ãã«ããã¹ãã®å¤§ãããå¤åãã¾ãã
ä¾
>ãã¼ã¸ã³ãã¤ãã¦ãªãã¸ã§ã¯ããç»é¢ã«é ç½®ãã
calc() ã«ããããã¼ã¸ã³è¨å®ãæã¤ããã¯ã¹é
ç½®ã§ãã¾ãããã®ä¾ã§ã¯ CSS ã§ã¦ã£ã³ãã¦ã横åãããã«åºããããã¼ãä½ãã¾ããããã¼ã®ä¸¡å´ã¨ã¦ã£ã³ãã¦ã®ç¸ã¯ 40 ãã¯ã»ã«ç©ºãã¾ãã
.banner {
position: absolute;
left: 40px;
width: calc(100% - 80px);
border: solid black 1px;
box-shadow: 1px 2px;
background-color: yellow;
padding: 6px;
text-align: center;
box-sizing: border-box;
}
<div class="banner">ããã¯ããã¼ã§ãï¼</div>
ãã©ã¼ã ãã£ã¼ã«ãã®å¤§ãããèªåçã«é ã«åãããã«èª¿æ´
calc() ã®ãã 1 ã¤ã®ä½¿ç¨ä¾ã¯ãé©åãªãã¼ã¸ã³ãç¶æããªããããã©ã¼ã ãã£ã¼ã«ããã³ã³ããã¼ã®ç«¯ããã¯ã¿åºããã«ãå©ç¨å¯è½ãªç©ºéã«ç¢ºå®ã«åã¾ãããã«ãããã¨ã§ãã
ããããã® CSS ãè¦ã¦ã¿ã¾ãããã
input {
padding: 2px;
display: block;
width: calc(100% - 1em);
}
#form-box {
width: calc(100% / 6);
border: 1px solid black;
padding: 4px;
}
ããã§ããã©ã¼ã ã¯ã¦ã£ã³ãã¦ã®åãå¾ãå¹
ã® 1/6 ã使ãããã«æå®ãã¦ãã¾ãããããããå
¥åé
ç®ãå¿
ã妥å½ãªãµã¤ãºãæã¤ããã«å度 calc() ã使ããã³ã³ããã¼ã®å¹
- 1em ã®å¹
ã«ãªãããã«æå®ãã¾ããæ¬¡ã® HTML ã§ãã® CSS ã使ãã¾ãã
<form>
<div id="form-box">
<label>ä½ãå
¥å:</label>
<input type="text" id="misc" name="misc" />
</div>
</form>
å
¥ãåã® calc() 㨠CSS 夿°
calc() ã§ CSS 夿°ã使ç¨ãããã¨ãã§ãã¾ãã以ä¸ã®ã³ã¼ããè¦ã¦ã¿ã¦ãã ããã
.foo {
--width-a: 100px;
--width-b: calc(var(--width-a) / 2);
--width-c: calc(var(--width-b) / 2);
width: var(--width-c);
}
ãã¹ã¦ã®å¤æ°ãå±éãããå¾ã --width-c ã®å¤ã¯ calc(calc(100px / 2) / 2) ã«ãªãã¾ãããã®å¤ã .foo ã® width ããããã£ã«å²ãå½ã¦ãããã¨ããå
é¨ã«ãããã¹ã¦ã® calc() ã¯ï¼å
¥ãåã®æ·±ãã«ãããããï¼åãªãæ¬å¼§ã«ãªãã width ããããã£ã®å¤ã¯æçµçã« calc((100px / 2) / 2)ãããªãã¡ 25px ã«ãªãã¾ããè¦ããã«ã calc() ã®å
é¨ã«ãã calc() ã¯åãªãæ¬å¼§ã¨åçã§ãã
ç¸å¯¾è²ã«ãããè²ãã£ã³ãã«ã®èª¿æ´
calc() 颿°ã使ç¨ããã¨ãè²ãã£ã³ãã«å¤ã夿°ã¨ãã¦æ ¼ç´ããå¿
è¦ãªããç¸å¯¾è²ã®åã
ã®è²ãã£ã³ãã«ã調æ´ãããã¨ãã§ãã¾ãã
ä¾ãã°ãä¸è¨ã§ã¯æåã®æ®µè½ã§ <named-color> ã使ç¨ãã¦ãã¾ãã
ãã®å¾ã®æ®µè½ã§ã¯ calc() ã rgb() ããã³ hsl() 颿°ã¨çµã¿åããã¦ä½¿ç¨ãããã¨ã§ãå
ã®ååä»ãè²ã«å¯¾ããåè²ãã£ã³ãã«ã®å¤ãç¸å¯¾çã«èª¿æ´ãã¦ãã¾ãã
<p class="original">å
ã®ããã¹ãè²ã¯ rebeccapurple</p>
<p class="increase-hue">è²ç¸ã 80 å¢å </p>
<p class="increase-lightness">æåº¦ã 20 å¢å </p>
<p class="decrease-lightness">æåº¦ã 10 æ¸å°</p>
.original {
color: rebeccapurple;
}
.increase-hue {
color: lch(from rebeccapurple l c calc(h + 80));
}
.increase-lightness {
color: lch(from rebeccapurple calc(l + 20) c h);
}
.decrease-lightness {
color: lch(from rebeccapurple calc(l - 10) c h);
}
ç¸å¯¾è²ãå°ãåºãããã« calc() 颿°ã使ç¨ããä¾ã«ã¤ãã¦ã¯ãç¸å¯¾è²ã使ç¨ãããã¼ã¸ã®ãæ°å¦é¢æ°ã®ä½¿ç¨ãã®ç¯ãåç
§ãã¦ãã ããã
仿§æ¸
| 仿§æ¸ |
|---|
| CSS Values and Units Module Level 4 > # calc-func > |