これは実験段階の機能です。
この機能は複数のブラウザで開発中の状態にあります。各ブラウザで用いるために、適切なベンダー接頭辞が必要な場合があります。互換性テーブルをチェックしてください。また、実験段階の機能の構文と挙動は、仕様変更に伴い各ブラウザの将来のバージョンで変更になる可能性があることに注意してください。
概要
CSS の calc()
関数は、<length>
、<frequency>
、<angle>
、<time>
、<number>
、<integer>
のいずれかの値を用いる場所ならどこでも使用可能です。 calc()
を用いる事により、対象のサイズや形状を決定する値の計算が可能となります。
calc()
内部で別の calc()
を用いる事も可能です。
構文
calc(expression)
値
- expression
<length>
値として使用される値の計算式。
式
式には以下の演算子を組み合わせた単純式を用いる事が出来ます。FIXME: mod、min、max についての記述が無い。
式のオペランドは任意の長さの構文値にする事ができます。また、異なる単位同士の計算(※例: calc(100% - 20px)
など)も可能です。計算順序は通常の四則演算に則っており、計算順序を決定する為に括弧を用いる事も出来ます。
+
演算子と -
演算子は常に前後に半角スペースをつけて記述しなければなりません。なぜなら 8px を引く意図で calc(50% -8px)
と記述した場合、 50%
と -8px
が並んでいるものとして解釈され、無効な式となるからです。 calc(50% - 8px)
としなければなりません。*
演算子と /
演算子には前後の半角スペースは必要ありませんが、これらにも半角スペースを用い記述ルールに一貫性を持たせておく事は認められており、推奨されています。例
余白をつけてオブジェクトを画面に配置する
calc()
はマージン設定を持つボックス配置を容易にします。この例では CSS でウィンドウを横切るように広がるバナーを作ります。バナーの両側とウィンドウの縁は 40ピクセル空けます。
.banner { position:absolute; left: 40px; width: 90%; /* calc()に非対応のブラウザ用 */ width: calc(100% - 80px); border: solid black 1px; box-shadow: 1px 2px; background-color: yellow; padding: 6px; text-align: center; }
<div class="banner">This is a banner!</div>
フォーム項目のコンテナへの自動フィット
calc()
のもう一つの用途は、フォーム項目のサイズ変更です。妥当なマージンを維持しながら、コンテナの縁を突き破らないように、利用できるスペースいっぱいに広げます。
いくつかの CSS を見てみましょう。
input { padding: 2px; display: block; width: 98%; /* calc()に非対応のブラウザ用 */ width: calc(100% - 1em); } #formbox { width: 130px; /* calc()に非対応のブラウザ用 */ 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>
仕様
仕様書 | 策定状況 | コメント |
---|---|---|
CSS Values and Units Module Level 3 The definition of 'calc()' in that specification. |
勧告候補 |
ブラウザ実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
基本サポート |
19 (WebKit 536.3) -webkit |
4.0 (2) -moz 16 (16) |
9 | - | 6 -webkit (buggy) |
gradient プロパティの位置指定での使用 | 19 (WebKit 536.3) -webkit 27 (おそらく26) |
19 (19) | 9 | - | 6 -webkit (buggy) |
機能 | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|
基本サポート | ? | 4.0 (2) -moz 16.0 (16) |
? | ? | ? |
gradient プロパティの位置指定での使用 | ? | 19.0 (19) | ? | ? | ? |