• HOME > 
  • CSS > 
  • CSSのclamp()・max()・min()の使い方【プロ...

CSSのclamp()・max()・min()の使い方【プロパティで使える便利な比較関数】

投稿日:

このページにはGoogleアドセンス広告とアフィリエイト広告が含まれています。

カテゴリー記事のアイキャッチ画像
広告
広告

clamp()・max()・min()とは?

clamp()・max()・min()はCSSのプロパティの値の指定に利用できる比較関数です。

これらの関数を用いると、複数の値を比較し1つの値を導きだしてくれます。つまり、プロパティ内で上限や下限を設定できるので、これまでレスポンシブ対応の為にメディアクエリなどを駆使して行っていた記述をひとまとめに軽減することが可能になります。

calc関数との違いは?

同じように値の部分で利用できる関数として、「calc」というものも存在します。

こちらは、clamp()・max()・min()のような比較ではなく、計算を行うための関数になります。

calcを用いるとCSS内で計算を行って、導き出された数値を値として指定することができるのでこちらも大変便利です。

主に横並びの要素の幅をレスポンシブ対応させたいときの指定に利用されます。

リンク先のサムネイル
CSSのcalc関数の使い方

calcを使えばCSS内で計算を行い、その計算から導き出された計算結果をプロパティの値に使用することができます。calcでは、演算子を使った四則演算(足し算、引き算、掛け算、割り算)が可能で...【もっと読む】

clamp()・max()・min()の対応ブラウザは?

clamp()・max()・min()は現時点で、Chrome、safari、Edge、Firefoxという主要ブラウザでサポートされています。

ほとんどのモダンブラウザで対応していますので安心して利用できます。

IEは非対応なので注意!

ただし、clamp()・max()・min()はインターネットエクスプローラーには対応していないので注意が必要です。とはいえ、IEそのものが現在ではサポートが終了していますのでこれらの関数は積極的に活用して問題はないと言えそうです。

min()の使い方

min()関数はコンマ区切りで並べた複数の値を比較し、その中から最小の値を返してくれます。

言い換えると、「最大値を指定したい時はmin()を使用する」ということになります。

min()の記述の仕方

min()関数は次のように書きます。

minの書き方

次の例を見ながら、min関数によってどのように値が決まるかを説明していきます。

HTML

<div class="sample">サンプル</div>

CSS

.sample{
    -省略-
    width:min(100%,600px);/*min()関数*/
}

min関数は値を比較して最小の値を導きだしてくれるので、この例では「100%」と「600px」を比べて小さい方がこの要素の横幅に設定されます。

この場合の「100%」とはウィンドウの横幅になりますので、状況によってpxに換算する数値が異なります。

仮に下図のようにウィンドウ幅が「800px」だった場合、「100%(=800px)」と「600px」を比較しますので、より小さい「600px」が要素の横幅として適用されます。これが最大値となります。

minの使用例

仮に下図のようにウィンドウ幅が「500px」だった場合、「100%(=500px)」と「600px」を比較しますので、より小さい「100%(=500px)」が適用され、要素の幅は「100%(=500px)」となります。

minの使用例

このようにして、min()関数を用いれば要素の最大値を設定することができます。

従来であれば「widthとmax-width」を用いて設定していたものになりますが、min()関数を使えば一行にまとめることが可能になります。

max()の使い方

max()関数はコンマ区切りで並べた複数の値を比較し、その中から最大の値を返してくれます。

言い換えると、「最小値を指定したい時はmax()を使用する」ということになります。

max()の記述の仕方

max()関数は次のように書きます。

maxの書き方

次の例を見ながら、max関数によってどのように値が決まるかを説明していきます。

HTML

<div class="sample">サンプル</div>

CSS

.sample{
    -省略-
    width:max(100%,600px);/*max()関数*/
}

max関数は値を比較して最大の値を導きだしてくれるので、この例では「100%」と「600px」を比べて大きい方がこの要素の横幅に設定されます。

この場合も「100%」とはウィンドウの横幅になりますので、状況によってpxに換算する数値が異なります。

仮に下図のようにウィンドウ幅が「500px」だった場合、「100%(=500px)」と「600px」を比較しますので、より大きい「600px」が要素の横幅として適用されます。これが最小値になります。

maxの使用例

仮に下図のようにウィンドウ幅が「800px」だった場合、「100%(=800px)」と「600px」を比較しますので、より大きい「100%(=800px)」が適用され、要素の幅は「100%(=800px)」となります。

maxの使用例

このようにして、max()関数を用いれば要素の最小値を設定することができます。

従来であれば「widthとmin-width」を用いて設定していたものになりますが、max()関数を使えば一行にまとめることが可能になります。

