vue自适应布局(各种浏览器,分辨率)

1.前言

spa页面的layout布局对于前端项目的影响至关重要,在我们进行web端开发的时候,前端的各种大小屏幕,各种内核的浏览器不同,会导致我们的页面呈现出不一样的效果,如何进行更好的取舍,怎么能够达到产品对于系统展示效果的满意度,其实我们要前端有一套布局理念,这种理念指导我们如何进行优雅布局,怎么才能不被不合理的需求左右。理念分为以下几点:

  1. 整体布局,上左右风格,或者上下风格符合或者复杂的上菜单,左菜单,右内容风格,符合spa的菜单操作方式
  2. 菜单nav部分固定宽度,配合收起,展开效果;头部固定高度,内容区域flex:1;版本部分固定高度,固定位置
  3. 内容区域需要适应不同的分辨率,做浏览器的适配
  4. 需要适配浏览器的百分比缩放的问题

预览图片如下 :

现在布局实现的是头,左侧菜单,尾部固定,内容区域自适应布局的方案,最重要的是需要解决的是main里面的适应分辨率,浏览器内核的问题,往下看⬇️ 

目录

1.前言

2.vue的布局风格

2.1vue3需要配合element plus进行布局

2.2src下面创建layout文件夹

 3.测试效果

 4.总结


2.vue的布局风格

2.1vue3需要配合element plus进行布局

安装     $ npm install element-plus --save

引入   main.ts

import { createApp } from "vue";

import { createPinia } from "pinia";

import App from "./App.vue";

import router from "./router";

import ElementPlus from "element-plus";

import "element-plus/dist/index.css";

import "./assets/main.css";

const app = createApp(App);

app.use(ElementPlus);

app.use(createPinia());

app.use(router);

app.mount("#app");

2.2src下面创建layout文件夹

入口文件layoutIndex.vue,三个子组件

layoutIndex入口文件较为重要:


   
    
    
  1. <script setup lang = "ts" >
  2. import layoutHeader from "./layoutHeader.vue";
  3. import layoutMain from "./layoutMain.vue";
  4. import layoutFooter from "./layoutFooter.vue";
  5. import menu from "./menu";
  6. import { RouterLink } from "vue-router";
  7. < /script >
  8. <template >
  9. <div class = "common-layout" >
  10. <el-container >
  11. <el-header > <layout-header > < /layout-header > < /el-header >
  12. <el-container >
  13. <el-aside width = "200px" >
  14. <nav class = "nav-class" >
  15. <RouterLink
  16. v-for = "(item, index) in menu"
  17. : key = "'menu' + index"
  18. : to = "item.url"
  19. >{ { item.title }}{ { index + 1 }} < /RouterLink
  20. >
  21. < /nav >
  22. < /el-aside >
  23. <el-container >
  24. <el-main > <layout-main > < /layout-main > < /el-main >
  25. <el-footer > <layout-footer > < /layout-footer > < /el-footer >
  26. < /el-container >
  27. < /el-container >
  28. < /el-container >
  29. < /div >
  30. < /template >
  31. <style >
  32. * {
  33. marg in: 0;
  34. padding: 0;
  35. }
  36. .common-layout {
  37. height: 100vh;
  38. }
  39. .el-container {
  40. overflow: hidden;
  41. }
  42. .el-container.is-vertical {
  43. height: 100%;
  44. }
  45. .nav-class {
  46. display: flex;
  47. flex-direction: column;
  48. height: 100%;
  49. align-items: center;
  50. }
  51. .nav-class a {
  52. min-height: 35px;
  53. line-height: 35px;
  54. color: #fff;
  55. }
  56. .nav-class a:hover {
  57. color: rgb( 151, 219, 50);
  58. }
  59. .nav-class a:focus {
  60. color: rgb( 151, 219, 50);
  61. }
  62. .el-aside {
  63. background-color: lightslategrey;
  64. }
  65. < /style >

 头部文件layoutHeader


   
    
    
  1. <template >
  2. <div class = "common-layout-header" >header < /div >
  3. < /template >
  4. <style >
  5. .el-header {
  6. marg in: 0;
  7. padding: 0;
  8. height: 68px;
  9. background-color: aliceblue;
  10. text-align: center;
  11. line-height: 68px;
  12. }
  13. < /style >

layoutFooter文件代码


   
    
    
  1. <template >
  2. <div class = "common-layout-footer" >footer < /div >
  3. < /template >
  4. <style >
  5. .el-footer {
  6. marg in: 0;
  7. padding: 0;
  8. height: 68px;
  9. background-color: azure;
  10. text-align: center;
  11. line-height: 68px;
  12. }
  13. < /style >

main文件代码 ,就是路由放置区域:


   
    
    
  1. <script setup lang = "ts" >
  2. import { RouterView } from "vue-router";
  3. < /script >
  4. <template >
  5. <div class = "common-layout-main" > <RouterView / > < /div >
  6. < /template >
  7. <style >
  8. .el-main {
  9. overflow: auto;
  10. height: 100%;
  11. }
  12. < /style >

滚动效果:头部尾部不动,css控制,flex布局,没有position布局

 3.测试效果

谷歌浏览器,大小缩放等:

 屏幕放大效果:

1.前言

spa页面的layout布局对于前端项目的影响至关重要,在我们进行web端开发的时候,前端的各种大小屏幕,各种内核的浏览器不同,会导致我们的页面呈现出不一样的效果,如何进行更好的取舍,怎么能够达到产品对于系统展示效果的满意度,其实我们要前端有一套布局理念,这种理念指导我们如何进行优雅布局,怎么才能不被不合理的需求左右。理念分为以下几点:

  1. 整体布局,上左右风格,或者上下风格符合或者复杂的上菜单,左菜单,右内容风格,符合spa的菜单操作方式
  2. 菜单nav部分固定宽度,配合收起,展开效果;头部固定高度,内容区域flex:1;版本部分固定高度,固定位置
  3. 内容区域需要适应不同的分辨率,做浏览器的适配
  4. 需要适配浏览器的百分比缩放的问题

预览图片如下 :

现在布局实现的是头,左侧菜单,尾部固定,内容区域自适应布局的方案,最重要的是需要解决的是main里面的适应分辨率,浏览器内核的问题,往下看⬇️ 

目录

1.前言

2.vue的布局风格

2.1vue3需要配合element plus进行布局

2.2src下面创建layout文件夹

 3.测试效果

 4.总结


2.vue的布局风格

2.1vue3需要配合element plus进行布局

安装     $ npm install element-plus --save

引入   main.ts

import { createApp } from "vue";

import { createPinia } from "pinia";

import App from "./App.vue";

import router from "./router";

import ElementPlus from "element-plus";

import "element-plus/dist/index.css";

import "./assets/main.css";

const app = createApp(App);

app.use(ElementPlus);

app.use(createPinia());

app.use(router);

app.mount("#app");

2.2src下面创建layout文件夹

入口文件layoutIndex.vue,三个子组件

layoutIndex入口文件较为重要:


   
  
  
  1. <script setup lang = "ts" >
  2. import layoutHeader from "./layoutHeader.vue";
  3. import layoutMain from "./layoutMain.vue";
  4. import layoutFooter from "./layoutFooter.vue";
  5. import menu from "./menu";
  6. import { RouterLink } from "vue-router";
  7. < /script >
  8. <template >
  9. <div class = "common-layout" >
  10. <el-container >
  11. <el-header > <layout-header > < /layout-header > < /el-header >
  12. <el-container >
  13. <el-aside width = "200px" >
  14. <nav class = "nav-class" >
  15. <RouterLink
  16. v-for = "(item, index) in menu"
  17. : key = "'menu' + index"
  18. : to = "item.url"
  19. >{ { item.title }}{ { index + 1 }} < /RouterLink
  20. >
  21. < /nav >
  22. < /el-aside >
  23. <el-container >
  24. <el-main > <layout-main > < /layout-main > < /el-main >
  25. <el-footer > <layout-footer > < /layout-footer > < /el-footer >
  26. < /el-container >
  27. < /el-container >
  28. < /el-container >
  29. < /div >
  30. < /template >
  31. <style >
  32. * {
  33. marg in: 0;
  34. padding: 0;
  35. }
  36. .common-layout {
  37. height: 100vh;
  38. }
  39. .el-container {
  40. overflow: hidden;
  41. }
  42. .el-container.is-vertical {
  43. height: 100%;
  44. }
  45. .nav-class {
  46. display: flex;
  47. flex-direction: column;
  48. height: 100%;
  49. align-items: center;
  50. }
  51. .nav-class a {
  52. min-height: 35px;
  53. line-height: 35px;
  54. color: #fff;
  55. }
  56. .nav-class a:hover {
  57. color: rgb( 151, 219, 50);
  58. }
  59. .nav-class a:focus {
  60. color: rgb( 151, 219, 50);
  61. }
  62. .el-aside {
  63. background-color: lightslategrey;
  64. }
  65. < /style >

 头部文件layoutHeader


   
  
  
  1. <template >
  2. <div class = "common-layout-header" >header < /div >
  3. < /template >
  4. <style >
  5. .el-header {
  6. marg in: 0;
  7. padding: 0;
  8. height: 68px;
  9. background-color: aliceblue;
  10. text-align: center;
  11. line-height: 68px;
  12. }
  13. < /style >

layoutFooter文件代码


   
  
  
  1. <template >
  2. <div class = "common-layout-footer" >footer < /div >
  3. < /template >
  4. <style >
  5. .el-footer {
  6. marg in: 0;
  7. padding: 0;
  8. height: 68px;
  9. background-color: azure;
  10. text-align: center;
  11. line-height: 68px;
  12. }
  13. < /style >

main文件代码 ,就是路由放置区域:


   
  
  
  1. <script setup lang = "ts" >
  2. import { RouterView } from "vue-router";
  3. < /script >
  4. <template >
  5. <div class = "common-layout-main" > <RouterView / > < /div >
  6. < /template >
  7. <style >
  8. .el-main {
  9. overflow: auto;
  10. height: 100%;
  11. }
  12. < /style >

滚动效果:头部尾部不动,css控制,flex布局,没有position布局

 3.测试效果

谷歌浏览器,大小缩放等:

 屏幕放大效果:

猜你喜欢

转载自blog.csdn.net/weixin_64310738/article/details/129075685