成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

讓圖片完美適應(yīng):掌握 CSS 的 Object-Fit 與 Object-Position

開發(fā) 前端
在本文中,我們將深入探討如何使用 object-fit 將圖像適應(yīng)到特定的空間中,以及如何使用 object-position 在該空間中進行精確定位。

在CSS中,我們可以使用 background-size 和background-position屬性為背景圖像設(shè)置大小和位置。而 object-fit 和 object-position 屬性則允許我們對嵌入的圖像(以及其他替代元素,如視頻)做類似的操作。在本文中,我們將深入探討如何使用 object-fit 將圖像適應(yīng)到特定的空間中,以及如何使用 object-position 在該空間中進行精確定位。

object-fit 作用

有時,圖像的大小超出了我們希望的空間。在過去,我們要么在圖像編輯器中裁剪圖像,要么通過設(shè)置寬度/或高度約束來調(diào)整圖像大小(這不是一個完美的選擇),或者執(zhí)行某種復(fù)雜的裁剪,或者可能轉(zhuǎn)而使用背景圖像(如果圖像不僅僅是為了裝飾的話)。

object-fit 屬性為圖像提供了background-size為背景圖像所做的功能:它為圖像在指定區(qū)域內(nèi)的顯示提供了選項,如果需要,可以隱藏部分圖像。這個指定的區(qū)域可能有固定的寬度和高度,或者可能是一個更具響應(yīng)性的空間,如根據(jù)瀏覽器視口大小變化的網(wǎng)格區(qū)域。

object-fit 工作原理

每個HTML元素都有自己的“content box”,代表它所占據(jù)的空間。默認情況下,圖像的內(nèi)容框與圖像的自然尺寸相匹配。

當(dāng)我們?yōu)閳D像應(yīng)用不同的寬度和/或高度時,我們實際上是在改變內(nèi)容框的尺寸。如果內(nèi)容框的尺寸發(fā)生變化,圖像仍然會填充內(nèi)容框。所以,如果我們有一個300px乘300px的圖像,并將其尺寸設(shè)置為300px乘200px,圖像會出現(xiàn)扭曲。

object-fit 屬性為我們提供了圖像在該調(diào)整后的內(nèi)容框內(nèi)顯示的選項。而不是讓它出現(xiàn)扭曲,我們可以隱藏圖像的一部分,或者強制圖像只部分填充其內(nèi)容框,這樣它就完全可見且不會扭曲。

設(shè)置

為了詳細說明 object-fit 屬性的工作原理,我們將圖像放在一個使用Grid布局居中的 div 中。div 有一個棕色的背景,以及由::before偽元素提供的虛線邊框,這將幫助我們理解圖像發(fā)生了什么。

// html
<article>
  <div>
    
  </div>
</article>
// css
article {
  display: grid; 
  grid-template: 1fr 200px 1fr / 1fr 300px 1fr; 
  height: 100vh;
}

div {
  grid-row: 2; 
  grid-column: 2;
  background-color: brown;
  position: relative;
}

div::before {
  content: "";
  position: absolute;
  inset: -5px;
  border: 5px dashed white;
}

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background: #30353b; 
}

事例地址:https://codepen.io/SitePoint/pen/PoxRojJ

在圖像演示中,我們將使用以下圖像,其自然尺寸為 400px x 600px .

我們的圖像比我們的div大得多,如果我們將圖像放在div內(nèi),它會溢出,如下所示。

我們的目標(biāo)是防止圖像從其容器中爆裂出來,但也要讓它舒適地適應(yīng)其中,object-fit 將幫助我們做到這一點。

如果我們使用背景圖像,我們可以設(shè)置類似background-size: cover,背景圖像將被限制在容器的區(qū)域內(nèi)。但正如我們所看到的,為了讓 object-fit 發(fā)揮作用,我們首先需要在圖像的內(nèi)容框上定義一個與其自然大小不同的高度和寬度。在下面的示例中,我們將圖像的寬度和高度限制為100%,這樣其內(nèi)容框就與容器div的大小相匹配:

img {
  width: 100%;
  height: 100%;
}

