2016-02-24 35 views

Trả lời

15

Premising rằng không có cách nào để bị ràng buộc các giá trị tính bằng calc() bạn có thể sử dụng một mediaquery khi max-height là tại hầu hết các 650px

.my-margin-top { 
    margin-top: calc(50vh - 325px); 
} 

@media all and (max-height: 650px) { 
    .my-margin-top { 
     margin-top: 0; 
    } 
} 

hoặc bạn cũng có thể phục hồi các logic bằng cách gói các quy tắc hiện vào a min-height mediaquery

@media all and (min-height: 650px) { 
    .my-margin-top { 
     margin-top: calc(50vh - 325px); 
    } 
} 
+0

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

+2

@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

+0

@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

3

Để 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 marginz-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ác vấn đề liên quan