clamp()の使い方

clamp()関数は、最小値と最大値に加えて推奨値と呼ばれる値を設定します。

推奨値に相対的な数値を指定しておくことで、最小値を下回った時は最小値が適用され、最大値を超えたときは最大値が適用、その範囲の間であれば推奨値が適用されるようにできます。

clamp()関数の記述の仕方

clamp()関数は次のように記述します。

clampの書き方

次の例を見ながら、clamp関数によってどのように値が決まるかを説明していきます。

HTML

<div class="sample">サンプル</div>

CSS

.sample{
    -省略-
    width:clamp(600px,100%,800px);/*clamp()関数*/
}

ここでは、最小値に600px、推奨値に100%、最大値に800pxを指定しました。

要素は最小値である600pxを下回ることはありません。

clampの最小値

600pxを超えたら推奨値である100%が適用され続けるので、要素の幅=ウィンドウの幅になります。

clampの推奨値

そして要素は最大値である800pxを上回ることはありません。

clampの最大値

このようにclamp関数を用いると上限と下限の間でフレキシブルに値を指定することができます。

clamp()・max()・min()で演算子を使って計算する

clamp()・max()・min()の中では、calc関数と同様に演算子を用いて計算処理を行わせることもできます。

加算には「+」、減算は「-」、乗算には「*」、除算には「/」を使用します。

CSS

.sample{
    -省略-
    width:clamp(600px,100% - 10px,800px);/*clamp()関数*/
}

このように計算式を組み込むことで、推奨値には常に100%から10pxを差し引いた値が設定されます。

clamp()・max()・min()の活用方法

これらの関数の最大の特徴は、幅の指定以外にも使えるという点です。

幅や高さの上限や下限はmax-widthやmin-heightプロパティが存在しましたが、font-sizeやmarginなどでは最大値や最小値を設定することができませんでした。

clamp()・max()・min()をうまく応用してそれらのプロパティの値に上限や下限を設ければ、よりレスポンシブなサイトを作ることができるはずです。

safariでclamp()が効かないときは?

主要ブラウザでサポートされているはずのclampですが、なぜかsafariで正しく動作しないことがあるようです。

そのような場合はmin-heightに0vwを指定すれば解決するようなので試してみて下さい。

CSS

*{
    min-height:0vw/*clamp()がsafariで使えない時用*/
}

まとめ

以上がclamp()・max()・min()の使い方です。

メディアクエリ一辺倒でレスポンシブ対応を行うよりも、こうした関数を活用して簡潔に書いた方が効率的なだけでなく、修正もしやすいうえ、コードも見やすくなるのでミスも軽減されるはずです。

広告
広告

関連する記事

サムネイル

CSSの疑似クラスnth-childとnth-of-type……

2024年11月07日
疑似クラスnth-childとnth-of-typeについて CSSの疑似クラス「:nth-child」と「:nth-of-type」はどちらも何番目の要素とい […]
サムネイル

CSSのみでスムーススクロールを実装する【scroll-be……

2024年08月01日
スムーススクロールはCSSだけで実装できる? これまでスムーススクロールはJavaScriptで実装するものと思い込んでいたのですが、先日ふとしたきっかけで、C […]
サムネイル

CSSのinline-flexの使いどころ【flexによる横……

2024年05月29日
inline-flexはCSSのdisplayプロパティの値の一つで、横並びレイアウトを作ることができる「flex」にインライン効果を持たせた性質があります。
サムネイル

CSSのセレクターで前方一致や部分一致を使って指定する方法

2024年05月16日
CSSでは属性の値を前方一致や部分一致でセレクターに指定できます。IDやクラス以外のhrefといった属性値であれば指定できるので、例えばリンク先ごとに処理を変えることも可能です。
サムネイル

CSSでテーブルの先頭行や先頭列を固定する方法【sticky……

2024年04月12日
CSSのpositionプロパティの「sticky」を使えば、CSSだけでテーブルの行も列も簡単に固定することができるのでご紹介します。情報量の多い表を作る場合は、スクロールした時に項目名などの行や列は固定させておいたほうが見やすくなります。
サムネイル

CSSのwhite-spaceプロパティの使い方【半角スペー……

2024年03月07日
SSのwhite-spaceは、テキストにおける半角スペース・改行・タブの扱いと折り返しの有無を設定するプロパティです。
サムネイル

CSSのメディアクエリでスマホでのホバーの挙動の対策を行う【……

2023年10月01日
最終更新日:2023年09月28日
要素をタップしたときにホバー時のスタイルが適用され続けるという経験はありませんか?CSSだけで簡単にスマホでの疑似要素「hover」の挙動の対策を行う方法をご紹介します。