clamp()関数より、まずmin()とmax()関数を

いろいろとclamp()関数を書いてみて、なかなか書きづらいことがわかった。対してmin()max()関数は、単なる比較に過ぎないためか、段違いに書きやすい。まずはmin()max()関数、そしてそれらのネストで書く。そして、差し替えられるものだけclamp()関数で書き直すと、頭の中を整理しながら書ける。

仕様でも触れられている通り、clamp(MIN, VAL, MAX)max(MIN, min(VAL, MAX))と等価だ。つまり、こういう入れ子が出てきたら初めて、clamp()関数に書き換えられる。

また、これらの関数を使うと、多くのメディア・クエリーを書き換えられる。メディア・クエリーでの値の上書きは、段階的な上昇(または下降)で、最も大きい(小さい)値を最大(小)値としたclamp()関数に書き換えられそうに見える。しかし、実際には、その多くがmin()max()関数の入れ子でしか書き換えられない。min-widthならmin()関数で、max-widthならmax()関数で書き換える、こう覚えることにした。