VUE3大屏自適應(yīng)布局的幾種實(shí)現(xiàn)方式
1. 視口單位布局 (Viewport Units)
使用 vw 和 vh 單位來(lái)實(shí)現(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è)計(jì)稿尺寸(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 中配置,非常重要,它實(shí)現(xiàn)了 SCSS 預(yù)處理器的全局變量和函數(shù)注入功能:
css: {
preprocessorOptions: {
scss: {
additionalData: '@import "@/styles/utils.scss";'
},
},
}
作用解釋
1. 全局 SCSS 變量和函數(shù)注入
這段配置會(huì)在編譯每個(gè) SCSS 文件時(shí),自動(dòng)在文件開(kāi)頭插入 @import "@/styles/utils.scss";。這意味著:
- 無(wú)需在每個(gè) Vue 組件的
<style>標(biāo)簽中手動(dòng)導(dǎo)入utils.scss - 所有 SCSS 變量、混合宏(mixin)和函數(shù)都可以在所有組件中直接使用
2. 實(shí)際效果
由于這個(gè)配置,可以在任何組件的樣式中直接使用 vw() 和 vh() 函數(shù):
<template>
<div class="container">...</div>
</template>
<style scoped lang="scss">
.container {
width: vw(300); // 直接使用,無(wú)需導(dǎo)入
height: vh(200); // 直接使用,無(wú)需導(dǎo)入
padding: vh(10) vw(20);
}
</style>
注意事項(xiàng)
- 避免副作用:確保
utils.scss中不包含實(shí)際 CSS 輸出,只包含變量、混合宏和函數(shù) - 性能影響:雖然輕微,但每個(gè)樣式文件都會(huì)額外編譯注入的內(nèi)容
- 命名沖突:全局注入可能導(dǎo)致命名沖突,需注意命名規(guī)范
函數(shù)工作原理
- 設(shè)計(jì)基準(zhǔn):以 1920×1080 分辨率作為設(shè)計(jì)基準(zhǔn)
- 單位轉(zhuǎn)換:
vw($px):將像素值轉(zhuǎn)換為相對(duì)于視口寬度的百分比vh($px):將像素值轉(zhuǎn)換為相對(duì)于視口高度的百分比
- 計(jì)算方式:
math.div($px, $designWidth) * 100vw:計(jì)算元素寬度占設(shè)計(jì)稿寬度的比例,然后轉(zhuǎn)換為視口寬度單位math.div($px, $designHeight) * 100vh:計(jì)算元素高度占設(shè)計(jì)稿高度的比例,然后轉(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);
}
注意事項(xiàng)
- 極端比例屏幕(如超寬屏)可能需要額外媒體查詢調(diào)整
- 字體大小使用視口單位可能導(dǎo)致可讀性問(wèn)題,需要謹(jǐn)慎使用
- 最小字體大小可能需要設(shè)置限制,防止在小屏幕上過(guò)小
這種方法是實(shí)現(xiàn)大屏自適應(yīng)布局的高效方式,特別適合數(shù)據(jù)可視化類的大屏項(xiàng)目。
2. Flex 彈性布局
整體布局使用 Flexbox 實(shí)現(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 圖表通過(guò)監(jiān)聽(tīng)窗口 resize 事件實(shí)現(xiàn)自適應(yīng):
window.addEventListener('resize', () => {
myChart.resize();
});
4. 全屏切換功能
使用 screenfull 庫(kù)實(shí)現(xiàn)全屏切換:
let fullScreen = () => {
if (screenfull.isEnabled) {
screenfull.toggle();
}
};
5. 縮放控制
通過(guò)監(jiān)聽(tīng)滾輪事件實(shí)現(xiàn)頁(yè)面縮放:
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)布局的幾種實(shí)現(xiàn)方式的文章就介紹到這了,更多相關(guān)VUE3大屏自適應(yīng)布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能的實(shí)例代碼
這篇文章主要介紹了vue實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
深入探討Vue計(jì)算屬性與監(jiān)聽(tīng)器的區(qū)別和用途
在Vue的開(kāi)發(fā)中,計(jì)算屬性(Computed Properties)和監(jiān)聽(tīng)器(Watchers)是兩種非常重要的概念,它們都用于響應(yīng)式地處理數(shù)據(jù)變化,本文將帶你深入了解計(jì)算屬性和監(jiān)聽(tīng)器的區(qū)別,以及在何時(shí)使用它們,感興趣的朋友可以參考下2023-09-09
vite+vue3+ts項(xiàng)目中提示無(wú)法找到模塊的問(wèn)題及解決
這篇文章主要介紹了vite+vue3+ts項(xiàng)目中提示無(wú)法找到模塊的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
vue頁(yè)面更新patch的實(shí)現(xiàn)示例
這篇文章主要介紹了vue頁(yè)面更新patch的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Vue引入vuetify框架你需要知道的幾點(diǎn)知識(shí)
這篇文章主要介紹了Vue引入vuetify框架你需要知道的幾點(diǎn)知識(shí),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Vue使用pdf-lib實(shí)現(xiàn)為文件流添加水印并預(yù)覽
這篇文章主要為大家詳細(xì)介紹了Vue如何使用pdf-lib實(shí)現(xiàn)為文件流添加水印并預(yù)覽的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-03-03