圖像及其內(nèi)容框現(xiàn)在緊密地適應(yīng)容器,但圖像嚴(yán)重扭曲。這就是object-fit的魔法來拯救我們的地方,所以讓我們看看它有什么提供。

使用 object-fit 將圖像適應(yīng)容器

object-fit 屬性為我們提供了五個主要的關(guān)鍵字值,以確定我們的圖像如何在其容器內(nèi)顯示。其中兩個關(guān)鍵字——cover和contain——與它們的background-size對應(yīng)項執(zhí)行相同的角色。

object-fit: cover

cover 值強制圖像完全覆蓋容器的區(qū)域,盡可能多地顯示圖像,而不會扭曲它:

img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

因為圖像相當(dāng)高,我們看到的是其完整的寬度,但不是其完整的高度,如下圖所示。

cover 值確保圖像的較窄部分完全填充容器。

值得注意的是,圖像的定位。與background-position默認為0 0(從容器的左上角定位背景圖像)不同,object-position 的默認值是50% 50%,將圖像居中于其內(nèi)容框。當(dāng)我們稍后查看object-position屬性時,我們將學(xué)習(xí)如何指定圖像的可見部分。

object-fit: contain

contain 值強制圖像完全適應(yīng)其內(nèi)容框,但不會扭曲。圖像保持其自然的寬高比,因此不會填滿其容器:

img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

你可能會認為,只需在圖像上設(shè)置height: 100%就可以得到上面的相同結(jié)果。但實際上并不完全如此,因為這樣會使圖像定位到左邊,而不是居中,這是object-fit的默認設(shè)置。結(jié)合object-position,object-fit為圖像在容器內(nèi)的定位提供了更多的選項。

object-fit: none

none 屬性允許圖像保持其自然的原始尺寸。只有可以適應(yīng)調(diào)整后的內(nèi)容框的部分才是可見的。

與object-fit: cover不同,我們的圖像不會被強制在至少一個軸上完全可見。原始圖像的寬度和高度都大于內(nèi)容框,所以它在兩個方向上都溢出,如下圖所示。none 值保持圖像的正常大小,因此在容器中看不到圖像的頂部、底部和兩側(cè)。

再次注意,默認情況下,圖像的中心與內(nèi)容框的中心對齊。

還要注意,object-fit: none 并不意味著 object-fit 什么都不做。正如我們所看到的,與完全沒有 object-fit 設(shè)置相比,它做了很多工作。

object-fit: scale-down

scale-down 屬性與 none 或 contain 相同。它選擇使圖像顯示得更小的那個。

顯然,在我們當(dāng)前的示例中,它會選擇 contain,因為我們的容器比圖像小。如果我們的容器比圖像大,none 會占主導(dǎo)地位,圖像會保持其自然大小,而不是在一個方向上填充容器,如你在這個CodePen演示中所看到的。

object-fit: fill

如果我們在演示中將 object-fit 值更改為 fill,就好像根本沒有設(shè)置 object-fit。這是因為,默認情況下,圖像無論設(shè)置了什么尺寸都會填充其內(nèi)容框。

因為 fill 屬性可能會扭曲圖像,所以在大多數(shù)情況下,它可能不是最好的選擇。

使用 object-fit 而不使用容器

在上面的示例中,我們一直在使用 object-fit 來調(diào)整 div 容器內(nèi)的圖像大小,但我們在實踐中看到的原理在沒有容器的情況下同樣適用。重要的是圖像的內(nèi)容框的大小以及圖像在該框內(nèi)的顯示方式。

例如,我們可以將以下CSS應(yīng)用于圖像,而不需要任何周圍的 div:

img {
  width: 300px;
  height: 300px;
  object-fit: contain;
}

嘗試更改上面的Pen中object-fit屬性的值為 cover、fill、scale-down 和 none,看看每個的行為如何。結(jié)果與圖像設(shè)置為寬度和高度為 100% 并包含在一個設(shè)置為 300px 乘300px 的 div 中的結(jié)果相同。

在響應(yīng)式布局中使用 object-fit

object-fit 屬性在圖像的指定區(qū)域的尺寸響應(yīng)瀏覽器視口大小的情況下可能最有用。以下演示將我們的圖像分配給一個特定的、靈活的網(wǎng)格區(qū)域:

