《vue3+TS+element-plus 后端管理系统系列》之响应式设计

本文介绍了基于Vue3的vue3-composition-admin管理端模板,它采用响应式设计,适应不同设备。内容涵盖响应式原理、栅格系统、媒体查询和窗口resize事件监听。通过element-plus的栅格系统实现不同尺寸下的布局调整,并展示了媒体查询在550px时的样式变化。此外,还讨论了window.resize事件监听在响应式布局中的应用,如关闭侧边栏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue3-composition-admin 是一个管理端模板解决方案,它是基于vue3,ts和element-plus,项目都是以composition api风格编写。
 

 

响应式设计

页面的设计与开发应当根据用户行为以及设备环境(系统平台、屏幕尺寸、屏幕定向等)进行相应的响应和调整。具体的实践方式由多方面组成,包括弹性网格和布局、图片、CSS media query的使用等。
无论用户正在使用笔记本还是iPad,我们的页面都应该能够自动切换分辨率、图片尺寸及相关脚本功能等,以适应不同设备;换句话说,页面应该有能力去自动响应用户的设备环境。
响应式网页设计就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这样,我们就可以不必为不断到来的新设备做专门的版本设计和开发了。

演示

我们以首页Panel Group 为例,展示下面效果:

在这里插入图片描述
这个案例运用了大部分响应式设计

步骤分析如下:

  1. 最初宽度大于 1200px 每个格子占6个栅格
  2. 小于1200之后变成 12个栅格也就是50%
  3. window.resize 触发回调,到达一定值vuex响应,关闭sidebar
  4. 媒体查询到达550px时,图标居中其他隐藏

引用代码:Panel Group

 

响应式技术


栅格系统

不管是ant-design 还是element,UI组件库 在layout都会有栅格系统。基本上都是基于Bootstrap 的响应式设计。

Bootstrap 栅格系统:https://v3.bootcss.com/css/#grid

不同UI组件库对于栅格划分定义不同,以element-plus为例:

element-plus 预设了五个响应尺寸:xs、sm、md、lg 和 xl。

尺寸解释
xs<768px 响应式栅格数或者栅格属性对象
sm≥768px 响应式栅格数或者栅格属性对象
md≥992px 响应式栅格数或者栅格属性对象
lg≥1200px 响应式栅格数或者栅格属性对象
xl≥1920px 响应式栅格数或者栅格属性对象

项目实例:

针对于卡片我们可以这样写

<el-col
      :xs="12"
      :sm="12"
      :lg="6"
      class="card-panel-col"
    >
   
</el-col>

也就是说当宽度大于1200px 6个栅格,小于1200px12个栅格。

 

媒体查询


css3 媒体查询更加完善,不管用什么UI框架媒体查询也是逃不掉的,可以做一些细节适配。具体使用不说了,查看文档即可:

  1. CSS3 @media 查询
  2. 响应式 Web 设计 - 媒体查询
  3. Sass和媒体查询
  4. LESS @media内部作用域/扩展

sass 和 less 可以支持嵌套媒体查询,使用起来复用度更高

项目实例:

@media (max-width:550px) {
  .card-panel-description {
    display: none;
  }

  .card-panel-icon-wrapper {
    float: none !important;
    width: 100%;
    height: 100%;
    margin: 0 !important;

    svg {
      display: block;
      margin: 14px auto !important;
      float: none !important;
    }
  }
}

步骤解析:宽度为550px的时候,css样式发生改变,隐藏面板文字和icon居中

 

window 监听 resize变化


window提供一些监听媒体的方法和大小的方法,响应式需要动态触发需求的时候可以用到,如侧边栏开关。

window有关响应式的API总结:

项目实例:

代码引用:resize.ts

Window 监听resize变化调用回调函数

const addEventListenerOnResize = () => {
    window.addEventListener('resize', resizeHandler)
 }

回调函数根据大小判断是否需要关闭侧边栏,使用Vuex通知

const resizeHandler = () => {
    if (!document.hidden) {
      store.dispatch(AppActionTypes.ACTION_TOGGLE_DEVICE, isMobile() ? DeviceType.Mobile : DeviceType.Desktop)
      if (isMobile()) {
        store.dispatch(AppActionTypes.ACTION_CLOSE_SIDEBAR, true)
      }
    }
  }

 

图片视频响应式


图片视频比较简单,基本遵守百分比布局,特殊适配一下就行。

图片:https://www.runoob.com/css/css-rwd-images.html
视频:https://www.runoob.com/css/css-rwd-videos.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星宇大前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值