Apakah mungkin melakukan sesuatu seperti ini
max-width: calc(max(500px, 100% - 80px))
atau
max-width: max(500px, calc(100% - 80px)))
di CSS?
Apakah mungkin melakukan sesuatu seperti ini
max-width: calc(max(500px, 100% - 80px))
atau
max-width: max(500px, calc(100% - 80px)))
di CSS?
Jawaban:
min(),, max()dan clamp()akhirnya tersedia!
Mulai di Firefox 75, Chrome 79, dan Safari 11.1 (kecuali clamp).
min()dan max()mengambil sejumlah argumen.
clamp()memiliki sintaks clamp(MIN, VAL, MAX)dan setara dengan max(MIN, min(VAL, MAX)).
min()dan max()mungkin bersarang. Mereka dapat digunakan di dalam calc()maupun di luarnya, mereka juga mungkin berisi ekspresi matematika, yang berarti Anda dapat menghindarinya calc()saat menggunakannya.
Oleh karena itu contoh aslinya dapat ditulis sebagai:
max-width: max(500px, 100% - 80px);
Solusi css 'murni' sebenarnya sekarang dimungkinkan dengan menggunakan kueri media:
.yourselector {
max-width: calc(100% - 80px);
}
@media screen and (max-width: 500px) {
.yourselector {
max-width: 500px;
}
}
max-height+1
Tidak Anda tidak bisa. max()dan min()telah dihapus dari CSS3 Values and Units. Namun, mereka dapat diperkenalkan kembali dalam Nilai dan Unit CSS4 . Saat ini tidak ada spesifikasi untuk mereka, dan calc()spesifikasi tidak menyebutkan bahwa keduanya valid di dalam suatu calc()fungsi.
Solusinya adalah menggunakan widthdirinya sendiri.
max-width: 500px;
width: calc(100% - 80px);
500pxatau 100% - 80px. Solusi Anda membatasi lebar maksimal 500pxbahkan jika 100% - 80pxlebih besar.
min()karena itu mungkin membantu orang lain.
Meskipun jawaban @ david-mangold di atas "hampir" ternyata salah.
(Anda dapat menggunakan solusinya jika Anda menginginkan lebar minimum , bukan lebar maksimum ).
Solusi ini mendemonstrasikan bahwa komentar @ gert-sønderby untuk jawaban itu berhasil:
Jawabannya seharusnya menggunakan min-width, bukan max-width.
Ini yang seharusnya dikatakan:
min-width: 500px;
width: calc(100% - 80px);
Ya, gunakan min-width plus width untuk meniru fungsi max () .
Berikut codepennya (lebih mudah untuk melihat demo di CodePen, dan Anda dapat mengeditnya untuk pengujian Anda sendiri).
.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>
Yang mengatakan, jawaban @ andy di atas mungkin lebih mudah untuk alasan tentang, dan mungkin lebih tepat dalam banyak kasus penggunaan.
Perhatikan juga, bahwa pada akhirnya a max()dan min()fungsi dapat diperkenalkan ke CSS, tetapi mulai April 2019 ini bukan bagian dari spesifikasi.
Di sini Anda dapat memeriksa max()kompatibilitas Browser:
https://developer.mozilla.org/en-US/docs/Web/CSS/max#Browser_compatibility .
Berikut adalah draf proposalnya:
https://drafts.csswg.org/css-values-4/#comp-func .
Scroll ke atas halaman untuk melihat tanggal revisi terakhir (Sampai hari ini, terakhir direvisi pada 5 April 2019).
@Amaud Apakah ada alternatif untuk mendapatkan hasil yang sama?
Ada pendekatan css murni non-js yang akan mencapai hasil serupa. Anda perlu menyesuaikan padding / margin wadah elemen induk.
.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>