当前位置: 首页 > news >正文

Vue 项目中全局样式的正确写法:不要把字体和主题写在 #app 上

一、问题背景

在 Vue 项目中,我们通常会在入口文件 App.vue 或根元素 #app 上编写样式。例如设置字体、主题色、背景色等。然而,许多开发者容易忽略一个细节:并不是所有的 DOM 元素都在 #app 内部渲染

这会导致一些组件(如使用 teleportbody 的弹窗、提示框、遮罩层等)无法继承到 #app 的样式,从而出现字体错乱、主题色不生效等问题。

二、teleport 导致的样式隔离问题

Vue 的 teleport 特性允许组件内容渲染到 #app 以外的节点中,例如:

<teleport to="body"><div class="global-dialog">我是弹窗</div>
</teleport>

此时,这个弹窗的 DOM 实际上是直接插入到 <body> 下,而不是 Vue 挂载的 #app 内部。

如果我们之前把全局样式(如字体、颜色变量)都写在 #app 上,比如:

#app {font-family: "PingFang SC", sans-serif;color: var(--font-color);
}

那么 teleport 到 body 的元素将无法继承这些样式,因为它并不在 #app 的作用范围中。

三、正确的全局样式写法

全局样式应当写在 htmlbody 上,而不是 #app

推荐写法:

html,
body {font-family: "PingFang SC", "Microsoft YaHei", sans-serif;color: var(--font-color, #333);background-color: var(--bg-color, #fff);
}#app {min-height: 100%;display: flex;flex-direction: column;
}

这样,无论组件内容挂载在哪个节点下(包括 body#appteleport 节点),都能共享同样的全局主题样式。

四、实际项目中的应用建议

  1. 字体、颜色、主题变量统一写在 html, body 中。
    这样能确保任何层级的组件都能继承这些基础样式。

  2. #app 用于布局和结构控制。
    比如 display: flex;min-height: 100vh;overflow: hidden; 等结构性样式。

  3. 全局 CSS 变量放在 :root 或 html。
    示例:

    :root {--color-primary: #1677ff;--font-color: #333;--bg-color: #fff;
    }
    
  4. 重置样式或主题文件在入口处引入。
    如在 main.ts 中:

    import "@/styles/reset.scss"
    import "@/styles/theme.scss"
    

五、总结

Vue 项目中的全局样式不应依赖 #app,而应当绑定在 htmlbody 上。
这是因为部分组件(尤其是通过 teleport 实现的弹窗、浮层等)并不会在 #app 节点内渲染。

良好的样式结构分层能让整个项目在视觉和逻辑上更加统一,避免组件层级带来的样式继承问题。

http://www.dtcms.com/a/553443.html

相关文章:

  • 网站推广策划的策略凡科做的网站百度能收录吗
  • 如何用SQL进行多表联查(JOIN)?
  • 笔试强训:Week-3
  • 网站建设公司的前景怎么建立和设计公司网站
  • 【项目实战1 -瑞吉外卖|day21 】
  • 变分自编码器(VAE):用概率解锁生成式AI的“基因密码”
  • C++ 容器入门:从初始化到常用操作全解析
  • 飞致云开源社区月度动态报告(2025年10月)
  • 企业网站建设的步骤网站维护包括哪些
  • 网站建设缺乏个性网站如何优化关键词
  • GNN变体
  • SpringMVC基础入门
  • XiangJsonCraft v1.1.0发布:JSON配置网页的终极进化,支持所有CSS选择器!
  • UVa 12670 Counting Ones
  • C++17(新特性)
  • 韩国风网站什么网站有做册子版
  • day58-Shell编程(第四部分)
  • 用AI写了一个文档拼音标注工具 中文+拼音一键生成
  • 做网站还有意义同样是div 怎么有些网站收录少 有些多
  • 企必搜做网站做国际物流在哪些网站找客户
  • 移动端适配完全指南:从基础到最佳实践
  • 使用JMeter进行API性能压测(执行篇)
  • IntelliJ IDEA 远程调试(Remote Debugging)教程
  • 网站服务器++免费做电子手抄报的网站
  • 单页网站的优点网络公司是做什么的?
  • 阿瓦隆 Q 90T矿机:低功耗高效挖矿,是否值得选择?
  • 印度实时股票数据源接口对接文档-IPO新股、k线数据
  • HTTPS接口国密安全设计(含防重放设计)
  • 网站设计公司(信科网络)中国制造网外贸平台怎么注册
  • 网站模版如何去除title版权信息499元做网站