Để trả lời câu hỏi chung:
Có cách nào để làm cho CSS calc() không bao giờ là giá trị âm?
Câu trả lời là không, bởi vì CSS không cung cấp cách tự ràng buộc (hoặc kẹp) một số lượng với một số giá trị tối thiểu hoặc tối đa.
Có hoặc không một số hoặc độ dài có thể là nguyên bản bị hạn chế ở một phạm vi nhất định tùy thuộc vào thuộc tính có giá trị calc()
này. Từ số spec:
Giá trị kết quả từ biểu thức phải được kẹp vào phạm vi được phép trong ngữ cảnh đích.
Hai giá trị này tương đương với 'width: 0px' vì độ rộng nhỏ hơn 0px không được phép.
width: calc(5px - 10px);
width: 0px;
Ví dụ, trong khi giá trị âm cho margin
và z-index
có giá trị, giá trị âm cho border-width
, padding
, height
, width
và như vậy là không. Các chi tiết cụ thể trong số này hầu như luôn được định nghĩa trong đặc tả cho thuộc tính tương ứng.
Khi bạn tình cờ sử dụng đơn vị khung nhìn trong ví dụ của mình, bạn có thể sử dụng truy vấn phương tiện kết hợp với chúng dưới dạng demonstrated by fcalderan.
câu trả lời tuyệt vời tôi đã đưa ra nhận xét để thay đổi điều đó thành 'max-height', mà bạn đã làm trước khi tôi hiểu. Tôi không thể tin rằng tôi đã không nghĩ đến một truy vấn phương tiện truyền thông. – cmorrissey
@cmorrissey: Để công bằng, trường hợp sử dụng của bạn chỉ * xảy ra * để giới thiệu các đơn vị khung nhìn cho chính nó vào các truy vấn phương tiện. Nói chung, bạn chỉ đơn giản là không thể kẹp kết quả của một biểu thức calc() đến một phạm vi nhất định của các giá trị - CSS sẽ cần phải cung cấp một số hình thức min() và max() cho điều đó. – BoltClock
@BoltClock ngoại lệ sẽ xảy ra khi calc() đang tính toán chiều cao/chiều rộng để bạn có thể giới hạn với min/max-height/width (cũng không có truy vấn phương tiện), xem http://stackoverflow.com/a/35505372/1098851 – fcalderan