Vue中对比scoped css和css module的区别

yizhihongxing

请看下面的攻略:

Vue中对比scoped css和css module的区别

scoped css

Vue的scoped css是一种将css限制在组件内部使用的方法。在Vue组件中,可以给style标签添加scoped属性,它会自动将该样式限制在组件内部使用。

<template>
  <div class="container">
    <h1>Hello World</h1>
  </div>
</template>

<style scoped>
.container {
  background-color: #fff;
  color: #333;
  margin: 2em;
  padding: 2em;
}
</style>

上面的样式会自动编译成这样:

<style>
.container[data-v-2f3feece] {
  background-color: #fff;
  color: #333;
  margin: 2em;
  padding: 2em;
}
</style>

可以看到,所有的class和id都会被加上一个唯一的“data-v-xxxxxx”属性,避免了同名样式之间的冲突。但是,scoped css并不能完全保证不出现样式冲突,因为如果组件之间的样式类名相同,那么这些样式就会被覆盖。所以,我们还需要使用BEM等方法命名class,来保证组件之间的样式不会相互影响。

css module

css module是一种更加灵活的定义样式的方式。它允许我们在Vue中使用模块化的样式表,每个样式都有一个唯一的名称。这样,我们就可以放心地使用相同的class名称,而避免相互之间产生冲突。

使用css module需要在Vue组件中指定一个:module属性,然后将样式表记号改为<style module>

例如,有一个组件名为“HelloWorld”,它定义如下的样式表:

.container {
  background-color: #fff;
  color: #333;
  margin: 2em;
  padding: 2em;
}

我们可以将这个样式表改写成模块化的形式:

.container_default {
  background-color: #fff;
  color: #333;
  margin: 2em;
  padding: 2em;
}

/* 定义其他样式 */

最后,我们需要在组件中使用这个样式表:

<template>
  <div class="container_default">
    <h1>Hello World</h1>
  </div>
</template>

<style module>
/* 使用css module */
</style>

这样,组件在编译时,会自动为每个样式添加一个唯一的名称,这个名称将被包含在<style>标签的scope属性中。

<style>
.container_default_UOgPU {
  background-color: #fff;
  color: #333;
  margin: 2em;
  padding: 2em;
}
</style>

示例1

我们来看一个示例,假设我们有两个组件,它们都要使用一个名为“button”的样式。我们首先来看scoped css的实现方式:

<!-- buttonA组件使用scoped css -->
<template>
  <button class="button">Button A</button>
</template>

<style scoped>
.button {
  color: #fff;
  background-color: #f00;
  padding: 1em;
  border-radius: 10px;
}
</style>

<!-- buttonB组件使用scoped css -->
<template>
  <button class="button">Button B</button>
</template>

<style scoped>
.button {
  color: #fff;
  background-color: #00f;
  padding: 1em;
  border-radius: 10px;
}
</style>

可以看到,这两个组件都使用了相同的class名称“button”,但是由于scoped css,它们的样式是独立的,不会相互影响。如果我们删除scoped,那么这两个组件的class名称会发生冲突。

<!-- buttonA组件没有使用scoped css -->
<template>
  <button class="button">Button A</button>
</template>

<style>
.button {
  color: #fff;
  background-color: #f00;
  padding: 1em;
  border-radius: 10px;
}
</style>

<!-- buttonB组件没有使用scoped css -->
<template>
  <button class="button">Button B</button>
</template>

<style>
.button {
  color: #fff;
  background-color: #00f;
  padding: 1em;
  border-radius: 10px;
}
</style>

示例2

下面我们来看一下css module的实现方式。同样是两个组件,它们需要使用名为“button”的样式。使用css module的方式如下:

<!-- buttonA组件使用css module -->
<template>
  <button :class="$style.button">Button A</button>
</template>

<style module>
/* 组件级别的样式 */
.button {
  color: #fff;
  background-color: #f00;
  padding: 1em;
  border-radius: 10px;
}
</style>

<!-- buttonB组件使用css module -->
<template>
  <button :class="$style.button">Button B</button>
</template>

<style module>
/* 组件级别的样式 */
.button {
  color: #fff;
  background-color: #00f;
  padding: 1em;
  border-radius: 10px;
}
</style>

