Có thể làm điều gì đó như thế này không
max-width: calc(max(500px, 100% - 80px))
hoặc là
max-width: max(500px, calc(100% - 80px)))
trong CSS?
Có thể làm điều gì đó như thế này không
max-width: calc(max(500px, 100% - 80px))
hoặc là
max-width: max(500px, calc(100% - 80px)))
trong CSS?
Câu trả lời:
min()
, max()
và clamp()
cuối cùng đã có sẵn!
Bắt đầu từ Firefox 75, Chrome 79 và Safari 11.1 (ngoại trừ clamp
).
min()
và max()
lấy bất kỳ số đối số nào.
clamp()
có cú pháp clamp(MIN, VAL, MAX)
và tương đương với max(MIN, min(VAL, MAX))
.
min()
và max()
có thể được lồng vào nhau. Chúng có thể được sử dụng trong calc()
cũng như bên ngoài nó, chúng cũng có thể chứa các biểu thức toán học, điều đó có nghĩa là bạn có thể tránh calc()
khi sử dụng chúng.
Do đó, ví dụ ban đầu có thể được viết là:
max-width: max(500px, 100% - 80px);
Một giải pháp css 'thuần túy' thực sự hiện có thể sử dụng các truy vấn phương tiện:
.yourselector {
max-width: calc(100% - 80px);
}
@media screen and (max-width: 500px) {
.yourselector {
max-width: 500px;
}
}
max-height
+1
Không, bạn không thể. max()
và min()
đã bị loại khỏi Giá trị và Đơn vị CSS3. Tuy nhiên, chúng có thể được giới thiệu lại trong Giá trị và Đơn vị CSS4 . Hiện tại không có thông số kỹ thuật cho chúng và calc()
thông số kỹ thuật không đề cập đến việc một trong hai hàm này hợp lệ trong một calc()
hàm.
Một giải pháp thay thế sẽ là sử dụng width
chính nó.
max-width: 500px;
width: calc(100% - 80px);
500px
hoặc 100% - 80px
. Giải pháp của bạn giới hạn chiều rộng tối đa cho 500px
dù 100% - 80px
lớn hơn.
min()
do đó có thể hữu ích cho người khác.
Trong khi câu trả lời của @ david-mangold ở trên , là "gần" thì nó không chính xác.
(Bạn có thể sử dụng giải pháp của anh ấy nếu bạn muốn chiều rộng tối thiểu , thay vì chiều rộng tối đa ).
Giải pháp này chứng minh rằng bình luận @ gert-sønderby cho câu trả lời đó hoạt động:
Câu trả lời lẽ ra nên sử dụng min-width
, không phải max-width
.
Đây là những gì nó đáng lẽ phải nói:
min-width: 500px;
width: calc(100% - 80px);
Có, sử dụng chiều rộng tối thiểu cộng với chiều rộng để mô phỏng hàm max () .
Đây là codepen (dễ dàng hơn để xem bản demo trên CodePen và bạn có thể chỉnh sửa nó để thử nghiệm của riêng mình).
.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>
Điều đó nói rằng, câu trả lời của @ andy ở trên có thể dễ dàng hơn để suy luận và có thể phù hợp hơn trong nhiều trường hợp sử dụng.
Cũng lưu ý rằng cuối cùng a max()
và một min()
hàm có thể được đưa vào CSS, nhưng kể từ tháng 4 năm 2019, nó không phải là một phần của thông số kỹ thuật.
Tại đây, bạn có thể kiểm tra max()
khả năng tương thích của Trình duyệt:
https://developer.mozilla.org/en-US/docs/Web/CSS/max#Browser_compatibility .
Đây là bản nháp của đề xuất:
https://drafts.csswg.org/css-values-4/#comp-func .
Cuộn lên đầu trang để xem ngày sửa đổi cuối cùng (Tính đến hôm nay, ngày sửa đổi lần cuối vào ngày 5 tháng 4 năm 2019).
@Amaud Có giải pháp thay thế nào để có cùng kết quả không?
Có một cách tiếp cận css thuần túy không phải js sẽ đạt được kết quả tương tự. Bạn sẽ cần điều chỉnh padding / margin vùng chứa phần tử gốc.
.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>