CSS Replaced Object

可替換元素(Replaced Object)

CSS中的可替換元素指的是其內(nèi)容不受到CSS視覺格式化模型控制的元素,比如image元素、iframe嵌入式文檔、applet等。典型的如空白的html可能沒有固定的尺寸。

可替換元素的展現(xiàn)效果不是由CSS來控制的,這些元素是一種外部對象,它們外觀的渲染是獨立于CSS的。例如img元素的內(nèi)容會被src屬性指定的圖像替換掉,而替換元素通常具有固定的尺寸。

簡單來說,可替換元素的內(nèi)容不受當(dāng)前文檔樣式的影響,雖然CSS中可以使用object-position屬性影響可替換元素的位置,但不會影響到可替換元素自身的內(nèi)容。比如iframe元素可具有自己的樣式表,但不會繼承父級文檔的樣式。

典型的可替換元素包括object、videotexture、input,audiocanvas在某些特定情形下也是可替換元素。CSS渲染模型不會考慮可替換元素內(nèi)容的渲染,這些替換元素的展示獨立于CSS。

可替換元素 描述
img 圖像,imgsrc屬性中的內(nèi)容可以被替換。
video 視頻,videosrc屬性中的內(nèi)容可以被替換。
embed -
iframe -
option -
audio 音頻
canvas 畫布
object -
applet -
input type=image類型的input元素和img一樣可以被替換

CSS能對可替換原生產(chǎn)生的唯一影響在于,部分屬性支持控制元素內(nèi)容在其框中的位置或定位方式。

控制可替換元素內(nèi)容框中對象位置的CSS屬性

屬性 描述
object-fit 指定可替換元素的內(nèi)容對象在元素盒區(qū)域中的填充方式
object-position 指定可替換元素的內(nèi)容對象在元素盒區(qū)域中的位置

object-fit/object-position之間的關(guān)系類似于background-size/background-position,不管是關(guān)系還是屬性值,都有相似之處。

填充方式(object-fit)

object-fit屬性專門用于【可替換元素】的內(nèi)容應(yīng)該如何適應(yīng)其使用的高度和寬度確定的框,這里的object實際上指的是replaced element可替換元素。

