HTML原生就是響應式的(HTML內容在視口內流式的分佈)。隨著CSS的廣泛應用,設計者創建了許多固定佈局的“盒子”並把內容強制的放在盒子之中,這有悖於HTML原生響應的特性。 ...
前言
設計師可以分為如下兩類:
- 先做好設計,然後將內容放入靜態框架中
- 優秀的設計師充分考慮內容的各個方面及其上下文,並創建適合於內容的設計
HTML原生就是響應式的(HTML內容在視口內流式的分佈)。隨著CSS的廣泛應用,設計者創建了許多固定佈局的“盒子”並把內容強制的放在盒子之中,這有悖於HTML原生響應的特性。
過去幾年出現了一場革命,包括自適應設計,響應式設計,移動優先設計等。所有這些思想最根本部分就是優先考慮內容。CSS3也因此定義和實現一些新的屬性。其中就包括內在和外在的寬度(intrinsic and extrinsic width values)。
引入問題
我們以一個常規的 WEB 頁面設計問題(figure
元素內的圖片)來引出問題並加以說明。
<figure>
<img src="o4iaq1g8nr.jpg" />
<figcaption>www.30ke.cn</figcaption>
<p>三十客 - 一個專註於前端學習和分享的網站。</p>
</figure>
因為figure
是塊級標記,所以元素一直延伸到至整個容器中。 在以內容優先的設計中,我們通常希望容器 (本例中為 figure
元素) 儘可能小。 到目前為止,有幾種方法可以實現。
figure {
float: left;
}
通過設置浮動,可以實現 figure
元素摺疊。但是如果 figure
中的 p
(段落)元素寬於圖片寬度,則figure
元素會收縮至最寬的子元素,而不是圖片的寬度。
使用display: inline-block
或 table-cell
同樣有上述問題。
figure {
width: 500px;
}
將 figure
元素寫死一個寬度,但這使得元素固定並失去響應特性。
用 min-width
來幫忙
我們最終就是要找到最優的圖片容器的寬度以最達到最好的適應內部圖片的目的。如果內部的文本換行顯示也沒關係。
我們可以通過 min-content
來達到目的。儘管該值 2006 年就出現了,但還處在實驗階段,因此需要添加不同瀏覽器首碼。
figure {
border: 2px solid black;
background: #cae9b8;
margin: 0;
width: -moz-min-content;
width: -webkit-min-content;
width: min-content;
}
上述代碼,很好的解決了上述問題。而且 margin
和 padding
在圖片容器內部仍然有效。
min-content
是內在和外在的寬高系列值中的一個,其它還包括 max-content
, fit-content
等。這些值和 flexbox
,grid
和其它佈局系統,使得WEB設計更優秀更靈活。
min-content
的支持性很好,所有現代主流瀏覽器都支持該值,但是 Internet Explorer
and Opera Mini
並不支持。
因此我們藉助 max-widht
實現了回退的方案。
figure {
max-width: 500px;
max-width: min-content;
}
完整的帶回退的顯示方案見如下演示程式:
本文主要彙編自 Dudley Storey 的一篇博客,並加入了針對Internet Explorer
and Opera Mini
的回退方案。但是因為本人水平有限,文中難免存在描述不清,代碼不完善等問題,還請大家多多予以批評指正!
參考文獻
CSS Intrinsic & Extrinsic Sizing Module Level 3
Design From the Inside Out With CSS Min-Content
play.csssecrets.io/