最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

VUE3大屏自適應(yīng)布局的幾種實現(xiàn)方式

 更新時間:2025年10月20日 10:49:48   作者:FAIRY_STARS  
本文主要介紹了基于SCSS自定義vw和vh函數(shù)實現(xiàn)響應(yīng)式布局的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 視口單位布局 (Viewport Units)

使用 vwvh 單位來實現(xiàn)響應(yīng)式布局:

.full-screen {
  width: vw(1920);
  height: vh(1080);
  padding: vh(5) vw(5) vh(5) vw(5);
}

.header-title {
  font-size: vw(40);
  line-height: vh(80);
}

這里的 vw()vh() 函數(shù)是自定義的 SCSS 函數(shù),用于將設(shè)計稿尺寸(1920×1080)轉(zhuǎn)換為視口單位。

SCSS函數(shù):

@use "sass:math";

$designWidth: 1920;
$designHeight: 1080;

@function vw($px){
    @return math.div($px, $designWidth) * 100vw;
}

@function vh($px){
    @return math.div($px, $designHeight) * 100vh;
}

需要在 vite.config.js 中配置,非常重要,它實現(xiàn)了 SCSS 預(yù)處理器的全局變量和函數(shù)注入功能:

css: {
  preprocessorOptions: {
    scss: {
      additionalData: '@import "@/styles/utils.scss";'
    },
  },
}

作用解釋

1. 全局 SCSS 變量和函數(shù)注入

這段配置會在編譯每個 SCSS 文件時,自動在文件開頭插入 @import "@/styles/utils.scss";。這意味著:

  • 無需在每個 Vue 組件的 <style> 標(biāo)簽中手動導(dǎo)入 utils.scss
  • 所有 SCSS 變量、混合宏(mixin)和函數(shù)都可以在所有組件中直接使用

2. 實際效果

由于這個配置,可以在任何組件的樣式中直接使用 vw()vh() 函數(shù):

<template>
  <div class="container">...</div>
</template>

<style scoped lang="scss">
.container {
  width: vw(300); // 直接使用,無需導(dǎo)入
  height: vh(200); // 直接使用,無需導(dǎo)入
  padding: vh(10) vw(20);
}
</style>

注意事項

  1. 避免副作用:確保 utils.scss 中不包含實際 CSS 輸出,只包含變量、混合宏和函數(shù)
  2. 性能影響:雖然輕微,但每個樣式文件都會額外編譯注入的內(nèi)容
  3. 命名沖突:全局注入可能導(dǎo)致命名沖突,需注意命名規(guī)范

函數(shù)工作原理

  1. 設(shè)計基準(zhǔn):以 1920×1080 分辨率作為設(shè)計基準(zhǔn)
  2. 單位轉(zhuǎn)換
    • vw($px):將像素值轉(zhuǎn)換為相對于視口寬度的百分比
    • vh($px):將像素值轉(zhuǎn)換為相對于視口高度的百分比
  3. 計算方式
    • math.div($px, $designWidth) * 100vw:計算元素寬度占設(shè)計稿寬度的比例,然后轉(zhuǎn)換為視口寬度單位
    • math.div($px, $designHeight) * 100vh:計算元素高度占設(shè)計稿高度的比例,然后轉(zhuǎn)換為視口高度單位

使用示例

.header {
  width: vw(1900); // 轉(zhuǎn)換為約 98.96vw (1900/1920*100)
  height: vh(100); // 轉(zhuǎn)換為約 9.26vh (100/1080*100)
  font-size: vh(40); // 轉(zhuǎn)換為約 3.7vh
}

.content-box {
  margin: vh(5) 0;
  padding: vh(5) vw(5) vh(10) vw(5);
}

注意事項

  1. 極端比例屏幕(如超寬屏)可能需要額外媒體查詢調(diào)整
  2. 字體大小使用視口單位可能導(dǎo)致可讀性問題,需要謹(jǐn)慎使用
  3. 最小字體大小可能需要設(shè)置限制,防止在小屏幕上過小

這種方法是實現(xiàn)大屏自適應(yīng)布局的高效方式,特別適合數(shù)據(jù)可視化類的大屏項目。

2. Flex 彈性布局

整體布局使用 Flexbox 實現(xiàn):

<div class="full-screen">
  <div class="header">...</div>
  <div class="center">...</div>
  <div class="footer">...</div>
</div>
.full-screen {
  display: flex;
  flex-direction: column;
}

.center {
  display: flex;
  // flex-direction: column;
}

3. 圖表自適應(yīng)

ECharts 圖表通過監(jiān)聽窗口 resize 事件實現(xiàn)自適應(yīng):

window.addEventListener('resize', () => {
  myChart.resize();
});

4. 全屏切換功能

使用 screenfull 庫實現(xiàn)全屏切換:

let fullScreen = () => {
  if (screenfull.isEnabled) {
    screenfull.toggle();
  }
};

5. 縮放控制

通過監(jiān)聽滾輪事件實現(xiàn)頁面縮放:

window.addEventListener('wheel', function(event) {
  if (event.ctrlKey || event.metaKey) {
    if (event.deltaY > 0) {
      document.body.style.zoom = (parseFloat(getComputedStyle(document.body).zoom) || 1) * 1.1;
    }
    if (event.deltaY < 0) {
      document.body.style.zoom = (parseFloat(getComputedStyle(document.body).zoom) || 1) / 1.1;
    }
  }
});

6. 柵格系統(tǒng)

使用 Element Plus 的柵格系統(tǒng)進(jìn)行列布局:

<el-row class="header" :gutter="20">
  <el-col :span="7" class="header-time">...</el-col>
  <el-col :span="10" class="header-title">...</el-col>
  <el-col :span="6">...</el-col>
</el-row>

到此這篇關(guān)于VUE3大屏自適應(yīng)布局的幾種實現(xiàn)方式的文章就介紹到這了,更多相關(guān)VUE3大屏自適應(yīng)布局內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue下拉菜單組件(含搜索)的實現(xiàn)代碼

    vue下拉菜單組件(含搜索)的實現(xiàn)代碼

    這篇文章主要介紹了vue下拉菜單組件(含搜索)的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • vue router返回到指定的路由的場景分析

    vue router返回到指定的路由的場景分析

    這篇文章主要介紹了vue router返回到指定的路由的場景分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • vue中 v-for循環(huán)的用法詳解

    vue中 v-for循環(huán)的用法詳解

    這篇文章主要介紹了vue中 v-for循環(huán)的用法詳解,本文通過實例代碼的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • vue跳轉(zhuǎn)時根據(jù)url錨點(#xxx)實現(xiàn)頁面內(nèi)容定位的方法

    vue跳轉(zhuǎn)時根據(jù)url錨點(#xxx)實現(xiàn)頁面內(nèi)容定位的方法

    本前端仔在做頁面跳轉(zhuǎn)的時候,被要求跳轉(zhuǎn)到頁面時候,把對應(yīng)部分的內(nèi)容自動滾動到頂部,我一開始想到的就是根據(jù)錨點<a href="#xxid">進(jìn)行處理,但是發(fā)現(xiàn)不太好實現(xiàn),于是便自己研究了一個比較取巧的方法,需要的朋友可以參考下
    2024-04-04
  • vue將html頁面生成高清晰pdf文件的方法

    vue將html頁面生成高清晰pdf文件的方法

    最近工作中遇到個需求,需要實現(xiàn)個可視化圖表頁的PDF文件導(dǎo)出,所以下面這篇文章主要給大家介紹了關(guān)于利用vue如何將html頁面生成高清晰pdf文件的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • react+vite動態(tài)導(dǎo)入報錯@vite-ignore的問題及解決

    react+vite動態(tài)導(dǎo)入報錯@vite-ignore的問題及解決

    這篇文章主要介紹了react+vite動態(tài)導(dǎo)入報錯@vite-ignore的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue2 的12種組件通訊

    Vue2 的12種組件通訊

    之前文章我們描述給過Vue3 的七通信使用,今天中五篇文章我們再來看看Vue2 的通信使用寫法的相關(guān)資料,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • Vue數(shù)字輸入框組件示例代碼詳解

    Vue數(shù)字輸入框組件示例代碼詳解

    很多朋友經(jīng)常遇到這樣的功能,只允許輸入數(shù)字,允許設(shè)置初始值、最大值、最小值,今天小編給大家分享示例代碼給大家介紹vue數(shù)字輸入框功能,感興趣的朋友一起看看吧
    2020-01-01
  • vue實現(xiàn)列表滑動下拉加載數(shù)據(jù)的方法

    vue實現(xiàn)列表滑動下拉加載數(shù)據(jù)的方法

    文章介紹了如何使用Vue實現(xiàn)列表滑動下拉加載數(shù)據(jù)的功能,通過監(jiān)聽滾動事件,檢測用戶是否滾動到底部,然后動態(tài)加載更多數(shù)據(jù),附帶了實現(xiàn)思路和案例代碼,感興趣的朋友一起看看吧
    2024-11-11
  • element-plus table合并列、合計行、表格填報添加驗證的示例

    element-plus table合并列、合計行、表格填報添加驗證的示例

    這篇文章主要介紹了element-plus table合并列、合計行、表格填報添加驗證的示例,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-06-06

最新評論

绵阳市| 揭西县| 黄浦区| 雷山县| 广汉市| 星座| 开封市| 嘉荫县| 新津县| 军事| 石台县| 海宁市| 利津县| 湘潭县| 桃园市| 同德县| 武安市| 华亭县| 枣强县| SHOW| 长武县| 宾川县| 嘉祥县| 长泰县| 吉木乃县| 平和县| 芮城县| 徐闻县| 竹山县| 靖边县| 吉林省| 克东县| 昌邑市| 平潭县| 繁昌县| 彭山县| 亚东县| 郎溪县| 宣城市| 章丘市| 裕民县|