亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

純css3使用vw和vh實現自適應的方法

2024-07-11 08:59:00
字體:
來源:轉載
供稿:網友

響應式布局的實現依靠媒體查詢( Media Queries )來實現,選取主流設備寬度尺寸作為斷點針對性寫額外的樣式進行適配,但這樣做會比較麻煩,只能在選取的幾個主流設備尺寸下呈現完美適配。

即使是通過 rem 單位來實現適配,也是需要內嵌一段腳本去動態計算根元素大小。·

近年來,隨著移動端對視口單位的支持越來越成熟、廣泛,使得我們可以嘗試一種新的辦法去真正地適配所有設備尺寸。

認識視口單位( Viewport units )

首先,我們要了解什么是視口。

在業界,極為推崇的一種理論是 Peter-Paul Koch (江湖人稱“PPK大神”)提出的關于視口的解釋——在桌面端,視口指的是在桌面端,指的是瀏覽器的可視區域;而在移動端較為復雜,它涉及到三個視口:分別是 Layout Viewport(布局視口)、 Visual Viewport(視覺視口)、Ideal Viewport。

而視口單位中的“視口”,在桌面端,毫無疑問指的就是瀏覽器的可視區域;但是在移動端,它指的則是三個 Viewport 中的 Layout Viewport 。

視口單位中的“視口”

根據CSS3規范,視口單位主要包括以下4個:

  1. vw : 1vw 等于視口寬度的1%
  2. vh : 1vh 等于視口高度的1%
  3. vmin : 選取 vw 和 vh 中最小的那個
  4. vmax : 選取 vw 和 vh 中最大的那個

視口單位區別于%單位,視口單位是依賴于視口的尺寸,根據視口尺寸的百分比來定義的;而%單位則是依賴于元素的祖先元素。

用視口單位度量,視口寬度為100vw,高度為100vh(左側為豎屏情況,右側為橫屏情況)

例如,在桌面端瀏覽器視口尺寸為650px,那么 1vw = 650 * 1% = 6.5px(這是理論推算的出,如果瀏覽器不支持0.5px,那么實際渲染結果可能是7px)。

兼容性

其兼容性如下圖所示,可以知道:在移動端 ios 8 以上以及 Android 4.4 以上獲得支持,并且在微信 x5 內核中也得到完美的全面支持。

利用視口單位適配頁面

對于移動端開發來說,最為重要的一點是如何適配頁面,實現多終端的兼容,不同的適配方式各有千秋,也各有缺點。

就主流的響應式布局、彈性布局來說,通過 Media Queries 實現的布局需要配置多個響應斷點,而且帶來的體驗也對用戶十分的不友好:布局在響應斷點范圍內的分辨率下維持不變,而在響應斷點切換的瞬間,布局帶來斷層式的切換變化,如同卡帶的唱機般“咔咔咔”地一下又一下。

而通過采用rem單位的動態計算的彈性布局,則是需要在頭部內嵌一段腳本來進行監聽分辨率的變化來動態改變根元素字體大小,使得 CSS 與 JS 耦合了在一起。

有沒有辦法能夠解決這樣的問題呢?

答案是肯定的,通過利用視口單位實現適配的頁面,是既能解決響應式斷層問題,又能解決腳本依賴的問題的。

做法一:僅使用vw作為CSS單位

在僅使用 vw 單位作為唯一應用的一種 CSS 單位的這種做法下,我們遵守:

1.對于設計稿的尺寸轉換為vw單位,我們使用Sass函數編譯

//iPhone 6尺寸作為設計稿基準$vm_base: 375; @function vw($px) {    @return ($px / 375) * 100vw;}

2.無論是文本還是布局高寬、間距等都使用 vw 作為 CSS 單位

