自適應寬度是指當未明確設定容器的寬度(或外邊距設為auto)時,在特定的情況下容器的寬度會根據情況自行設定,而設定的結果往往不是我們想要的。
10.3.5 Floating, non-replaced elements
10.3.7 Absolutely positioned, non-replaced elements
10.3.8 Absolutely positioned, replaced elements
規格中提到了一個基本概念,我們先來了解一下。
replaced elements & non-replaced elements
css把html元素分為了兩類:不可替換元素和可替換元素。
:
CSS 裡,可替換元素是這樣一些元素, 其展現不是由CSS來控制的。這些外在元素的展現不依賴CSS規範。 典型的可替換元素有 img、 object、 video 以及 textarea、input這樣的表單元素。 有些元素,如audio和 canvas ,只在一些特殊情況下是可替換元素。 使用了 CSS content 屬性插入的物件被稱為匿名的可替換元素。
html&css<pre class="brush:html;toolbar:false;"><!DOCTYPE html>
<html>
<style type="text/css">
.outer {
width: 800px;
background: black;
overflow: hidden;
}
.inner {
float: left;
background: red;
}
.sub1 {
width: 26%;
background: blue;
}
.sub2 {
width: 50%;
background: green;
}
</style>
<head>
</head>
<body>
<p class="outer">
<p class="inner">
<p class="sub1">
this is 1th line this is 2th line this is 3th line this is 4th line
</p>
<p class="sub2">
sub2 block
</p>
</p>
</p>
</body>
</html></pre>
這段樣式定義了一個outer容器,背景為黑色且寬度為800px,它裡面還有一個內部容器inner,無寬度且左浮動,inner裡有兩個小塊sub1和sub2。
先看效果圖再回答:
#結果應該會出乎你的意料:inner (紅色背景)的寬度並不是outer(黑色背景)的寬度(正常情況下應該可以
父容器的寬度),因而sub1和sub2比我們預想的要小得多。
繼承
再回答這個問題之前,我們先試著修改一下,看看能否從中找到出現這個問題的原因。經過
調試,發現兩個最簡單的方案可以解決這個問題:#1.給inner加寬度width: 100%;
解決後的效果如下:
這裡有三個參數,分別是:preferred minimum width, available width, preferred width.只需關心preferred width的計算方式即可,preferred width的計算方式如下:
讓元素內容強制不換行後的最大寬度即為shrink-to-fit後的寬度
具體拿上面的例子,inner中的sub1的內容由於寬度不夠被換行了,將其強制不換行算出的寬度就是inner自適應的寬度(inner本身沒設寬度喔~),如何強制不換行也很簡單,慢慢的將sub1的寬度調大,就會發現調至100%時恰好足夠用一行來現實其內容,這時內容的寬度就是inner自適應後的寬度。直接上圖:
#總結:對於浮動或特殊的定位方式,建議明確的設定容器寬度,避免意想不到的結果
查看Blog原文請戳此處
【相關推薦】
##1. 2. #3.以上是分享Shrinktofit(自適應寬度)的用法和實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!