CSS3 object-fit 和 object-position

最近一直忙於將JavaScript學習的筆記整理成電子書,也沒什麼空閒時間寫新的文章。趁着今天有點空閒,決定再來折騰一下CSS3中的兩個屬性:object-fitobject-positioncss

這兩個奇葩的屬性是搞毛的呢?其實它們是爲了處理替換元素(replaced elements)的自適應問題,簡單的說,就是處理替換元素的變形(這裏指長寬比例變形)問題。html

等等,好像多了一個名詞,啥叫替換元素替換元素實際上是:canvas

其內容不受CSS視覺格式化模型控制的元素,好比image,嵌入的文檔(iframe之類)或者applet,叫作替換元素。比:img元素的內容一般會被其src屬性指定的圖像替換掉。替換元素一般有其固有的尺寸:一個固有的寬度,一個固有的高度和一個固有的比率。好比一幅位圖有固有用絕對單位指定的寬度和高度,從而也有固有的寬高比率。另外一方面,其餘文檔也可能沒有固有的尺寸,好比一個空白的html文檔。app

CSS渲染模型不考慮替換元素內容的渲染。這些替換元素的展示獨立於CSS。object,video,textarea,input也是替換元素,audio和canvas在某些特定情形下爲替換元素。使用CSS的content屬性插入的對象是匿名替換元素。ide

這個固然不是我頭腦風暴來的,而是引用別人的解釋:引用svg

常見的替換元素有<video>、<object>、<img>、<input type="image">、<svg>、<svg:image><svg:video>等。學習

要是看的稀裏糊塗的也不要緊,接着往下看,我相信你會懂得!ui

一、object-fitspa

語法:3d

object-fit: fill | contian | cover | none | scale-down;複製代碼
  • fill : 默認值。填充,可替換元素填滿整個內容區域,可能會改變長寬比,致使拉伸。
  • contain : 包含,保持原始的尺寸比例,保證可替換元素完整顯示,寬度或高度至少有一個和內容區域的寬度或高度一致,部份內容會空白。
  • cover : 覆蓋,保持原始的尺寸比例,保證內容區域被填滿。所以,可替換元素可能會被切掉一部分,從而不能完整展現。
  • none : 保持可替換元素原尺寸和比例。
  • scale-down : 等比縮小。就好像依次設置了none或contain, 最終呈現的是尺寸比較小的那個。

很差意思,我又要擺妹子來誘惑大家了,看效果圖:


上面的五個例子的代碼:

<style> .box{ position:relative; float:left; margin:0 10px 40px 10px; width:150px; height:150px; } .box>img{ width:100%; height:100%; background-color:#000; } .fill{ object-fit:fill; } .contain{ object-fit:contain; } .cover{ object-fit:cover; } .none{ object-fit:none; } .scale{ object-fit:scale-down; } </style>

<div class="box">   
  <img src="example-girl.jpg" class="fill" alt="">  
</div>   
<div class="box">   
  <img src="example-girl.jpg" class="contain" alt=""> 
</div>   
<div class="box">   
  <img src="example-girl.jpg" class="cover" alt=""> 
</div>   
<div class="box">   
  <img src="example-girl.jpg" class="none" alt=""> 
</div>   
<div class="box">   
  <img src="example-girl.jpg" class="scale" alt=""> 
</div>複製代碼

看到這些效果,我想同志們最關心的的應該是兼容性,點這裏點這裏

二、object-position

object-position屬性決定了它的盒子裏面替換元素的對齊方式。

語法:

object-position: <position>複製代碼

默認值是50% 50%,也就是居中效果,其取值和CSS中background-position屬性取值同樣。(若是不熟悉background-position,能夠瞄瞄這裏《CSS3 Background》)

例如:替換元素位於內容區域的左上角

img{
  object-fit: contain;
  object-position: 0 0;
}複製代碼

效果圖:


例如:替換元素相對於左下角10px 10px地方定位

img{
  object-fit: contain;
  object-position: bottom 10px left 10px;
}複製代碼

效果圖:


固然,你也可使用calc()來定位:

img{
  object-fit: contain;
  object-position: calc(100% - 10px) calc(100% - 10px);
}複製代碼

效果圖:


它還支持負數:

img{
  object-fit: contain;
  object-position: -10px calc(100% - 10px);
}複製代碼

效果圖:

總之,object-position的特性表現與backgound-position同樣同樣的。

兼容性:點這裏

到這裏,這兩個屬性算是講完了,就是這麼簡單。

相關文章
相關標籤/搜索