CSSで%での指定と、Pixelでの指定を組み合わせて設定したい - calc関数の利用 - CSS

CSSのcalc関数を利用について紹介します。

概要

CSSで枠の幅などを設定する際に、%での指定と、Pixelでの指定を組み合わせて設定したい場合があります。calc関数を利用することで単位の違う値を演算してCSSのプロパティに指定することができます。

書式

calc(値 - 値)
calc(値 + 値)
注意
値と値の間の"-" "+" 記号の間には " " を入れて開ける必要があります。

calcを利用したCSS例1

下図の枠を作成することを考えます。ページ幅いっぱいの枠で左右に32pixelの余白がある枠です。


calc関数を使用しない実装では、枠のwidthを100%に設定し、margin-left, margin-right に32px を設定すると同様の枠が作成できますが、今回はmarginの相殺が発生する状況でmarginが利用できない想定として、widthプロパティのみを設定して上図の枠を作成します。

コード

下記のコードを記述します。
calc01.css
body {
    text-align:center;
}

.frame {
    width: calc(100% - 64px);
    margin-left: auto;
    margin-right: auto;
    background-color: #fff09b;
    height:96px;
}
calc01.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link rel="stylesheet" href="calc01.css"/>
</head>
<body>
  <div class="frame">
      枠です。
  </div>
</body>
</html>

解説

CSSの下記コードがcalc関数を利用した設定になります。今回の例では左右に32pixelの余白をとるため、枠の幅は100%から左右の32pixelの余白の合計64pixelを引いた値に設定します。
  width: calc(100% - 64px);

margin-left, margin-right の値をautoに設定することで枠を中央に配置できます。
  margin-left: auto;
  margin-right: auto;

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。黄色の枠が表示されます。左右に32pixelの余白がとられていることが確認できます。


ウィンドウの横幅を小さくします。枠の幅はウィンドウの幅に合わせて縮小しますが、余白の32pixelは縮小されず、幅は固定されたままです。


calcを利用したCSS例2 (段組みの例)

下図の枠を作成することを考えます。120pixelの左枠があり、残りの幅が右枠になります。左右に32pixelの余白があるページです。


calc関数を使用しない実装では、両方の枠の幅を%で指定するか、枠全体の幅を固定の幅とすると実装できます。片方の枠をpixel指定して、残りをページの残り幅全体とするのは難しいです。

コード

下記のコードを記述します。
calc02.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link rel="stylesheet" href="calc02.css"/>
</head>
<body>
  <div class="LeftFrame">
    左側の枠です。
  </div>
  <div class="RightFrame">
    右側の枠です。
  </div>
</body>
</html>
calc02.css
body {
    text-align:center;
    margin:0;
    padding:0;
}

.LeftFrame {
    width: 120px;
    margin-left: 32px;
    float: left;
    height: 96px;
    background-color: #ffcdcd;
}

.RightFrame {
    width: calc(100% - 32px - 32px - 120px);
    float: left;
    height: 96px;
    background-color: #c9f3b6;
}

解説

今回の例では左側の枠(LeftFrame)は左に32pixelの余白をとり、幅を120pixelとします。またfloat:left を指定し段組みとします。
.LeftFrame {
    width: 120px;
    margin-left: 32px;
    float: left;
    height: 96px;
    background-color: #ffcdcd;
}

右側の枠(RightFrame)はwidthプロパティをcalc関数を用いて指定しています。全体の幅100%から、左側のマージン32pixel, 右側のマージン32pixel, 左側の枠の幅120pixel を引いた値を右側の枠の幅として指定しています。
.RightFrame {
    width: calc(100% - 32px - 32px - 120px);
    float: left;
    height: 96px;
    background-color: #c9f3b6;
}

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図の画面が表示されます。2段組み表示になっており、ページ左右の32pixelの余白もあります。


ページの幅を縮小すると右側の枠の大きさが小さくなり、ページ幅に合わせてリサイズされることも確認できます。


このページのキーワード
  • CSS calc 関数
著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
掲載日: 2017-12-18
iPentec all rights reserverd.