1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

calc cssについて

Last updated at Posted at 2022-06-14

概要

実務でフロント側を書いていたらなんだこれってものがあったのでメモをしておく

calcとは

cssの関数です。
とは言っても、これだけじゃわからないですよね。
calcを使うことでpxとemとremなどの相対単位を計算できてしまうんです。

使い方

例1

.sample {
    width: calc(100px + 50px);
}

これの場合は勿論sampleクラスのwidthは150pxになります。
例2

width: calc(100% - 80px);

こちらは横画面いっぱいから80px引いた値になります。

例3

width: calc(100% - 1em);

こちらは横画面いっぱいから1em引いた値になります。

例4

.modal {
  z-index: calc(3 / 2);
}

calcは整数のみを扱うためこの様に割り切れない場合は、近似値の2となります
また、Chromでは割り算の場合は計算結果が整数になっても使用できません。

例5

.foo {
  --widthA: 100px;
  --widthB: calc(var(--widthA) / 2);
  --widthC: calc(var(--widthB) / 2);
  width: var(--widthC);
}

こちらの値はwidth:25pxになります。
余談ですが、CSSでは先頭に--をつけることで変数として扱うことができます。
各セレクタに定義してもいいのですが下記の様に:rootとすることでグローバル変数の様に扱うこともできる。

:root {
  --widthA: 100px;
  --widthB: calc(var(--widthA) / 2);
  --widthC: calc(var(--widthB) / 2);
  width: var(--widthC);
}

応用的な使い方

親コンテナの幅を1/6にしたい場合

.foo {
    width: 16.666666667%;
}

こちらの方が何をしたいか分かり易い

.foo {
    width: calc(100% / 6);
}

また、scssで書いた場合、ブラウザでコンパイルされると計算結果だけが反映される

// SCSSで指定された値
.foo {
    width: 100px + 50px;
}
 
// ブラウザでCSSと計算値をコンパイル
.foo {
    width: 150px;
}

しかし、calcを使うとブラウザに計算式ごと渡される
これはブラウザにおける値がより動的になり、ビューポートの変更に合わせて適応できる


// CSSで指定された値
.foo {
    width: calc(100% - 50px);
}
 
// ブラウザの計算値
.foo {
    width: calc(100% - 50px);
}

最後に

今回のことを知ってCSSは改めて奥が深いと感じた

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?