可以看到,这两个组件都使用了相同的class名称“button”,但是由于它们都是使用了不同的css module,它们的样式不会相互影响,而且它们的名称是唯一的,不会发生样式冲突。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue中对比scoped css和css module的区别 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • 图片旋转、鼠标滚轮缩放、镜像、切换图片js代码

    以下是详细讲解“图片旋转、鼠标滚轮缩放、镜像、切换图片js代码”的完整攻略,具体步骤如下: 1. 图片旋转 1.1 使用插件 可以使用某些现成的插件来实现图片的旋转效果。比如 jQueryRotate 插件,可以在网站上引入该插件库,并且在相应的 JavaScript 代码中使用 rotate 方法对图片进行旋转操作。 $(document).ready(f…

    css 2023年6月10日
    00
  • 使用CSS3来匹配横屏竖屏的简单方法

    当我们编写响应式设计时,需要应对不同屏幕方向的变化。使用CSS3来匹配横屏和竖屏是一种简单方法,下面是详细的攻略: 使用CSS3媒体查询 CSS3媒体查询是一种可以检测设备屏幕尺寸、方向等特性的CSS技术。我们可以借此来调整我们的CSS样式。 1. 根据页面方向调整CSS 使用以下代码检测屏幕方向: @media screen and (orientatio…

    css 2023年6月10日
    00
  • html/css中float浮动的用法实例详解

    HTML/CSS中float浮动的用法实例详解 什么是CSS中的float浮动? 在CSS中,float是一种常用的属性,常用于布局。float属性可以将元素向左或向右浮动,使得其他元素可以围绕其周围。float属性的值可以是left,right,none。 float浮动的主要作用 float浮动主要有以下几个作用: 将元素从正常的文档流中移除。 允许文本…

    css 2023年6月9日
    00
  • 浅谈最全面的水平垂直居中方案与flexbox布局

    浅谈最全面的水平垂直居中方案与flexbox布局 水平垂直居中的需求与问题 在前端开发中,经常会遇到需要在页面上实现水平、垂直居中的需求。例如,把一个div居中显示在页面上,或者是把图片和文字居中显示在一个容器中。但是很多时候,由于浏览器的不同,屏幕大小的不同等因素,常规的布局方法往往无法满足我们的需求,出现了无法居中的情况。 最全面的水平垂直居中方案 父容…

    css 2023年6月10日
    00
  • CSS3之多背景background使用示例

    下面是“CSS3之多背景background使用示例”的完整攻略: 1. 多背景实现方法 在CSS3中,可以使用多个background来设置元素的背景图片。多个背景图片的设置方法如下: background: url(bg1.png) top left no-repeat, url(bg2.png) top right no-repeat, url(bg3…

    css 2023年6月9日
    00
  • 使用JS+CSS实现俄罗斯方块游戏

    当我们想要使用JS和CSS来实现俄罗斯方块游戏时,需要按下述步骤进行: 步骤1:HTML基本架构 在HTML文件中添加一个 canvas 元素用于绘制游戏场景,并为它设置一个标识符(id)以便我们在JavaScript中进行使用。此外,还需要添加用于控制游戏的一些按钮,如“开始游戏”、“暂停游戏”、“重置游戏”等。 <!DOCTYPE html>…

    css 2023年6月9日
    00
  • DIV+CSS网页制作布局技巧学习

    当今网页制作领域,DIV+CSS已成为了一种主流的布局技术,它可以让我们更加灵活地掌控网页的外观和排版效果。以下是详细的“DIV+CSS网页制作布局技巧学习”的攻略: 1. 确定页面结构 在开始构建网页布局之前,最好先规划好页面的整体结构。可以利用图纸或者草图来确定网页的大致布局,考虑到网页排版的一些基本要素: 网页内容区域 页头和页脚 侧边栏 中心内容区域…

    css 2023年6月10日
    00
  • js调用css属性写法

    以下是关于“JS调用CSS属性写法”的完整攻略,包含两个示例说明。 方法一:使用style属性 可以使用JavaScript的style属性来调用CSS属性。可以按照以下步骤操作: 在JavaScript文件中,使用style属性来调用CSS属性。例如: document.getElementById("myElement").style…

    css 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部