首頁  >  文章  >  web前端  >  關於css3的單位vw和vh的使用

關於css3的單位vw和vh的使用

不言
不言原創
2018-06-20 11:44:233106瀏覽

這篇文章主要介紹了css3新單位vw、vh的使用教程,本文透過實例代碼給大家介紹vw、vh、vmin、vmax 的含義及vw、vh與%百分比的區別,感興趣的朋友一起看看吧

響應式佈局的單位我們第一時間會想到透過rem單位來實現適配,但是它還需要內嵌一段腳本去動態計算跟元素大小。

例如:

(function (doc, win) {
  let docEl = doc.documentElement
  let resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
  let recalc = function () {
    var clientWidth = docEl.clientWidth
    if (!clientWidth) return
    docEl.style.fontSize = 14 * (clientWidth / 320) + 'px'
  }
  if (!doc.addEventListener) return
  win.addEventListener(resizeEvt, recalc, false)
  doc.addEventListener('DOMContentLoaded', recalc, false)
})(document, window)

那有沒有一個單位不需要JS和CSS耦合在一起的單位?答案是有的,就是vw/vh。

vw = view width
vh = view height

這兩個單位是CSS3引入的,以上稱為視口單位允許我們更接近瀏覽器視窗定義大小。

vw、vh、vmin、vmax 的意思

(1)vw、vh、vmin、vmax 是一種視窗單位,也是相對單位。它相對的不是父節點或頁面的根節點。而是由視窗(Viewport)大小來決定的,單位 1,代表類似 1%。

視窗(Viewport)是你的瀏覽器實際顯示內容的區域—,換句話說是你的不包含工具列和按鈕的網頁瀏覽器。

(2)具體描述如下:

  • vw:視窗寬度的百分比(1vw 代表視窗的寬度為1%)

  • vh:視窗高度的百分比

  • vmin:目前vw 和vh 中較小的一個值

  • vmax:目前vw 和vh 中較大的一個值

vw、vh 與% 百分比的差異

(1)% 是相對於父元素的大小設定的比率,vw、vh 是視窗大小決定的。

(2)vw、vh 優點在於能夠直接取得高度,而用 % 在沒有設定 body 高度的情況下,是無法正確獲得可視區域的高度的,所以這是挺不錯的優勢。

vmin、vmax 用處

#做移動頁面開發時,如果使用vw、wh 設定字體大小(例如5vw),在垂直螢幕和橫屏狀態下顯示的字體大小是不一樣的。

由於 vmin 和 vmax 是目前較小的 vw 和 vh 和目前較大的 vw 和 vh。這裡就可以用到 vmin 和 vmax。使得文字大小在橫向螢幕下保持一致。

瀏覽器相容性

(1)桌面PC

  • Chrome:自26 版起就完美支援(2013年2月)

  • Firefox:自19 版起就完美支援(2013年1月)

  • Safari :自6.1 版起就完美支持(2013年10月)

  • #Opera:自15 版起就完美支持(2013年7月)

IE:自IE10 起(包括Edge)到現在還只是部分支援(不支援vmax,同時vm 代替vmin)

(2)行動裝置

Android:自4.4 版起就完美支援(2013年12月)

iOS:自iOS8 版起就完美支援(2014年9月)

如何利用視窗單位適應頁面

僅使用vw作為CSS單位

#1.根據設計稿的尺寸轉換為vw單位(SASS函數編譯)

//iPhone 6尺寸作为设计稿基准
$vm_base: 375;
@function vm($px) {
    @return ($px / 375) * 100vw;
}

2.無論是文字或佈局高寬、間距等都使用vw

< p class="mod_nav">
            < nav class="mod_nav_list" v-for="n in 5">
                < a href="#" class="mod_nav_list_item">
                    < span class="mod_nav_list_item_logo">
                < img src="http://jdc.jd.com/img/80">
                    < /span>
                    < p class="mod_nav_list_item_name">导航入口< /p>
                < /a>
            < /nav>
< /p>
.mod_nav {
    background: #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);
            }
        }
    }
}

最優做法-搭配vw和rem

#使用vm作為css單位代碼量確實減少很多,但你會發現它是利用視口單位實現,依賴視口大小而自動縮放,失去了最大最小寬度的限制。

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

給根元素大小設定隨著視窗變化而變化的 vw 單位,這樣就可以實現動態改變其大小。

限制根元素字體大小的最大最小值,配合 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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于CSS代码如何书写规范

以上是關於css3的單位vw和vh的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn