首页 > 其他分享 >Vue2(笔记31) - 脚手架 - scoped

Vue2(笔记31) - 脚手架 - scoped

时间:2022-12-10 19:31:27浏览次数:68  
标签:vue scoped less 样式 demo 31 webpack Vue2 组件

scoped

样式的作用域,每个组件都有独立的样式,最终都会打包合并,难免会重名导致页面样式混乱,可以给每个组件的样式加上 scoped 限定样式的作用域只限于当前组件;

改下 school.vue

<template>
<div class="demo">
<h2>学校名称:{{ name | mySlice}}</h2>
<h2>学校地址:{{ address }}</h2>
<h2>学年:{{year}}</h2>
</div>
</template>

<script>
...
};
</script>
<style>
.demo{
background-color: skyblue;
}
</style>

提示1:省略了 script 里的代码;

再改下 student.vue

<template>
<div class="demo">
<h2>学员名称:{{ name }}</h2>
<h2>学员年龄:{{ age }}</h2>
</div>
</template>

<script>
export default {
...
};
</script>
<style>
.demo{
background-color: orange;
}
</style>

两个组件都定义了 demo 样式,样式背景都不同,这种冲突会导致只有一个生效,在app.vue 先引入的组件样式,会覆盖后引入的样式;

// 引入组件
import school from "./components/school.vue";
import Student from "./components/student.vue";

所以,student.vue 里的样式会覆盖 school.vue 中样式,背景只会显示 "orange":

Vue2(笔记31) - 脚手架 - scoped_脚手架

解决样式冲突的办法就是在定义样式时,添加  scoped 关键字,指定作用域:

school.vue

<style scoped>
.demo{
background-color: skyblue;
}
</style>

student.vue

<style scoped>
.demo{
background-color: orange;
}
</style>

看下效果:

Vue2(笔记31) - 脚手架 - scoped_scoped_02

看下元素结构:

Vue2(笔记31) - 脚手架 - scoped_脚手架_03

似乎是给每个组件都定义了不同的标识,以区分其不同的样式;


app.vue 组件中的 scoped 

如果在app.vue 组件中,也引入scoped的话,又会覆盖所有组件中的定义;

app.vue

<style scoped>
.demo{
background-color: #f30;
}
</style>

Vue2(笔记31) - 脚手架 - scoped_scoped_04

这样又会引起冲突,所以在 app.vue 写样式,就不要添加 scoped 关键字了;


预编译语言

在脚手架环境中使用 Less 等预编译语言写样式,可以这样指定:

<style lang="less" scoped>
.demo {
.title {
font-size: 40px;
}
&:hover {
background-color: skyblue;
}
}
</style>

提示:lang="less" ,是指定预编译语言为 less ;

提示:预编译语言有很多种,如: less、sass、stylus 等

关于Less可以看下:​​Less 简介、安装和语法​


less版本冲突

指定的 less 可能不被识别,提示安装  less-loader 插件;

那可以执行:看一下 webpack 的版本

> npm view webpack version

> npm view webpack versions

看一下 当前的 webpack 版本和webpack 的所有版本;

一般 less 8、9的版本支持 webpack 5+ ,如果使用的是 webpack 4+,就安装低一些的 less 版本;

> npm i less-loader@7

指定较低的版本;

标签:vue,scoped,less,样式,demo,31,webpack,Vue2,组件
From: https://blog.51cto.com/ahuiok/5927833

相关文章

  • 每日食词—day031
    steeln. v. adj.钢、钢材、钢铁sourcesn. v.来源、起源、源transformern.转换器、变压器socketn. v.套接字、插座、套接口dockingn. adj. v. n.对......
  • Vue2(笔记30) - 脚手架 - 插件
    插件Vue的插件功能可以整合之前所有的全局配置,也支持传参,使用起来比较强大;Vue 的插件,本质上是一个 对象;要求这个对象中,必须包含install() 方法;第一步:定义一个插件文件;pu......
  • vue2 基础
    一、什么是vue构建用户界面用vue网html页面中填充数据。框架框架是一套现场的解决方案,程序员必须遵守框架的语法,去编写业务代码。学习vue,即学习vue框架......
  • Vue2(笔记29) - 脚手架 - mixin混入
    mixin混入所谓混入,就是几个组件共享一个配置,可局部混入,也可全局混入;第一步:先建个混入文件,配置写进去,再export 出来;新建mixin.js 文件: exportconstcommonConfig={......
  • 31. 下一个排列
     31. 下一个排列题目描述:本题是给你一个整数数组,返回该数组的下一个线性顺序排列。举个例子:给你一个[1,2,3]的数组,他的线性排列顺序从小到大依次为[1,3,2],[2,1,......
  • P3128 [USACO15DEC]Max Flow P(树上倍增和树链剖分)
    思路1(树上倍增$+$树上差分)每次都修改一条从\(u\)到\(v\),不就是树上差分的专门操作吗??直接用倍增求\(LCA\),每次\(d[u]++,d[v]++,d[LCA(u,v)]--,d[f[LCA(u,v)][0]]--\)。......
  • vue2 购物车21
    main:importVuefrom'vue'importAppfrom'./App.vue'//vantimportVantfrom'vant';import'vant/lib/index.css';import{NavBar,SubmitBar,Card,Checkb......
  • TZOJ 7331: 旅游 广搜+深搜
    描述  给定一个n*m的地图,每个方格可以取:(1)“*”:表示一个景点;(2)“#”:表示墙壁,不可经过;(3)“.”:表示通道,可以经过;现在你从左上角(0,0)出发,需要走遍每个景点......
  • 六阶段:第31--34周 -Netty入门与提高 -Netty最佳实战 Netty打造RPC通信框架-1-2
              第32周高性能网络通信基石-Netty最佳实战        第34周基于Netty打造RPC通信框架-2      请求协议 ......
  • [Typescript] 131. Extreme - Query String Parser
    You'rerequiredtoimplementatype-levelparsertoparseURLquerystringintoaobjectliteraltype.Somedetailedrequirements:Valueofakeyinquerystr......