回答:
min()
、max()
、そしてclamp()
最終的には利用可能です!
Firefox 75、Chrome 79、およびSafari 11.1以降(を除くclamp
)。
min()
そしてmax()
任意の数の引数を取ります。
clamp()
構文がclamp(MIN, VAL, MAX)
あり、と同等max(MIN, min(VAL, MAX))
です。
min()
そしてmax()
入れ子にすることができます。それらはcalc()
、その内部だけでなく外部でも使用できます。また、数式が含まれている場合がありcalc()
ます。つまり、それらを使用しないようにすることができます。
したがって、元の例は次のように書くことができます。
max-width: max(500px, 100% - 80px);
いいえ、あなたがすることはできません。max()
そして、min()
CSS3値と単位から削除されています。ただし、CSS4の値と単位で再導入される場合があります。現在、それらのcalc()
仕様はありません。仕様では、calc()
関数内でも有効であることは言及されていません。
回避策は、width
それ自体を使用することです。
max-width: 500px;
width: calc(100% - 80px);
500px
かを100% - 80px
。ソリューションでは、最大幅がより大きくて500px
も制限されます100% - 80px
。
min()
ので、他の人に役立つかもしれません。
一方で上記@デビッド・マンゴールドの答え、それは間違っていた「クローズ」でした。
(あなたは、することができますしたい場合は、彼のソリューションを使用する最小幅の代わりに、最大幅)。
このソリューションは、その回答に対する@gert-sønderbyコメントが機能することを示しています
。回答ではmin-width
なく、max-width
。
これはそれが言っていたはずです:
min-width: 500px;
width: calc(100% - 80px);
はい、min-width + widthを使用してmax()をエミュレートします関数ます。
これがコードペンです(CodePenでデモを見るのが簡単で、独自のテスト用に編集できます)。
.parent600, .parent500, .parent400 {
height: 80px;
border: 1px solid lightgrey;
}
.parent600 {
width: 600px;
}
.parent500 {
width: 500px;
}
.parent400 {
width: 400px;
}
.parent600 .child, .parent500 .child, .parent400 .child {
min-width: 500px;
width: calc(100% - 80px);
border: 1px solid blue;
height:60px;
}
.ruler600 {
width: 600px;
border: 1px solid green;
background-color: lightgreen;
height: 20px;
margin-bottom: 40px;
}
.width500 {
height: 20px;
width: 500px;
background-color: lightyellow;
float: left;
}
.width80 {
height: 20px;
width: 80px;
background-color: green;
float: right;
}
.parent600 .wrong, .parent500 .wrong, .parent400 .wrong {
max-width: 500px;
width: calc(100% - 80px);
border: 1px solid red;
height:60px;
}
<h2>(Min) min-width correctly gives us the Larger dimension: </h2>
<div class="parent600">
600px parent
<div class="child">child is max(500px, 600px - 80px) = max(500px, 520px) = 520px</div>
</div>
<div class="ruler600"><div class="width500">500px</div>20<div class="width80">80px</div></div>
<div class="parent500">
500px parent
<div class="child">child is max(500px, 500px - 80px) = max(500px, 420px) = 500px</div>
</div>
<div class="ruler600"><div class="width500">500px</div><div class="width80">80px</div></div>
<div class="parent400">
400px parent (child expands to width of 500px)
<div class="child">child is max(500px, 400px - 80px) = max(500px, 320px) = 500px</div>
</div>
<div class="ruler600"><div class="width500">500px</div><div class="width80">80px</div></div>
<h2>(Max) max-width <em>incorrectly</em> gives us the Smaller dimension: </h2>
<div class="parent400">
400px parent
<div class="wrong">child is min(500px, 400px - 80px) = min(500px, 320px) = 320px</div>
</div>
<div class="ruler600"><div class="width500">500px</div><div class="width80">80px</div></div>
<div class="parent500">
500px parent
<div class="wrong">child is min(500px, 500px - 80px) = min(500px, 420px) = 420px</div>
</div>
<div class="ruler600"><div class="width500">500px</div><div class="width80">80px</div></div>
<div class="parent600">
600px parent
<div class="wrong">child is min(500px, 600px - 80px) = min(500px, 520px) = 500px</div>
</div>
<div class="ruler600"><div class="width500">500px</div>20<div class="width80">80px</div></div>
そうは言っても、上記の@andyの答えとはいえ、理由を説明するのが簡単で、多くのユースケースでより適切な場合があります。
また、最終的に a max()
とmin()
関数がCSSに導入される可能性がありますが、2019年4月の時点では仕様の一部ではありません。
ここで、max()
ブラウザの互換性を確認できます:
https : //developer.mozilla.org/en-US/docs/Web/CSS/max#Browser_compatibility。
これがプロポーザルのドラフトです:
https : //drafts.csswg.org/css-values-4/#comp-func。
ページの上部までスクロールして、最終改訂日を確認します(本日現在、最終改訂日は2019年4月5日です)。
@Amaud 同じ結果を得るための代替手段はありますか?
同様の結果を達成する非JavaScriptの純粋なCSSアプローチがあります。親要素のコンテナのパディング/マージンを調整する必要があります。
.parent {
padding: 0 50px 0 0;
width: calc(50%-50px);
background-color: #000;
}
.parent .child {
max-width:100%;
height:50px;
background-color: #999;
}
<div class="parent">
<div class="child"></div>
</div>