--- title: calc() slug: Web/CSS/calc() tags: - CSS - CSS 値と単位 - CSS 関数 - calc - ウェブ - リファレンス - レイアウト translation_of: Web/CSS/calc() ---
CSS の calc()
関数は、 CSS のプロパティ値を指定する際に計算を行うことができるものです。 {{cssxref("<length>")}}, {{cssxref("<frequency>")}}, {{cssxref("<angle>")}}, {{cssxref("<time>")}}, {{cssxref("<percentage>")}}, {{cssxref("<number>")}}, {{cssxref("<integer>")}} が利用できる場所ならば使用できます。
/* プロパティ: calc(式) */ width: calc(100% - 80px);
calc()
関数は1つの式を引数として取り、式の結果が値として使用されます。式は以下の演算子を組み合わせたもので、標準的な演算子の優先順位の規則を使用します。
+
-
*
/
式のオペランドは任意の {{cssxref("<length>")}} 構文の値にすることができます。式の中のそれぞれの値に異なる単位を使用することもできます。必要に応じて、計算の順番を設定するために括弧を使用することもできます。
+
演算子と -
演算子は前後に空白文字をつける必要があります。たとえば、 calc(50% -8px)
と記述した場合、パーセント表記と負の長さが連続しているものとみなされ、無効な式となるからです。 calc(50% - 8px)
はパーセント表記、減算記号、長さの順に並んでいるものと解釈されます。また、 calc(8px + -50%)
は長さ、加算記号、負のパーセント表記の順に並んでいるものと解釈されます。*
演算子と /
演算子には前後の空白文字は必要ありませんが、こちらにも空白文字を用い記述ルールに一貫性を持たせておくことは認められており、推奨されています。auto
が指定されたものとして扱います。calc()
関数を入れ子にすることは許可されており、内側のものは単なる括弧として扱われます。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>
{{EmbedLiveSample('Positioning_an_object_on_screen_with_a_margin', 'auto', '60')}}
calc()
はフォーム要素のサイズ変更にも利用できます。適切なマージンを維持しながら、コンテナの縁を突き破らないように、利用できるスペースいっぱいに広げます。
いくつかの CSS を見てみましょう。
input { padding: 2px; display: block; width: calc(100% - 1em); } #formbox { width: calc(100% / 6); border: 1px solid black; padding: 4px; }
ここで、フォームはウィンドウの取り得る幅の1/6を使うように指定しています。それから、入力項目が必ず妥当なサイズを持つように再度 calc()
を使い、コンテナーの幅 - 1em の幅になるように指定します。次の HTML でこの CSS を使います。
<form> <div id="formbox"> <label>Type something:</label> <input type="text"> </div> </form>
{{EmbedLiveSample('Automatically_sizing_form_fields_to_fit_their_container', '700', '80')}}
calc()
と CSS 変数calc()
で CSS 変数を使用することもできます。以下のコードを見てみてください。
.foo { --widthA: 100px; --widthB: calc(var(--widthA) / 2); --widthC: calc(var(--widthB) / 2); width: var(--widthC); }
すべての変数が展開された後、 widthC
の値は calc( calc( 100px / 2) / 2)
になります。この値が .foo の width プロパティに割り当てられるとき、内部にあるすべての calc()
は (入れ子の深さにかかわらず) 単なる括弧になり、width
プロパティの値は最終的に calc( ( 100px / 2) / 2)
、すなわち 25px
になります。要するに、calc()
の内部にある calc()
は単なる括弧と同等です。
calc()
をテキストの大きさを制御するために使用するとき、値の一つに相対的な長さの単位を含むことを確認してください。
h1 { font-size: calc(1.5rem + 3vw); }
これによって、ページが拡大縮小されたときにテキストの寸法が拡大縮小されます。
仕様書 | 状態 | 備考 |
---|---|---|
{{SpecName('CSS3 Values', '#calc-notation', 'calc()')}} | {{Spec2('CSS3 Values')}} | 初回定義 |
{{Compat("css.types.calc")}}