img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  grid-row: 2 / 3; 
  grid-column: 2 / 3;
}

article {
  display: grid; 
  grid-template: 5% 1fr 10% / 40% 1fr 40%; 
  height: 100vh;
}

事例地址:https://codepen.io/SitePoint/pen/JjeLWXW

隨著視口和網(wǎng)格區(qū)域的擴展和收縮,cover 值確保圖像始終很好地適應(yīng)其網(wǎng)格區(qū)域,改變圖像的可見部分,使其永遠不會扭曲。

使用 object-position 設(shè)置圖像的位置

正如 background-position 用于設(shè)置容器內(nèi)背景圖像的位置一樣,object-position 屬性用于控制圖像元素在其自己的內(nèi)容框內(nèi)的位置。

正如我們所看到的,object-position 默認為 50% 50%,這意味著圖像的中心與其內(nèi)容框的中心對齊。我們可以使用一系列的關(guān)鍵字值(如 top、bottom、left、right、center)或使用長度值(如px、em或%)或兩者的組合來更改這一點。

假設(shè)我們現(xiàn)在想要從右下角定位我們的圖像。我們可以使用關(guān)鍵字 right bottom,或百分比值100% 100%:

img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: right bottom; /* or 100% 100% */
}

我們還可以使用像像素或 ems這樣的單位偏移圖像從其容器。例如:

img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 20px 2em; /* 20px from left and 2em from top */
}

我們可以通過結(jié)合單位和關(guān)鍵字來從右下角進行類似的偏移,如下所示:

img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: right 20px bottom 2em; /* 20px from right and 2em from bottom */
}

我們已經(jīng)看到,我們可以使用百分比來定位圖像在其內(nèi)容框中。與 background-position 屬性一樣,使用百分比與 object-position 可能會有點混淆。object-position 為 50% 50% 意味著圖像的中心與其內(nèi)容框的中心在水平和垂直軸上對齊。

如果我們將 object-position 設(shè)置為 20% 40%,這意味著圖像左邊 20% 的垂直線與內(nèi)容框左邊20% 的垂直線重合,圖像頂部40% 的水平線與內(nèi)容框頂部40%的水平線重合,如下圖所示。

圖像和容器的20%和40%的垂直和水平線對齊

結(jié)論

object-fit 屬性設(shè)計用于與任何類型的替代元素一起工作,如圖像、視頻、iframes 和embeds。如何將像視頻這樣的元素適應(yīng)到定義的區(qū)域(其中一些元素可能被隱藏)可能是一個值得討論的問題,但毫無疑問,這里有可行的用例。更好的選擇可能是將iframe的寬度設(shè)置為可用空間的width: 100%,然后使用aspect-ratio屬性來保持其比例。

更常見的是,有一個圖像需要適應(yīng)的特定空間,所以 object-fit 對于允許圖像適應(yīng)該空間而不被扭曲(即使其中一部分必須被隱藏)非常有用。

如何使用CSS的object-fit屬性:

object-fit: contain contain值強制圖像完全適應(yīng)其內(nèi)容框,但不會扭曲。圖像保持其自然的寬高比,因此不會填滿其容器:

css Copy code img { width: 100%; height: 100%; object-fit: contain; } 你可能會認為,只需在圖像上設(shè)置height: 100%就可以得到上面的相同結(jié)果。但實際上并不完全如此,因為這樣會使圖像定位到左邊,而不是居中,這是object-fit的默認設(shè)置。結(jié)合object-position,object-fit為圖像在容器內(nèi)的定位提供了更多的選項。

object-fit: none none屬性允許圖像保持其自然的原始尺寸。只有可以適應(yīng)調(diào)整后的內(nèi)容框的部分才是可見的。

與object-fit: cover不同,我們的圖像不會被強制在至少一個軸上完全可見。原始圖像的寬度和高度都大于內(nèi)容框,所以它在兩個方向上都溢出,如下圖所示。

none值保持圖像的正常大小,因此在容器中看不到圖像的頂部、底部和兩側(cè)。

