服务端渲染会提取组件的样式内联到html中,与link标签中的重复,使得页面体积变大,导致响应时间很慢。
原因是ssr会自动进行资源注入 Manual Asset Injection ,包含css、js等。
我们需要的是没有<style>标签的页面
所以通过配置参数,关闭资源注入。
接下来需要把css、js等文件再关联到输出的html中
当创建bundlerender的时候,我们可以使用一个模板,在这个模板里面预置页面所需要的各种资源。
思来想去,csr(客户端渲染)模式下生成的index.html再合适不过了。
而且,当build csr时,我们也可以预置一个模板,在这里添加上第三方的资源
最后是在模板中添加锚点
到这里基本大功告成
贴一下vue.config.js和build script(windows 平台)
如图是一个常见的vue文件结构
在app.html 或者*.vue中引入css,如下所示:
在 app.html引入css对阵个页面都生效,在vue文件中引入,只对改vue生成的页面有效
本文已经假设你熟悉CSS变量,如果不熟悉,可以看我写的CSS变量基础知识: https://www.jianshu.com/p/a0f6233cf335
在研究Vue 3的“单文件驱动的CSS变量”之前,我们先看看Vue 2怎么使用CSS变量。
:style是行内样式,行内样式的缺点至少有三个:1. 字符多,写起来麻烦;2. 行内意味着无法复用,class可以复用;3. :style无法定义伪元素的样式。
CSS变量优势其实很明显,上面案例中, <div class="a-container">A元素</div>并没有写style,而且, a-container 是可以复用的,可以用在无数个元素上。最后,在<style>标签里可以定义伪元素的样式。
Vue 3加入了“单文件驱动的CSS变量”,它也是一种语法糖,到今天有2个版本,旧版简称“style vars”版本,因为被人诟病“创造了方言”而改成了新版,旧版我就不说了,新版用法举例:
也就是说,凡是<style>中使用了v-bind函数,都将传值视为CSS变量表达式,而且缺省 -- 符号。变量会自动去<script setup>里查找同名顶层变量。
拼接字符串要遵循CSS变量规范,CSS变量规范并没有直接拼接字符串的办法,而是采用calc乘法。
写起来是对象的点运算符,但是要用引号包裹起来,而且为了跟CSS常用的双引号区分,最好使用单引号。
Vue 2的写法在3里依然可用,而且更贴近原生,可以说是标准写法,而Vue 3实际上是2的语法糖。
方便程度上说,Vue 3的肯定更方便。
由于使用CSS变量,所以IE全不支持,老内核Edge全不支持。