.mod_nav {    background-color: #fff;    &_list {        display: flex;        padding: vm(15) vm(10) vm(10); // 內間距        &_item {            flex: 1;            text-align: center;            font-size: vm(10); // 字體大小            &_logo {                display: block;                margin: 0 auto;                width: vm(40); // 寬度                height: vm(40); // 高度                img {                    display: block;                    margin: 0 auto;                    max-width: 100%;                }            }            &_name {                margin-top: vm(2);            }        }    }}

3.1物理像素線(也就是普通屏幕下 1px ,高清屏幕下 0.5px 的情況)采用 transform 屬性 scale 實現。

//code from http://caibaojian.com/vw-vh.html.mod_grid {    position: relative;    &::after {        // 實現1物理像素的下邊框線        content: '';        position: absolute;        z-index: 1;        pointer-events: none;        background-color: #ddd;        height: 1px;        left: 0;        right: 0;        top: 0;        @media only screen and (-webkit-min-device-pixel-ratio: 2) {            -webkit-transform: scaleY(0.5);            -webkit-transform-origin: 50% 0%;        }    }    ...}

4.對于需要保持高寬比的圖,應改用 padding-top 實現

.mod_banner {    position: relative;    padding-top: percentage(100/700); // 使用padding-top    height: 0;    overflow: hidden;    img {        width: 100%;        height: auto;        position: absolute;        left: 0;        top: 0;     }}

由此,我們能夠實現一個常見布局的頁面效果如下:

做法二:搭配vw和rem,布局更優化

這樣的頁面雖然看起來適配得很好,但是你會發現由于它是利用視口單位實現的布局,依賴于視口大小而自動縮放,無論視口過大還是過小,它也隨著視口過大或者過小,失去了最大最小寬度的限制。

當然,你可以不在乎這樣微小的不友好用戶體驗,但我們還是嘗試下追求修復這樣的小瑕疵吧。

于是,聯想到不如結合rem單位來實現布局?rem 彈性布局的核心在于動態改變根元素大小,那么我們可以通過:

  1. 給根元素大小設置隨著視口變化而變化的 vw 單位,這樣就可以實現動態改變其大小。
  2. 限制根元素字體大小的最大最小值,配合 body 加上最大寬度和最小寬度

這樣我們就能夠實現對布局寬度的最大最小限制。因此,根據以上條件,我們可以得出代碼實現如下:

// rem 單位換算:定為 75px 只是方便運算,750px-75px、640-64px、1080px-108px,如此類推$vm_fontsize: 75; // iPhone 6尺寸的根元素大小基準值@function rem($px) {     @return ($px / $vm_fontsize ) * 1rem;}// 根元素大小使用 vw 單位$vm_design: 750;html {    font-size: ($vm_fontsize / ($vm_design / 2)) * 100vw;     // 同時,通過Media Queries 限制根元素最大最小值    @media screen and (max-width: 320px) {        font-size: 64px;    }    @media screen and (min-width: 540px) {        font-size: 108px;    }}// body 也增加最大最小寬度限制,避免默認100%寬度的 block 元素跟隨 body 而過大過小body {    max-width: 540px;    min-width: 320px;}

小結

相對于做法一,個人比較推崇做法二,有以下兩點原因:

第一,做法二相對來說用戶視覺體驗更好,增加了最大最小寬度的限制;

第二,更重要是,如果選擇主流的rem彈性布局方式作為項目開發的適配頁面方法,那么做法二更適合于后期項目從 rem 單位過渡到 vw 單位。只需要通過改變根元素大小的計算方式,你就可以不需要其他任何的處理,就無縫過渡到另一種CSS單位,更何況vw單位的使用必然會成為一種更好適配方式,目前它只是礙于兼容性的支持而得不到廣泛的應用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人福利在线视频| 亚洲欧美日韩图片| www.色综合| 欧美国产日本高清在线| 日韩高清有码在线| 欧美激情视频给我| 成人www视频在线观看| 日韩免费不卡av| 亚洲视频国产视频| 亚洲精品中文字幕女同| 久久亚洲国产精品成人av秋霞| 日韩精品在线第一页| 亚洲一区二区中文字幕| 久久久久久久国产| 久久综合免费视频| 国产精品香蕉av| 国产91成人video| 亚洲人永久免费| 亚洲乱码一区二区| 久久精品国产2020观看福利| 国产精品第一视频| 91伊人影院在线播放| 欧美大片免费看| 欧美多人爱爱视频网站| 欧美性猛交xxxx免费看漫画| 57pao精品| 日韩精品中文在线观看| 欧美激情精品久久久久久免费印度| 国产丝袜高跟一区| 国产精品普通话| 国产欧美亚洲精品| www.日韩免费| 久久国产加勒比精品无码| 亚洲精品之草原avav久久| 亚洲国产成人久久| 亚洲最新中文字幕| 97视频免费看| 精品呦交小u女在线| 成人做爽爽免费视频| 久久久久国产精品www| 91精品国产综合久久香蕉的用户体验| 久久激情五月丁香伊人| 国模极品一区二区三区| 亚洲自拍av在线| 97欧美精品一区二区三区| 欧美黄网免费在线观看| 国产91精品久久久久| 国产一区二区三区在线观看网站| 日韩精品极品视频| 亚洲91精品在线| 国产精品久久婷婷六月丁香| 欧美丰满片xxx777| 91精品啪aⅴ在线观看国产| 社区色欧美激情 | 国产午夜精品美女视频明星a级| 92国产精品久久久久首页| 国产日产久久高清欧美一区| 川上优av一区二区线观看| 日韩精品免费在线| 伊人伊成久久人综合网站| 成人妇女免费播放久久久| 日韩av免费在线观看| 欧美日韩福利电影| 国产高清在线不卡| 国产精品入口免费视频一| 自拍偷拍亚洲精品| 91久久久久久久久久| 亚洲男人的天堂网站| 精品欧美aⅴ在线网站| 亚洲天堂av网| 亚洲风情亚aⅴ在线发布| 成人久久18免费网站图片| 中文字幕欧美国内| 成人欧美一区二区三区在线| 中文综合在线观看| 欧美性猛交xxxx免费看久久久| 欧美极品少妇与黑人| 日韩中文在线视频| 久久久精品美女| 国产精品揄拍一区二区| 久久精品国产精品亚洲| 美女黄色丝袜一区| 国产自摸综合网| 欧美大片在线看免费观看| 亚洲欧美一区二区三区久久| 国产精品视频久久久久| 91伊人影院在线播放| 日本精品一区二区三区在线播放视频| 欧美视频13p| 日韩视频免费中文字幕| 午夜精品一区二区三区在线视频| 日韩成人在线网站| 欧美一级电影免费在线观看| 亚洲日本成人女熟在线观看| 午夜精品久久久久久99热软件| 日韩视频免费观看| 国产精品丝袜久久久久久不卡| 91精品久久久久久久久久久| 日韩美女视频免费在线观看| 欧美在线不卡区| 午夜精品一区二区三区在线视频| 精品国产一区二区在线| 日本一区二区在线免费播放| 欧美精品一本久久男人的天堂| 亚洲欧美日韩国产中文| 久久精品免费播放| 欧美一级淫片videoshd| 欧美特黄级在线| 97超级碰碰碰久久久| 欧美黑人一区二区三区| 亚洲欧美一区二区三区四区| 青青草精品毛片| 亚洲成色777777在线观看影院| 欧美丝袜第一区| 色偷偷av一区二区三区乱| 亚洲国产成人精品一区二区| 欧美视频二区36p| 亚洲999一在线观看www| 91精品国产91久久久久久吃药| 欧美最猛性xxxxx亚洲精品| 亚洲第一页中文字幕| 欧美中文在线字幕| 岛国视频午夜一区免费在线观看| 91精品久久久久久久久不口人| 亚洲国产精品va在看黑人| 91社影院在线观看| 日韩三级影视基地| 91精品久久久久久久久久久| 中文字幕在线看视频国产欧美在线看完整| 欧美日韩在线另类| 97热在线精品视频在线观看| 国产精品久久久久久久久久久新郎| 欧美高清在线视频观看不卡| 国产精品久久77777| 亚洲精品一区av在线播放| 成人欧美一区二区三区在线湿哒哒| 亚洲精品乱码久久久久久按摩观| 播播国产欧美激情| 精品久久久久久久中文字幕| 97在线观看视频国产| 国产亚洲人成网站在线观看| 午夜精品久久久久久久99黑人| 亚洲免费视频网站| 久久91精品国产91久久跳| 久久天天躁夜夜躁狠狠躁2022| 成人久久一区二区| 97国产在线观看| 亚洲午夜女主播在线直播| 精品亚洲一区二区三区| 国产福利视频一区| 97视频免费看| 久久久亚洲影院| 欧美精品久久久久久久| 日韩成人性视频| 68精品国产免费久久久久久婷婷| 欧美日韩国产黄| 欧美做爰性生交视频| 国产剧情久久久久久| 久久久久免费视频| 亚洲欧美一区二区三区情侣bbw| 久久精品国产清自在天天线| 久久久久久久久网站| 亚洲人a成www在线影院| 国内精品模特av私拍在线观看|