在美團面試的時候遇到過這樣一個小問題:面試
Q:你知道行內元素和塊級元素有什麼區別嗎?ide
A:行內元素只會佔據內部元素寬度的空間,而且不會以新的一行開始,不能設置寬度;塊級元素會佔滿整個父容器,會新起一行,能夠設置寬度;post
Q:
<img>
是什麼元素?spaA: 行內元素3d
Q:那爲何
<img>
能夠設置寬度?codeA:呃.....cdn
答不出來了。實際上是一個很基礎的問題,可是因爲不少時候對基礎,尤爲是CSS/HTML方面的基礎不甚在乎,稀裏糊塗也能實現想要的效果,不求甚解,真的刨根問題的時候就傻眼了。對象
先給出答案:由於<img>
雖然是行內元素,可是它們也都屬於可替換元素。可替換元素通常有內在尺寸和寬高比,因此能夠設置寬度和高度blog
從元素自己的特色來講能夠分爲可替換元素和不可替換元素圖片
HTML大多數元素都是不可替換元素,內容直接由DOM內容肯定,直接展示給用戶,好比<p>123</p>
,這就是一個不可替換元素,展現的內容就是DOM的文本節點123
與之不一樣的就是可替換元素,具體顯示的內容是由元素的標籤和屬性肯定的,好比<img>
顯示的內容其實是由src
屬性的值來讀取圖片的信息並展現的
典型的可替換元素:
<iframe>
<video>
<embed>
<img>
HTML規範規定了<input>
元素可替換,由於<image>
類型的<input>
元素就像<img>
同樣可替換,可是其餘類型的<input>
被明確的列爲非可替換元素(來源:MDN,可是實際上好比type
爲text
的<input>
也是能夠設置寬度的,我認爲能夠將<input>
也理解爲條可替換元素,由於其展現形式也是與type
屬性的取值有關係的)
幾乎全部的替換元素都是行內元素,替換元素有內在尺寸,因此能夠設置width
和height
。若是不設置其寬度和高度時,就按照其內在尺寸顯示。
能夠使用某些CSS屬性來指定可替換元素中包含的內容對象,在該元素的和區域內的位置的位置和定義方式,好比:
object-fit
用來指定可替換元素的內容對象在元素盒區域內的填充方式(相似於background-size
),取值有contain
、cover
、fill
、none
、scale-down
img {
border: 1px solid red;
width: 200px;
height: 100px;
object-fit: fill; /* 默認值 */
}
複製代碼
object-position
用來指定可替換元素的內容對象在盒元素區域中的位置: