Vue scss使用全局变量及移动端100vh高度适配

开发移动端设置100vh时,Chrome和Safari等浏览器计算高度不同,会算入底部tabbar和顶部url地址栏,导致值比预期高。可借助vh-check适配浏览器兼容,介绍了在vue中引入和使用的方法,还提到使用calc计算属性需用#隔离。

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

开发移动端 当设置100vh时,在各个浏览器计算高度不同,Chrome和Safari浏览器会计算底部tabbar和顶部url地址栏,所以产生比预期高的值,

至此 可借助vh-check来帮助适配各个浏览器的兼容

使用方法

npm install vh-check

vue main.js 引入

import vhCheck from "vh-check"; //移动端浏览器100vh高度不一致
vhCheck();

组件内使用

<style lang="scss" scoped="">
.container {
  height: 100vh;
  height: calc(100vh - var(--vh-offset, 0px));
</style>

如果单独提出在scss文件中定义,并且在组件中使用

例如 100vh.scss 

$vh: calc(100vh - var(--vh-offset, 0px));

    然后再组件内使用,请先@import 引入在使用,如果不用@import引入在main.js引入也无效

@import '~@/styles/100vh.scss';
body{
  height: $vh !important;
}

 如果想不使用@import 引入 ,

  1. 在vue.config.js进行配置 
  2. 使用sass-resoure-loader进行配置 两种方法 具体百度

在vue.config.js进行配置的方法如下

css: {
    //查看CSS属于哪个css文件
    sourceMap: true,
    loaderOptions: {
      scss: {
        // @/ 是 src/ 的别名
       
        // 注意:如果prependData报错 可使用data属性 
        prependData: `@import "~@/styles/100vh.scss";`,
      },
    },
  },

这样可在组件内直接使用,而不用进行@import进行导入,变成全局变量

注意:如果使用calc计算属性 需要使用#进行隔离 

body{
 height: calc(#{$vh} - 110px) !important;
}

End

<think>嗯,用户问的是关于Vue3和Element Plus中的el-dialog组件可修改的样式。我需要先回忆一下Element Plus的文档,特别是el-dialog部分的样式定制方法。记得Element Plus使用SCSS变量来允许主题定制,但用户可能想知道如何直接修改el-dialog的样式,比如宽度、标题、背景色这些常见的需求。 首先,我应该考虑用户可能的使用场景。他们可能已经在使用el-dialog,但想调整外观,比如改变对话框的大小或者调整标题的样式。需要覆盖默认样式的话,通常是通过CSS类名来实现的。但要注意Scoped CSS的问题,可能需要使用深度选择器如::v-deep或者:deep()。 然后,我需要列举一些常见的可定制样式属性,比如宽度、标题样式、内容区域的padding、背景色、遮罩层效果等。每个部分都需要给出具体的例子,比如如何修改宽度,使用内联样式还是CSS类。同时要提醒用户注意样式优先级的问题,可能需要使用!important,但最好还是通过提高特异性来避免。 另外,用户可能对自定义头部和底部有需求,比如添加按钮或者图标。这时候可以提到使用具名插槽,比如title和footer,来更灵活地定制内容。这部分需要给出示例代码,展示如何在template中使用插槽。 还要注意,修改第三方组件库的样式时,可能会因为版本更新导致类名变化,所以要提醒用户谨慎覆盖,并尽量使用官方提供的CSS变量或者方法。比如Element Plus可能有提供一些CSS变量,用户可以通过设置这些变量来改变样式,而不直接修改类名。 最后,总结一下常用的方法:内联样式、CSS类覆盖、使用插槽,以及可能的全局样式修改。同时要给出参考链接,方便用户查阅官方文档,确保信息的准确性。 可能还需要检查有没有遗漏的部分,比如对话框的动画效果、位置调整,或者是否支持拖拽功能,但这些可能属于功能定制,不是样式问题。不过如果用户提到可修改的样式,可能不包括功能,所以暂时不提。 总的来说,结构应该是先介绍几种修改样式的方法,然后列举常见的样式属性和对应的代码示例,最后给出注意事项和参考链接。这样用户就能全面了解如何定制el-dialog的外观了。</think>在 Vue3 中使用 Element Plus 的 `el-dialog` 组件时,可以通过以下方式修改其样式。`el-dialog` 提供了多种自定义属性和 CSS 类名,以下是常见可修改的样式和示例: --- ### **1. 基础属性修改** 通过 **`props`** 直接修改外观: ```vue <template> <el-dialog title="自定义标题" :width="'60%'" // 对话框宽度(支持百分比或像素,如 '800px') :top="'10vh'" // 距离顶部的距离 :fullscreen="false" // 是否全屏 :modal="true" // 是否显示遮罩层 :append-to-body="true" // 是否插入到 body 元素(避免父元素样式干扰) > <!-- 对话框内容 --> </el-dialog> </template> ``` --- ### **2. 自定义 CSS 样式** #### **2.1 全局样式覆盖** 在全局 CSS 文件中覆盖默认样式(注意使用 `!important` 提升优先级): ```css /* 修改对话框背景色、圆角 */ .el-dialog { background: #f0f2f5 !important; border-radius: 12px !important; } /* 修改标题样式 */ .el-dialog__header { background: linear-gradient(90deg, #409eff, #36c6d9); padding: 15px; } .el-dialog__title { color: white !important; font-size: 18px; } /* 修改内容区域样式 */ .el-dialog__body { padding: 20px; } /* 修改遮罩层透明度 */ .el-overlay { background-color: rgba(0, 0, 0, 0.6) !important; } ``` #### **2.2 Scoped 样式(组件内)** 在 Vue 组件的 `<style scoped>` 中使用 `:deep()` 穿透选择器: ```vue <style scoped> :deep(.el-dialog) { border: 2px solid #409eff; } :deep(.el-dialog__footer) { text-align: center; } </style> ``` --- ### **3. 使用插槽自定义内容** 通过插槽完全自定义头部、内容和底部: ```vue <template> <el-dialog :visible.sync="dialogVisible"> <!-- 自定义标题 --> <template #header="{ title }"> <div class="custom-header"> <h2>{{ title }}</h2> <el-icon><info-filled /></el-icon> </div> </template> <!-- 自定义内容 --> <div class="custom-body"> <p>这里是自定义内容区域</p> </div> <!-- 自定义底部按钮 --> <template #footer> <el-button type="danger" @click="dialogVisible = false">关闭</el-button> </template> </el-dialog> </template> <style> .custom-header { display: flex; align-items: center; gap: 10px; background: #f8f8f8; padding: 15px; } .custom-body { line-height: 1.8; } </style> ``` --- ### **4. 动态样式绑定** 通过 `:class` 或 `:style` 动态控制样式: ```vue <template> <el-dialog :class="{ 'custom-dialog': isSpecial }" :style="{ 'max-height': '80vh', 'overflow-y': 'auto' }" > <!-- 内容 --> </el-dialog> </template> <style> .custom-dialog .el-dialog__header { background-color: #ff9900; } </style> ``` --- ### **5. 官方 CSS 变量(Element Plus 2.3+)** Element Plus 支持通过 CSS 变量覆盖主题(需在根作用域设置): ```css :root { --el-dialog-bg-color: #ffffff; /* 对话框背景色 */ --el-dialog-border-radius: 8px; /* 圆角 */ --el-dialog-padding-primary: 20px; /* 内边距 */ } ``` --- ### **注意事项** 1. **样式优先级**:使用 `!important` 或更高特异性的选择器确保覆盖默认样式。 2. **响应式设计**:通过 `width` 设置为百分比(如 `width="80%"`)适配不同屏幕。 3. **性能优化**:避免频繁修改全局样式,优先使用组件内样式。 参考官方文档:[Element Plus Dialog 组件](https://element-plus.org/zh-CN/component/dialog.html)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值