聊聊 CSS3 中的 object-fit 和 object-position

2021-02-19 前端大全

(點擊上方公眾號,可快速關注)

作者:伯樂在線專欄作者 - TGCode

點擊 → 了解如何加入專欄作者

如需轉載,發送「轉載」二字查看說明

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

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

等等,好像多了一個名詞,啥叫替換元素?替換元素其實是:

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

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

這個當然不是我頭腦風暴來的,而是引用別人的解釋:引用(http://openwares.net/internet/css_replaced_element.html)

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

要是看的稀裡糊塗的也沒關係,接著往下看,我相信你會懂得!

1、object-fit

語法:

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>

看到這些效果,我想同志們最關心的的應該是兼容性,點這裡點這裡(http://caniuse.com/#search=object-fit)

2、object-position

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

語法:

object-position: <position>

默認值是50% 50%,也就是居中效果,其取值和CSS中background-position屬性取值一樣。(如果不熟悉background-position,可以瞄瞄這裡《CSS3 Background》(http://ghmagical.com/article/page/id/Lg7blxcyTOUU))

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

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一樣一樣的。

兼容性:點這裡(http://caniuse.com/#search=object-position)

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

關注「前端大全」

看更多精選前端技術文章

↓↓↓

專欄作者簡介 ( 點擊 → 加入專欄作者 )

TGCode:路途雖遠,無所畏。

打賞支持作者寫出更多好文章,謝謝!

相關焦點

  • 49 張 GIF 圖中學習 49 個 CSS 知識點
    09.【層疊上下文】💚層疊上下文:小輩就是小輩,再厲害也只是個小輩11.【相鄰兄弟選擇器】💜相鄰兄弟選擇器之常用場景23.30【o30【object-fit】🍓圖片在指定尺寸後,可以設置object-fit為contain或cover保持比例
  • 深入理解Django時區及naive datetime object和aware datetime object的區別
    如果你要在Django視圖和模板中正確使用DateTime類型的數據,除了要閱讀Django基礎(32):按日期與時間欄位查詢數據及模板中日期時間類型數據的格式化及比較,還必須要對timezone非常了解,才能避免如RuntimeWarning: DateTimeField Article.pub_date received a naive datetime 這種新手必犯的錯誤。
  • CSS中position屬性的用法和作用
    CSS中position屬性的用法和作用 本文向大家介紹一下CSS中Position屬性的用法和作用,Position屬性有四個可選值,它們分別是:static、absolute、fixed、relative。
  • ES6對象新增方法-Object.is與Object.assign
    ,而ES6中新增的數組應用的方法能夠提高我們的工作效率和簡化我們的代碼.所以今天小D就為大家一起來學習ES6中的對象的新增方法.在ES5中,我們會用相等運算符(==)和嚴格相等運算符(===)來比較兩個數值是否相等。
  • Python 之type 與object
    1、Python type 與objectpython 當中的type 是所有內置對象或者類的基類型,object 是所有類繼承的基類 因此int、str、list、tuple 等等這些內置的類這些都是type類的實例對象。因為type 也是類,因此type的基類也是object。
  • 【第2201期】在Chromium、Safari預覽版和Firefox Nightly中支持新的寬高比CSS屬性
    寬高比寬高比最常見的表示方式是兩個整數和一個冒號,尺寸為:寬:高,或x:y。攝影中最常見的寬高比是4:3和3:2,而視頻和相機則傾向於16:9的寬高比。兩張寬高比相同的圖片。一張是634 x 951px,另一張是200 x 300px。兩者的寬高比都是2:3。
  • css left屬性左邊緣偏移
    left屬性定義及用法在css中,left屬性是使用來定義定位元素左外邊距邊界與其包含塊左邊界之間的偏移,其實就是元素向右的偏移量;left屬性通常和position、right、top、bottom等屬性一起使用
  • An object lesson? 實物教學課
    Reader question:Please explain 「object lesson」, as in 「the first meal was an object lesson of much variety.」
  • css right屬性右邊緣偏移
    right屬性定義及用法在css中,right屬性是使用來定義定位元素右外邊距邊界與其包含塊右邊界之間的偏移。和該屬性相似的屬性有left、top、bottom,通常相互配合用來定位元素的位置。這幾個偏移屬性必須和position屬性一起使用,而其position屬性值不能為static(默認),不然left、right、top、bottom偏移屬性是沒有效果的;對於static元素,為auto;對於長度值,則為相應的絕對長度;對於百分比數值,為指定值;否則為auto。對於相對定義元素,left的計算值始終等於right。
  • The shiny object? 閃亮之物
    In actuality, the shiny object can be misleading and a total waste of time.The shiny object is also called the bright shiny object.
  • CSS之定位一(position屬性)
    relative表示相對定位,在文檔流中仍然佔有空間,其參考對象是離該元素最近的父元素。圖1表示父元素的position值變化時,子元素(position=relative)與父元素的相對位置,由圖可以看出其相對位置不隨父元素的position值變化而變化。
  • 變量類型測試函數的使用:六、is_object的用法
    因為在PHP中最常用到的數據類型就是數組和對象,所以我們今天就來講講is_object的用法;(等之後了再來詳細講解詳細的內容)is_objectis_object — 檢測變量是否是一個對象is_object 描述
  • CSS固定定位{position:fixed}
    DOCTYPE 聲明指定standards-compliant(標準)模式可以通過CSS hack實現 上述聲明下IE5和IE5.5目前沒有發現通過純粹CSS能夠解決的方案,但是可以通過IE特有的expression在CSS中實現(移動網頁時固定元素會動),這和常見浮動Logo廣告利用Javascript實現原理是一樣的,只不過可以直接寫在CSS中比較簡便的 利用IE獨有的條件注釋語句可以針對不同的
  • R語言ggsurvplot繪製生存曲線報錯 : object of type 'symbol' is not subsettab
    p=14683預期繪製生存曲線圖實際object of type 『symbol『 is not subsettable重現問題的步驟library(survminer)require("survival")survie <- Surv(time, status) ~ sexfit
  • Thing Stuff Object 都表示東西用途有別
    Thing, stuff, object 都有表示"東西"的意思,通常我們在使用中有啥主要區別呢? 舉例如下:1.3. Object 物體,東西例: What object is that far away ?遠處是什麼東西?He is looking at an object on land.
  • 中考英語近義詞辨析: aim/ purpose/ object
    中考英語近義詞辨析: aim/ purpose/ object   Ⅰ. aim 「目的」指抱有一種明確的目的,並意味著為之實現而竭盡全力。如:   ① What’s your aim in life?你的人生目的是什麼?
  • 詭異 | Spark使用get_json_object函數
    一、問題現象:使用spark sql調用get_json_object函數後,報如下錯誤:yarn 容器被
  • 託福詞彙:hear, see etc + object + verb form
    託福詞彙:hear, see etc + object + verb form  1. object + infinitive or -ing form  Hear, see, watch, notice and similar verbs of
  • 49個工作中常用的CSS樣式整理匯總
    last-child last-child 表示選擇列表中的最後一個標籤nth-child(3) 表示選擇列表中的第 3 個標籤nth-child(2n) )這個表示選擇列表中的偶數標籤第n個孩子(2N-1)這個表示選擇列表中的奇數標籤第n個孩子(N + 3)這個表示選擇列表中的標籤從第3個開始到最後。
  • 解決Asp程序的Server.CreateObject錯誤
    ,沒碰到過這樣的問題,今天在幫一個網友mm解決excel導入到sqlserver資料庫中遇到這樣的問題,asp代碼裡無權限創建excel對象(偶的是XP Professional 英文版),大概是xp默認權限限制的問題,於是到百度裡搜索了一下,找到了解決辦法如下:很多使用 IIS 架站的人 經常碰到類似的問題。