再次注意,默認情況下,圖像的中心與內(nèi)容框的中心對齊。

還要注意,object-fit: none并不意味著object-fit什么都不做。正如我們所看到的,與完全沒有object-fit設(shè)置相比,它做了很多工作。(如果你在上面的Pen中刪除object-fit: none,你會得到一個提醒。)

object-fit: scale-down scale-down屬性與none或contain相同。它選擇使圖像顯示得更小的那個。

顯然,在我們當(dāng)前的示例中,它會選擇contain,因為我們的容器比圖像小。如果我們的容器比圖像大,none會占主導(dǎo)地位,圖像會保持其自然大小,而不是在一個方向上填充容器,如你在這個CodePen演示中所看到的。

object-fit: fill 如果我們在演示中將object-fit值更改為fill,就好像根本沒有設(shè)置object-fit。這是因為,默認情況下,圖像無論設(shè)置了什么尺寸都會填充其內(nèi)容框。

因為fill屬性可能會扭曲圖像,所以在大多數(shù)情況下,它可能不是最好的選擇。

使用object-fit而不使用容器 在上面的示例中,我們一直在使用object-fit來調(diào)整div容器內(nèi)的圖像大小,但我們在實踐中看到的原理在沒有容器的情況下同樣適用。重要的是圖像的內(nèi)容框的大小以及圖像在該框內(nèi)的顯示方式。

例如,我們可以將以下CSS應(yīng)用于圖像,而不需要任何周圍的div:

css Copy code img { width: 300px; height: 300px; object-fit: contain; } 下面的CodePen演示中顯示了結(jié)果。

嘗試更改上面的Pen中object-fit屬性的值為cover、fill、scale-down和none,看看每個的行為如何。結(jié)果與圖像設(shè)置為寬度和高度為100%并包含在一個設(shè)置為300px乘300px的div中的結(jié)果相同。

在響應(yīng)式布局中使用object-fit object-fit屬性在圖像的指定區(qū)域的尺寸響應(yīng)瀏覽器視口大小的情況下可能最有用。以下演示將我們的圖像分配給一個特定的、靈活的網(wǎng)格區(qū)域:

css Copy code img { width: 100%; height: 100%; object-fit: cover; grid-row: 2 / 3; grid-column: 2 / 3; }

article { display: grid; grid-template: 5% 1fr 10% / 40% 1fr 40%; height: 100vh; } 隨著視口和網(wǎng)格區(qū)域的擴展和收縮,cover值確保圖像始終很好地適應(yīng)其網(wǎng)格區(qū)域,改變圖像的可見部分,使其永遠不會扭曲。(查看全屏視圖的演示以獲得最佳效果。)

要了解更多關(guān)于網(wǎng)格區(qū)域的信息,請查看我們的CSS Grid初學(xué)者指南。

使用object-position設(shè)置圖像的位置 正如background-position用于設(shè)置容器內(nèi)背景圖像的位置一樣,object-position屬性用于控制圖像元素在其自己的內(nèi)容框內(nèi)的位置。

正如我們所看到的,object-position默認為50% 50%,這意味著圖像的中心與其內(nèi)容框的中心對齊。我們可以使用一系列的關(guān)鍵字值(如top、bottom、left、right、center)或使用長度值(如px、em或%)或兩者的組合來更改這一點。

假設(shè)我們現(xiàn)在想要從右下角定位我們的圖像。我們可以使用關(guān)鍵字right bottom,或百分比值100% 100%:

css Copy code img { width: 100%; height: 100%; object-fit: cover; object-position: right bottom; /* 或 100% 100% */ } 下面的圖像說明了我們的圖像現(xiàn)在的位置。

我們的圖像現(xiàn)在從右下角定位,這樣圖像的頂部部分被隱藏了

你可以在上面的Pen中嘗試定位關(guān)鍵字,看看它們是如何工作的,以及object-fit關(guān)鍵字,但結(jié)果應(yīng)該很容易預(yù)測。

我們還可以使用像像素或ems這樣的單位偏移圖像從其容器。例如:

css Copy code img { width: 100%; height: 100%; object-fit: cover; object-position: 20px 2em; /* 從左邊20px和從頂部2em */ } 我們可以通過結(jié)合單位和關(guān)鍵字來從右下角進行類似的偏移,如下所示:

css Copy code img { width: 100%; height: 100%; object-fit: cover; object-position: right 20px bottom 2em; /* 從右邊20px和從底部2em */ } 我們已經(jīng)看到,我們可以使用百分比來定位圖像在其內(nèi)容框中。與background-position屬性一樣,使用百分比與object-position可能會有點混淆。object-position為50% 50%意味著圖像的中心與其內(nèi)容框的中心在水平和垂直軸上對齊。

如果我們將object-position設(shè)置為20% 40%,這意味著圖像左邊20%的垂直線與內(nèi)容框左邊20%的垂直線重合,圖像頂部40%的水平線與內(nèi)容框頂部40%的水平線重合,如下圖所示。

圖像和容器的20%和40%的垂直和水平線對齊

我們可以在下面的CodePen演示中看到這一點。

結(jié)論 object-fit屬性設(shè)計用于與任何類型的替代元素一起工作,如圖像、視頻、iframes和embeds。如何將像視頻這樣的元素適應(yīng)到定義的區(qū)域(其中一些元素可能被隱藏)可能是一個值得討論的問題,但毫無疑問,這里有可行的用例。更好的選擇可能是將iframe的寬度設(shè)置為可用空間的width: 100%,然后使用aspect-ratio屬性來保持其比例。

更常見的是,有一個圖像需要適應(yīng)的特定空間,所以object-fit對于允許圖像適應(yīng)該空間而不被扭曲(即使其中一部分必須被隱藏)非常有用。

最后,正如上面所提到的,值得將 object-fit 和 object-position 屬性與 background-size 和 background-position 屬性進行比較,它們有很多相似之處。

責(zé)任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2010-09-10 15:23:54

CSS匹配CSS

2011-08-17 09:27:55

FlexJava

2022-06-08 10:46:00

CSS前端

2023-07-28 10:21:46

CSS前端

2010-09-01 15:28:11

CSSexpression

2023-02-06 09:31:17

CSSJS 動態(tài)

2013-05-20 15:45:12

CSS

2009-09-09 15:28:43

Linq to obj

2011-06-14 15:45:02

Qt Object

2024-03-20 09:40:27

動畫技巧CSS逐幀動畫

2021-07-14 11:25:12

CSSPosition定位

2015-04-17 16:07:11

swiftOC

2020-06-04 08:13:36

JavaScriptObject.is()運算符

2010-08-24 15:11:24

PositionCSS

2010-09-08 16:22:32

PositionCSS

2010-09-10 10:47:47

CSSposition

2010-09-15 13:44:01

CSS positio

2009-12-09 09:55:39

ibmdwSpring

2009-11-30 16:40:38

PHP object對

2009-08-20 18:21:04

GetType方法C# object類
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产成人综合一区二区三区 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 日韩福利在线 | 亚洲一区欧美一区 | 日韩视频一区在线观看 | 网页av| 五月婷婷丁香婷婷 | 久草在线在线精品观看 | 久久大陆| 欧美电影免费观看高清 | 美女网站视频免费黄 | 中文字幕免费观看 | 亚洲 日本 欧美 中文幕 | 中文字幕精品一区 | 亚洲精品888 | 欧美一区二区三区在线免费观看 | 欧美视频在线看 | 日韩综合在线 | 国产精品成人一区 | 国产乱精品一区二区三区 | 国产a区| 欧美中文字幕一区二区三区亚洲 | 玖玖视频网 | 91视频在线观看 | 成人av网站在线观看 | 国产国语精品 | 综合一区 | 欧美色图综合网 | 婷婷久久精品一区二区 | 中文字幕国产日韩 | 日韩欧美综合 | 超碰导航 | 国产精品欧美一区二区 | 伊大人久久 | 国产一区二区三区视频 | 视频一区二区中文字幕日韩 | 欧美一区二区三区 | 国产黄色在线观看 | 成人性生交大片免费看r链接 | 91成人精品 | 国产精品美女www爽爽爽视频 |