object-fit: fill | contain | cover | none | scale-down;
屬性值 名稱 描述
fill 填充 默認(rèn)值,被替換內(nèi)容【拉伸填滿】內(nèi)容框content-box,不保證保持原有比例。
contain 包含 保持原有寬高比,被替換內(nèi)容將被【縮放】以適應(yīng)填充元素的內(nèi)容框`content-box``,容器內(nèi)可能留白。
cover 覆蓋 保持原有寬高比,被替換內(nèi)容在寬度或高度上至少一個與容器保持一致,以保證替換內(nèi)容尺寸一定大于容器尺寸。可能會讓替換內(nèi)容部分區(qū)域不可見。
none 保持原有寬高比,被替換內(nèi)容將保持內(nèi)容原始尺寸大小。
scale-down 降低 內(nèi)容尺寸與none或contain中一個相同,取決于它們之間誰得到的尺寸更小。
object-fit
<link  rel="stylesheet">
<div class="container mx-auto my-4 p-4 bg-gray-200 grid grid-cols-5 gap-4">
  <img src="http://source.unsplash.com/500x300" class="object-fill h-48 bg-black"/>
  <img src="http://source.unsplash.com/500x300" class="object-contain h-48 bg-black"/>
  <img src="http://source.unsplash.com/500x300" class="object-cover h-48 bg-black"/>
  <img src="http://source.unsplash.com/500x300" class="object-none h-48 bg-black"/>
  <img src="http://source.unsplash.com/500x300" class="object-scale-down h-48 bg-black"/>
</div>

填充(fill)

object-fit:fill會拉伸可替換元素的內(nèi)容以適應(yīng)其content-box

例如:不保持寬高比來縮放圖片,使圖片完全適應(yīng)。

<link  rel="stylesheet">

<div class="container mx-auto my-4 p-4 bg-gray-200 overflow-hidden">
  <img src="http://source.unsplash.com/1000x1000" class="object-fill w-full h-48"/>
</div>

圖片自身的尺寸是1000x1000的,img可替換標(biāo)簽的寬高則是width:100%; height:12rem;。采用object-fit:fill會同時縮放圖片原本的widthheight以適應(yīng)img的寬高。

fill

包含(contain)

<link  rel="stylesheet">

<div class="container mx-auto my-4 p-4 bg-gray-200 overflow-hidden">
  <img src="http://source.unsplash.com/1000x1000" class="object-contain w-full h-48"/>
</div>
contain

覆蓋(cover)

<link  rel="stylesheet">
<div class="container mx-auto my-4 p-4 bg-gray-200 overflow-hidden">
  <img src="http://source.unsplash.com/1000x1000" class="object-cover w-full h-48"/>
</div>
cover

降低(scale down)

<link  rel="stylesheet">
<div class="container mx-auto my-4 p-4 bg-gray-200 overflow-hidden">
  <img src="http://source.unsplash.com/1000x1000" class="object-scale-down w-full h-48"/>
</div>
scale-down

最佳實踐

響應(yīng)式設(shè)計(RWD)中圖片自適應(yīng)處理的一般方式是給圖片容器設(shè)置一個尺寸,然后讓圖片長度比例來覆蓋整個容器,以達(dá)到居中自動裁剪圖片的功能。

img{max-width:100%; height:auto; object-fit:cover; }
<link  rel="stylesheet">
<div class="container mx-auto my-4 p-4 bg-gray-200 overflow-hidden">
  <img src="http://source.unsplash.com/400x400" class="object-cover max-w-full h-auto"/>
</div>

例如:圖文混排時隨著窗口縮放,圖片跟隨縮放。

<link  rel="stylesheet">
<div class="container mx-auto my-4 p-4 bg-gray-200 flex">
  <img src="http://source.unsplash.com/400x300" class="object-scale-down object-center bg-black h-full w-auto"/>
  <p class="h-full ml-4 bg-white">圖文混排時圖片的縮放圖文混排時圖片的縮放圖文混排時圖片的縮放圖文混排時圖片的縮放圖文混排時圖片的縮放圖文混排時圖片的縮放圖文混排時圖片的縮放圖文混排時圖片的縮放</p>
</div>
圖片縮放

對象定位(object-position)

object-position規(guī)定了可替換元素的內(nèi)容在其content-box內(nèi)容框中的位置,可替換元素的內(nèi)容框中未被對象所覆蓋的部分則會顯示為該元素的背景。

object-position: <position>;

object-position默認(rèn)值為50% 50%即居中顯示,無論object-fit填充值是什么,其內(nèi)容顯示都是水平垂直居中的。

當(dāng)使用object-fit屬性裁切時,可使用object-position控制裁切的位置,另外object-positionbackground-position用法類似。

object position
<link  rel="stylesheet">
<div class="container mx-auto my-4 p-4 bg-gray-200 grid grid-cols-3 gap-4">
  <img src="http://source.unsplash.com/100x100" class="object-none object-left-top bg-gray-400 h-48"/>
  <img src="http://source.unsplash.com/100x100" class="object-none object-top bg-gray-400 h-48"/>
  <img src="http://source.unsplash.com/100x100" class="object-none object-right-top bg-gray-400 h-48"/>
  
  <img src="http://source.unsplash.com/100x100" class="object-none object-left bg-gray-400 h-48"/>
  <img src="http://source.unsplash.com/100x100" class="object-none object-center bg-gray-400 h-48"/>
  <img src="http://source.unsplash.com/100x100" class="object-none object-right bg-gray-400 h-48"/>
  
  <img src="http://source.unsplash.com/100x100" class="object-none object-left-bottom bg-gray-400 h-48"/>
  <img src="http://source.unsplash.com/100x100" class="object-none object-bottom bg-gray-400 h-48"/>
  <img src="http://source.unsplash.com/100x100" class="object-none object-right-bottom bg-gray-400 h-48"/>
</div>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容