Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产免费午夜,一级毛片 一级毛片,国产精品国产欧美综合一区

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          前端基礎(chǔ):必須要知道的移動(dòng)端適配(4)-視口

          前端基礎(chǔ):必須要知道的移動(dòng)端適配(4)-視口

          (viewport)代表當(dāng)前可見的計(jì)算機(jī)圖形區(qū)域。在Web瀏覽器術(shù)語中,通常與瀏覽器窗口相同,但不包括瀏覽器的UI, 菜單欄等——即指你正在瀏覽的文檔的那一部分。

          一般我們所說的視口共包括三種:布局視口、視覺視口和理想視口,它們?cè)谄聊贿m配中起著非常重要的作用。

          布局視口

          布局視口(layout viewport):當(dāng)我們以百分比來指定一個(gè)元素的大小時(shí),它的計(jì)算值是由這個(gè)元素的包含塊計(jì)算而來的。當(dāng)這個(gè)元素是最頂級(jí)的元素時(shí),它就是基于布局視口來計(jì)算的。

          所以,布局視口是網(wǎng)頁布局的基準(zhǔn)窗口,在PC瀏覽器上,布局視口就等于當(dāng)前瀏覽器的窗口大小(不包括borders 、margins、滾動(dòng)條)。

          在移動(dòng)端,布局視口被賦予一個(gè)默認(rèn)值,大部分為980px,這保證PC的網(wǎng)頁可以在手機(jī)瀏覽器上呈現(xiàn),但是非常小,用戶可以手動(dòng)對(duì)網(wǎng)頁進(jìn)行放大。

          我們可以通過調(diào)用document.documentElement.clientWidth / clientHeight來獲取布局視口大小。

          視覺視口

          視覺視口(visual viewport):用戶通過屏幕真實(shí)看到的區(qū)域。

          視覺視口默認(rèn)等于當(dāng)前瀏覽器的窗口大小(包括滾動(dòng)條寬度)。

          當(dāng)用戶對(duì)瀏覽器進(jìn)行縮放時(shí),不會(huì)改變布局視口的大小,所以頁面布局是不變的,但是縮放會(huì)改變視覺視口的大小。

          例如:用戶將瀏覽器窗口放大了200%,這時(shí)瀏覽器窗口中的CSS像素會(huì)隨著視覺視口的放大而放大,這時(shí)一個(gè)CSS像素會(huì)跨越更多的物理像素。

          所以,布局視口會(huì)限制你的CSS布局而視覺視口決定用戶具體能看到什么。

          我們可以通過調(diào)用window.innerWidth / innerHeight來獲取視覺視口大小。

          理想視口

          布局視口在移動(dòng)端展示的效果并不是一個(gè)理想的效果,所以理想視口(ideal viewport)就誕生了:網(wǎng)站頁面在移動(dòng)端展示的理想大小。

          如上圖,我們?cè)诿枋鲈O(shè)備獨(dú)立像素時(shí)曾使用過這張圖,在瀏覽器調(diào)試移動(dòng)端時(shí)頁面上給定的像素大小就是理想視口大小,它的單位正是設(shè)備獨(dú)立像素。

          上面在介紹CSS像素時(shí)曾經(jīng)提到頁面的縮放系數(shù)=CSS像素 / 設(shè)備獨(dú)立像素,實(shí)際上說頁面的縮放系數(shù)=理想視口寬度 / 視覺視口寬度更為準(zhǔn)確。

          所以,當(dāng)頁面縮放比例為100%時(shí),CSS像素=設(shè)備獨(dú)立像素,理想視口=視覺視口。

          我們可以通過調(diào)用screen.width / height來獲取理想視口大小。

          Meta viewport

          <meta> 元素表示那些不能由其它HTML元相關(guān)元素之一表示的任何元數(shù)據(jù)信息,它可以告訴瀏覽器如何解析頁面。

          我們可以借助<meta>元素的viewport來幫助我們?cè)O(shè)置視口、縮放等,從而讓移動(dòng)端得到更好的展示效果。

          <meta name="viewport" content="width=device-width; initial-scale=1; maximum-scale=1; minimum-scale=1; user-scalable=no;">
          

          上面是viewport的一個(gè)配置,我們來看看它們的具體含義:

          Value 可能值 描述 width 正整數(shù)或device-width 以pixels(像素)為單位, 定義布局視口的寬度。 height 正整數(shù)或device-height 以pixels(像素)為單位, 定義布局視口的高度。 initial-scale 0.0 - 10.0 定義頁面初始縮放比率。 minimum-scale 0.0 - 10.0 定義縮放的最小值;必須小于或等于maximum-scale的值。 maximum-scale 0.0 - 10.0 定義縮放的最大值;必須大于或等于minimum-scale的值。 user-scalable 一個(gè)布爾值(yes或者no) 如果設(shè)置為 no,用戶將不能放大或縮小網(wǎng)頁。默認(rèn)值為 yes。

          移動(dòng)端適配

          為了在移動(dòng)端讓頁面獲得更好的顯示效果,我們必須讓布局視口、視覺視口都盡可能等于理想視口。

          device-width就等于理想視口的寬度,所以設(shè)置width=device-width就相當(dāng)于讓布局視口等于理想視口。

          由于initial-scale=理想視口寬度 / 視覺視口寬度,所以我們?cè)O(shè)置initial-scale=1;就相當(dāng)于讓視覺視口等于理想視口。

          這時(shí),1個(gè)CSS像素就等于1個(gè)設(shè)備獨(dú)立像素,而且我們也是基于理想視口來進(jìn)行布局的,所以呈現(xiàn)出來的頁面布局在各種設(shè)備上都能大致相似。

          縮放

          上面提到width可以決定布局視口的寬度,實(shí)際上它并不是布局視口的唯一決定性因素,設(shè)置initial-scale也有肯能影響到布局視口,因?yàn)椴季忠暱趯挾热〉氖莣idth和視覺視口寬度的最大值。

          例如:若手機(jī)的理想視口寬度為400px,設(shè)置width=device-width,initial-scale=2,此時(shí)視覺視口寬度=理想視口寬度 / initial-scale即200px,布局視口取兩者最大值即device-width 400px。

          若設(shè)置width=device-width,initial-scale=0.5,此時(shí)視覺視口寬度=理想視口寬度 / initial-scale即800px,布局視口取兩者最大值即800px。

          獲取瀏覽器大小

          瀏覽器為我們提供的獲取窗口大小的API有很多,下面我們?cè)賮韺?duì)比一下:

          1. window.innerHeight:獲取瀏覽器視覺視口高度(包括垂直滾動(dòng)條)。
          2. window.outerHeight:獲取瀏覽器窗口外部的高度。表示整個(gè)瀏覽器窗口的高度,包括側(cè)邊欄、窗口鑲邊和調(diào)正窗口大小的邊框。
          3. window.screen.Height:獲取獲屏幕取理想視口高度,這個(gè)數(shù)值是固定的,設(shè)備的分辨率/設(shè)備像素比
          4. window.screen.availHeight:瀏覽器窗口可用的高度。
          5. document.documentElement.clientHeight:獲取瀏覽器布局視口高度,包括內(nèi)邊距,但不包括垂直滾動(dòng)條、邊框和外邊距。
          6. document.documentElement.offsetHeight:包括內(nèi)邊距、滾動(dòng)條、邊框和外邊距。
          7. document.documentElement.scrollHeight:在不使用滾動(dòng)條的情況下適合視口中的所有內(nèi)容所需的最小寬度。測(cè)量方式與clientHeight相同:它包含元素的內(nèi)邊距,但不包括邊框,外邊距或垂直滾動(dòng)條。

          SS 過去只有四個(gè)你需要知道的視口單元,它們幾乎可以涵蓋所有可以想象的用例。 然而,隨著時(shí)間的推移和技術(shù)的變化,這四個(gè)視口單元不再足以處理所有用例。 由于CSS 增加了 20 個(gè)視口單元,這聽起來很多,但它們被分解為六個(gè)主要的視口單元,并帶有三個(gè)獨(dú)特的修飾符,總共有 24 種組合。

          主要的4種視口單元

          主要的 CSS 視口單位是 vwvhvminvmax。 您以前可能使用過或看過這些單位,所以我在解釋它們時(shí)會(huì)盡量簡(jiǎn)短。

          VW

          vw 代表 Viewport Width,代表視口寬度的百分比。 放置在 vw 之前的數(shù)字是視口寬度的百分比。 例如,如果您寫了 10vw,那么這將代表視口寬度的 10% 的長(zhǎng)度。

          視口代表你屏幕的大小,如果你在一個(gè)寬度為 1920 像素的大桌面上,10vw 將代表 192 像素。 如果您使用的是寬度為 300px 的手機(jī),那么 10vw 將只有 30px。

          VH

          vh 代表視口高度,與 vw 完全相同,但它代表高度而不是寬度。 這兩個(gè)單元可以組合使用,以輕松地使元素填滿屏幕的整個(gè)大小。

          VMIN 和 VMAX

          vmin 和 vmax 表示最大和最小視口尺寸。 例如,如果您使用的是 300 像素寬和 800 像素高的手機(jī),則 vmin 將代表視口的寬度,而 vmax 將代表設(shè)備的高度。 如果您需要根據(jù)屏幕的最小/最大尺寸調(diào)整元素的大小,這些單位非常有用。 例如,下面的 CSS 將創(chuàng)建一個(gè)盡可能大的正方形,而不會(huì)在任何方向溢出,因?yàn)樗肋h(yuǎn)不會(huì)大于最小屏幕尺寸的 100%。

          兩個(gè)新的視口單位

          CSS 一直在嘗試從嚴(yán)格的頂部/底部、左/右、高度/寬度模型轉(zhuǎn)變?yōu)楦鼊?dòng)態(tài)的開始/結(jié)束、塊/內(nèi)聯(lián)模型。 此更改的主要原因是它可以讓你更容易地采用不同的編寫方向。 如果您的整個(gè)應(yīng)用程序從水平書寫方向切換到垂直書寫方向,則頂部/底部或?qū)挾?高度的概念不一定意味著相同的事情,因?yàn)槿绻朐谖谋旧戏胶拖路教砑犹畛洌@將被表示 作為垂直書寫系統(tǒng)中的左右填充,而不是填充頂部和底部。 這就是 CSS 添加 vi 和 vb 視口單元的原因。

          VI

          vi 代表 Viewport Inline,代表文檔的內(nèi)聯(lián)方向。 在水平書寫方向上,這對(duì)應(yīng)于視口的寬度,而在垂直書寫方向上,這表示視口的高度。 記住 inline 方向的簡(jiǎn)單方法是記住它與文本的方向相同。 另一種記住這一點(diǎn)的方法是,如果您有兩個(gè)彼此相鄰的內(nèi)聯(lián)元素(例如兩個(gè)跨度),那么它們堆疊的方向就是您的內(nèi)聯(lián)方向。

          VB

          vb 代表 Viewport Block,代表文檔的塊方向。 這與 vi 相反,因此在水平書寫方向上,這將對(duì)應(yīng)于視口高度,在垂直文檔中,這將表示視口的寬度。 如果你很難記住這個(gè)單元,請(qǐng)記住塊方向始終是塊元素(例如兩個(gè) div)相互堆疊的方向。

          視口單位修飾符

          到目前為止,我們已經(jīng)介紹了六種主要類型的視口單元,但是當(dāng)您的視口可以改變大小時(shí),您可以將三種不同的修改器添加到單元中以使它們表現(xiàn)不同。例如,當(dāng)您在手機(jī)上瀏覽網(wǎng)頁時(shí),您可能會(huì)注意到向下滾動(dòng)時(shí) URL 欄會(huì)消失。發(fā)生這種情況時(shí),您的視口在技術(shù)上會(huì)更改大小,因?yàn)楝F(xiàn)在 URL 欄不再占據(jù)您的視口的一部分。當(dāng)前的 CSS 單元無法處理視口大小的這種變化,這就是添加這些修飾符的原因。

          這些修飾符是 s、l 和 d。為了使用修飾符,您只需將修飾符放在數(shù)字之后和單位之前,例如 10svw。這為 6 個(gè)視口單元中的每一個(gè)提供了 4 個(gè)總組合。大眾、svw、lvw 和 dvw。

          到目前為止,我們?cè)诒疚闹薪榻B的所有內(nèi)容都沒有使用完全有效的修飾符。當(dāng)您在單元上不使用修飾符時(shí),例如 10vw 或 10vh,瀏覽器將自動(dòng)默認(rèn)使用基于瀏覽器實(shí)現(xiàn)的 3 個(gè)修飾符之一。

          s修飾符

          s 修飾符代表 Small 并表示可能的最小視口。 在我們的手機(jī)示例中,這將是顯示 URL 欄時(shí)視口的大小。 如果您將一個(gè)元素設(shè)置為 100svh,它將占據(jù)屏幕高度的 100%,具體取決于顯示 URL 欄時(shí)的屏幕大小。 URL 欄是否可見無關(guān)緊要,此單元將始終根據(jù)顯示 URL 欄時(shí)的視口大小來確定其大小。


          l修飾符

          l 修飾符代表Large,代表最大可能的視口。 這幾乎與 s 修飾符相反。 在我們的手機(jī)示例中,這將是沒有顯示 URL 欄時(shí)的視口大小。 如果您將元素設(shè)置為 100lvh,則當(dāng) URL 欄不顯示時(shí),它會(huì)根據(jù)屏幕大小占據(jù)屏幕高度的 100%。 URL 欄是否可見無關(guān)緊要,如果 URL 欄未顯示,此單元將始終根據(jù)視口的大小確定其大小,這意味著如果您將元素設(shè)置為 100lvh 并且 URL 欄顯示它在技術(shù)上將 比屏幕大。

          d修飾符

          d 修飾符代表動(dòng)態(tài),代表當(dāng)前視口大小。 這就像 s 和 l 修飾符的組合。 在我們的手機(jī)示例中,無論 URL 欄是否顯示,這始終是當(dāng)前視口的大小。 如果我們的 URL 欄正在顯示,則 d 修飾符與 s 修飾符大小相同,而如果 URL 欄未顯示 d 修飾符與 l 修飾符大小相同。

          在顯示和隱藏 URL 欄之間的過渡期間,此單元將動(dòng)態(tài)縮放大小,因此它始終會(huì)填滿所有可用空間。 如果您需要確保元素始終根據(jù)視口調(diào)整大小,這很好,但可能會(huì)很費(fèi)力,因?yàn)殡S著大小的不斷變化,它會(huì)導(dǎo)致大量重繪。

          瀏覽器支持

          對(duì)于每一個(gè)很酷的 CSS 功能,您總是需要考慮瀏覽器支持,不幸的是,瀏覽器對(duì)這些新視口單元的支持不是很好。 目前,這些新單元的支持率為 15.2%,并且實(shí)際上僅在 Safari 和 Firefox 中得到支持。 缺乏支持的原因是該提案仍處于工作草案階段,這意味著它還處于生命周期的早期階段,距離成為官方 CSS 還很遠(yuǎn)。

          結(jié)論

          雖然 24 個(gè)單位可能聽起來很多,但實(shí)際上只有 6 個(gè)單位和三個(gè)相對(duì)簡(jiǎn)單的修飾符。 然而,這些簡(jiǎn)單的組合給了我們構(gòu)建完美 CSS 布局的強(qiáng)大能力。

          *CSS Viewport units(視口單位)**在過去幾年已經(jīng)出現(xiàn)了,隨著時(shí)間的推移,越來越多的開發(fā)人員開始使用它們。它們的好處在于為我們提供了一種不需要使用J avaScript 就能以動(dòng)態(tài)的方式調(diào)整大小的方法。而且,如果它失效,也有很多備用方案。

          在本文中,我們將學(xué)習(xí) CSS Viewport units(視口單位)以及如何使用它們,并用列舉一些常見問題及其解決方案和用例,讓我們開始吧。

          簡(jiǎn)介

          根據(jù)CSS規(guī)范,視口百分比單位相對(duì)于初始包含塊的大小,它是web頁面的根元素。

          視口單位為:vw,vh,vmin和vmax。

          vw單位表示根元素寬度的百分比。1vw等于視口寬度的1%。

          視口寬度

          vw單位表示根元素寬度的百分比,1vw等于視口寬度的1%。

          假設(shè)我們有一個(gè)元素與以下CSS:

          .element {
              width: 50vw;
          }

          當(dāng)視口寬度為500px時(shí),50vw計(jì)算如下

          width = 500*50% = 250px

          視口高度

          vh單位表示根元素高度的百分比,一個(gè)vh等于視口高度的1%。

          我們有一個(gè)元素與以下CSS:

          .element {
              height: 50vh;
          }

          當(dāng)視口高度為290px時(shí),70vh計(jì)算如下:

          height = 290*70% = 202px

          大家都說簡(jiǎn)歷沒項(xiàng)目寫,我就幫大家找了一個(gè)項(xiàng)目,還附贈(zèng)【搭建教程】。

          Vmin 單位

          vmin表示視口的寬度和高度中的較小值,也就是vw 和 vh 中的較小值。如果視口寬度大于其高度,則將根據(jù)高度計(jì)算該值。

          我們以下面的例子為例。

          我們有一個(gè)橫屏手機(jī),其中有一個(gè)元素具有vmin單元。在這種情況下,值將根據(jù)視口高度計(jì)算,因?yàn)樗∮趯挾取?/p>

          .element {
              padding-top: 10vmin;
              padding-bottom: 10vmin;
          }

          這是vmin的計(jì)算方式:

          正如你所猜測(cè)的,計(jì)算結(jié)果如下所示

          padding-top = (10% of height) = 10% * 164 = 16.4px 
          
          padding-bottom = (10% of height) = 10% * 164 = 16.4px

          Vmax 單位

          vmax與vmin相反,該值是vw 和 vh 中的較大值。

          我們以下面的例子為例。

          .element {
              padding-top: 10vmax;
              padding-bottom: 10vmax;
          }

          計(jì)算結(jié)果如下:

          padding-top = (10% of width) = 10% * 350 = 35px 
          padding-bottom = (10% of width) = 10% * 350 = 35px

          視口單位與百分比有何不同?

          視口單位基于頁面的根元素,而百分比則基于它們所在的容器。因此,它們彼此不同,但各自都有各自的用處。

          視口單位的用例

          字體大小

          CSS 視口單位非常適合響應(yīng)式排版。例如,我們可以將以下內(nèi)容用作文章標(biāo)題:

          .title {
              font-size: 5vw;
          }

          標(biāo)題的font-size將根據(jù)視口寬度增加或縮小。就像提供的字體大小是視口寬度的5%一樣。但是,如果沒有適當(dāng)?shù)臏y(cè)試就直接使用它可能會(huì)踩到坑。讓我們看下面的視頻:

          體大小變得非常小,這不利于可訪問性和用戶體驗(yàn)。據(jù)我所知,移動(dòng)設(shè)備上的最小字體大小不應(yīng)該不于14px。在GIF中,不小于10px。

          要解決該問題,我們需要為標(biāo)題提供最小字體大小,可以使用 calc()

          .title {
              font-size: calc(14px + 2vw);
          }

          calc()CSS函數(shù)將具有一個(gè)最小值14px,并在些基礎(chǔ)上添加2vw的值,有了這些,字體大小值就不會(huì)變得太小。

          另一個(gè)需要考慮的重要問題是字體大小在大屏幕上的表現(xiàn),例如 27” iMac。會(huì)發(fā)生什么呢?你猜對(duì)了,字體大小為95px左右,這是一個(gè)很大的值。為了防止這種情況,我們應(yīng)該在某些斷點(diǎn)上使用媒體查詢并更改字體大小。

          @media (min-width: 1800px) {
              .title {
                  font-size: 40px;
              }
          }

          通過重置字體大小,我們可以確保大小不會(huì)太大。您可能還需要添加多個(gè)媒體查詢,但這取決于你自己,也取決于項(xiàng)目的上下文。

          事例地址:https://codepen.io/shadeed/pen/fa989837c6379770cce49f0be6daa3e3

          全屏

          有時(shí),我們需要一個(gè)section來獲取100%的視口高度,為此,我們可以使用viewport高度單位。

          .section {
              height: 100vh;
              display: flex;
              flex-direction: column;
              justify-content: center;
              align-items: center;
          }

          通過添加 height: 100vh,我們可以確保section 高度將采取100%的視口。此外,我們添加了一些flexbox來處理水平和垂直居中的內(nèi)容。

          事例源碼:https://codepen.io/shadeed/pen/dc4e82f3c873cc64ae5c5bc4a3f4ef9f?editors=1100

          粘性布局(footer)

          在大屏幕上,網(wǎng)站內(nèi)容有時(shí)候很少,footer 沒有粘在底部。這很正常,也不被認(rèn)為是一種不好的做法。但是,還有改進(jìn)的余地。考慮下面代表問題的示圖:

          為了解決這個(gè)問題,我們需要給內(nèi)容(content)一個(gè)高度,它等于視口高度- (header + footer)。動(dòng)態(tài)地做到這一點(diǎn)是很困難的,但是使用CSS的視口,這是很容易的。

          第一種解決方案:calc和視口單位

          如果header 和footer的高度是固定的,那么可以將calc()函數(shù)和視口單位結(jié)合起來,如下所示:

          header,
          footer {
              height: 70px;
          }
          
          main {
              height: calc(100vh - 70px - 70px);
          }

          不能保證此解決方案始終有效,尤其是對(duì)于footer而言。在我的職業(yè)生涯中,我沒有使用固定高度的頁腳,因?yàn)樵诶绮煌钠聊怀叽缦拢薴ooter是不可行的。

          2.第二種解決方案:Flexbox和視口單位(推薦

          通過將100vh設(shè)置為body元素的高度,然后可以使用flexbox來使main元素占用剩余空間。

          body {
              min-height: 100vh;
              display: flex
              flex-direction: column;
          {
          
          main {
              /* This will make the main element take the remaining space dynamically */
              flex-grow: 1;
          }

          這樣,問題就解決了,無論內(nèi)容長(zhǎng)度如何,我們都有一個(gè)粘性footer。

          事例源碼:https://codepen.io/shadeed/pen/c735b26b8fa97ee685b38084448b3f85?editors=1100

          響應(yīng)式元素

          假設(shè)我們有一個(gè)作品集來展示我們的響應(yīng)式設(shè)計(jì)工作,并且我們有三種設(shè)備(移動(dòng)設(shè)備、平板電腦和筆記本電腦)。每個(gè)設(shè)備包含一個(gè)圖像。目標(biāo)使用 CSS 來響應(yīng)適配這些頁面。

          通過使用CSS網(wǎng)格和視口單位,我們可以使其完全動(dòng)態(tài)的響應(yīng)式。

          <div class="wrapper">
            <div class="device laptop"></div>
            <div class="device mobile"></div>
            <div class="device tablet"></div>
          </div>

          視口單位也可以用于grid- *屬性,也用于border,border-radius和其他屬性。

          .wrapper {
            display: grid;
            grid-template-columns: repeat(20, 5vw); 
            grid-auto-rows: 6vw;
          }
          
          .mobile { 
            position: relative;
            z-index: 1;
            grid-column: 2 / span 3;
            grid-row: 3 / span 5;
          }
           
          .tablet {
            position: relative;
            z-index: 1;
            grid-column: 13 / span 7; 
            grid-row: 4 / span 4;
            border-bottom: 1vw solid #a9B9dd;
            border-right: solid 3vw #a9B9dd;
          }
           
          .laptop {
            position: relative;
            grid-column: 3/span 13;
            grid-row: 2 / span 8;
          }
          
          /* Viewport units are used for the bottom, left, right, height, and border-radius. Isn't that cool? */
          .laptop:after {
              content:"";
              position:absolute;
              bottom: -3vw;
              left: -5.5vw;
              right: -5.5vw;
              height: 3vw;
              background-color: #a9B9dd;
              border-radius: 0 0 1vw 1vw;
          }

          事例源碼:https://codepen.io/shadeed/pen/2da0f2b70699769f8de3220ff4465bc6?editors=1100

          從容器中掙脫出來

          我注意到一個(gè)用例最適合編輯版面。一個(gè)子元素,即使父元素的寬度受到限制,它也會(huì)占據(jù)視口100%的寬度。考慮下面:

          .break-out {
              width: 100vw;
              position: relative;
              left: 50%;
              right: 50%;
              margin-left: -50vw;
              margin-right: -50vw;
          }

          讓我們把它分解一下,這樣我們就能一點(diǎn)一點(diǎn)地理解所有這些屬性是如何工作的。

          1.添加 width: 100vw

          最重要的一步,將圖像的寬度設(shè)置為100%的視口。

          2.添加 margin-left: -50vw

          為了使圖像居中,我們需要給它一個(gè)負(fù)的邊距,其寬度為視口寬度的一半。

          3.添加 left: 50%

          最后,我們需要將圖像向右推,其值為父寬度的50%。

          事例地址:https://codepen.io/shadeed/pen/828f12b1ef7fa7211584ff5c7b82d2fa?editors=1100

          垂直和水平間距

          我想到的另一個(gè)有趣的用例是使用視口單位來表示元素之間的間距。這可以與margin、top、bottom和grid-gap等值一起使用。使用時(shí),間距將基于視口寬度或高度,這對(duì)于使布局更具動(dòng)態(tài)性可能很有用。

          模態(tài)框

          對(duì)于模態(tài),我們需要將它們從視口頂部推入。通常,使用top屬性進(jìn)行此操作,并使用百分比或像素值。但是,對(duì)于視口單位,我們可以添加一個(gè)可以根據(jù)視口高度改變的間距。

          .modal-body {
              top: 20vh;
          }

          事例地址:https://codepen.io/shadeed/pen/f77a0d58947c64c2b3dadbd887700db5?editors=1100

          頁面頭部

          頁面header 是充當(dāng)頁面介紹的部分。它通常具有標(biāo)題和描述,并且其中上下邊緣的高度固定或填充

          例如,有以下的CSS的樣式:

          .page-header {
              padding-top: 10vh;
              padding-bottom: 10vh;
          }
          
          .page-header h2 {
              margin-bottom: 1.5vh;
          }

          使用vh單位用于頁面標(biāo)題的 paddding,以及標(biāo)題下方的邊距。注意間距如何變化!

          事例源碼:https://codepen.io/shadeed/pen/43024fa031519e316e95bb3ce47f2b22?editors=1100

          Vmin 和 Vmax 用例

          該用例是關(guān)于頁面標(biāo)題元素的頂部和底部padding 。當(dāng)視口較小(移動(dòng))時(shí),通常會(huì)減少padding。通過使用vmin,我們可以在視口較小尺寸(寬度或高度)的基礎(chǔ)上獲得合適的頂部和底部 padding。

          .page-header {
              padding: 10vmin 1rem;
          }

          事例源碼:https://codepen.io/shadeed/pen/f335c2f43b960a2c70ea057228ddc5b9?editors=0100

          縱橫比

          我們可以使用vw單位創(chuàng)建響應(yīng)元素,以保持其縱橫比,而不管視口大小如何。

          首先,需要先確定所需的縱橫比,對(duì)于此示例,使用9/16。

          section {
              /* 9/16 * 100 */
              height: 56.25vw;
          }

          事例源碼:https://codepen.io/shadeed/pen/dc4e82f3c873cc64ae5c5bc4a3f4ef9f?editors=0100

          流行的頂部邊框

          你知道大多數(shù)網(wǎng)站使用的頂部邊框嗎?通常,它的顏色與品牌顏色相同,這會(huì)賦予一些個(gè)性。

          我們支持邊框的初始值為3px。如何將固定值轉(zhuǎn)換為視口對(duì)象?下面是如何計(jì)算它的等效的vw。

          vw = (Pixel Value / Viewport width) * 100

          視口寬度用于估計(jì)像素值與所需vw單位之間的比率。

          對(duì)于我們的示例,我們?yōu)?header 添加以下樣式:

          .header {
              border-top: 4px solid #8f7ebc;  
          }

          在我的情況下,視口寬度為1440(這不是固定數(shù)字,請(qǐng)用你自己的數(shù)字替換)

          vw = (4 / 1440) * 100 = 0.277
          .header {
              border-top: 0.277vw solid #8f7ebc;  
          }

          更好的是,我們可以使用一個(gè)基本像素值,而視口單元可以是一個(gè)附加的。

          .header {
              border-top: calc(2px + 0.138vw) solid $color-main;
          }

          移動(dòng)端滾動(dòng)問題

          移動(dòng)設(shè)備中存在一個(gè)常見問題,即使使用100vh,也會(huì)滾動(dòng),原因是地址欄的高度可見。Louis Hoebregts 寫了一篇關(guān)于這個(gè)問題的文章,并給出了一個(gè)簡(jiǎn)單的解決方案。

          .my-element {
            height: 100vh; /* 不支持自定義屬性的瀏覽器的回退 */
            height: calc(var(--vh, 1vh) * 100);
          }
          // 首先,我們得到視口高度,我們乘以 1% 得到一個(gè)vh單位的值
          let vh = window.innerHeight * 0.01;
          // 然后,將`--vh`自定義屬性中的值設(shè)置為文檔的根目錄一個(gè)屬性
          document.documentElement.style.setProperty('--vh', `${vh}px`);

          事例源碼:https://codepen.io/shadeed/pen/1d18ca2d23ec0038c759dc62dc3fd8c3?editors=0110


          作者:Ahmad shaded 譯者:前端小智 來源:sitepoint

          原文:https://ishadeed.com/viewport-units/


          主站蜘蛛池模板: 国产无吗一区二区三区在线欢| tom影院亚洲国产一区二区| 国内自拍视频一区二区三区| 国产成人精品无码一区二区老年人| 又紧又大又爽精品一区二区| 中文字幕在线视频一区| 亚洲精品伦理熟女国产一区二区| 国产精品一区二区久久精品无码| 精品国产AV一区二区三区| 国产一在线精品一区在线观看| 天堂Av无码Av一区二区三区| 亚洲一区免费观看| 538国产精品一区二区在线| 亚洲AV日韩AV一区二区三曲| 无码av免费一区二区三区| 国产高清精品一区| 国产伦一区二区三区免费| 色窝窝无码一区二区三区色欲| 一区二区三区视频网站| 国产精品视频一区| 极品尤物一区二区三区| 亚洲无圣光一区二区| 亚洲av一综合av一区| 99久久精品费精品国产一区二区| 国产成人精品亚洲一区| 亚洲精品伦理熟女国产一区二区| 久久人做人爽一区二区三区| 国产婷婷色一区二区三区| 久久久精品日本一区二区三区| 精品在线一区二区| 色系一区二区三区四区五区 | 韩国福利一区二区美女视频 | 自慰无码一区二区三区| 一区三区三区不卡| 亚州国产AV一区二区三区伊在| 国产萌白酱在线一区二区| 日韩一区在线视频| 麻豆精品一区二区综合av| 国产一区二区精品久久91| 国产精品一区电影| 日本一区二区三区中文字幕|