CSS作用域问题

今天去长虹面试,面试官问了一个问题,就是给一个div在三个地方设置不同的background,最后div显示的颜色是哪一个?
当时我第一次回答的是最后一个,但是后来又改口说是第一个,回来一验证,证明自己错了,今天就总结一下CSS样式的作用域问题吧。

首先对HTML引入样式的优先级排序,数字越大优先级越高
#### 样式优先级
1. 浏览器缺省设置
2. 外部样式表
3. 内部样式表(位于 <head> 标签内部)
4. 内联样式(在 HTML 元素内部)

---
#### 外部样式表>浏览器缺省设置
HTML

```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>cssTest</title>
<link rel="stylesheet" type="text/css" href="../css/cssTest.css">
</head>
<body>
<div>浏览器缺省样式</div>
<div class="outStyle">外部样式</div>
</body>
</html>
```
CSS

```
.outStyle{
font-size: 20px;
}
```
页面效果(浏览器默认字体大小为14px,外部样式将字体调整为20px)

![enter description here][1]

----
#### 内部样式表>外部样式表
HTML

```
<head>
<meta charset="UTF-8">
<title>cssTest</title>
<style type="text/css">
{font-size: 10px;}
</style>
<link rel="stylesheet" type="text/css" href="../css/cssTest.css">
</head>
<body>
<div>内部样式</div>
<div class="outStyle">外部样式</div>
</body>
```
CSS
```
.outStyle{
font-size: 20px;
}
```
页面效果(外部全局样式失效,内部全局样式决定字体大小)

enter description here

---
#### 内联样式>内部样式表
HTML

```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>cssTest</title>

<!-- <link rel="stylesheet" type="text/css" href="../css/cssTest.css"> -->
<style type="text/css">
*{
font-size: 10px;
}
</style>
</head>
<body>
<div>内部样式</div>
<div style="font-size: 20px;">内联样式</div>
</body>
</html>
```
页面效果(内部样式失效,内联样式决定字体大小)
![enter description here][1]

[1]: ./images/%E5%86%85%E8%81%94%E5%A4%A7%E4%BA%8E%E5%86%85%E9%83%A8_1.png "内联大于内部"

时间: 2024-10-10 09:09:36

CSS作用域问题的相关文章

Vue style里面使用@import引入外部css, 作用域是全局的解决方案

问题描述 使用@import引入外部css,作用域却是全局的 <template> </template> <script> export default { name: "user" }; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> @import &q

vue遇到的一些问题

vue的使用涉及的一些技术栈 CLI:Vue-CLI UI:Element HTML:Pug(Jade) CSS:Less JavaScript:ES6 ES6 import引用问题 在ES6中,模块系统的导入与导出采用的是引用导出与导入(非简单的数据类型),也就是说,如果在一个模块中华定义了一个对象并导出,在其他模块的导入使用时,导入的其实一个变量引用(指针),如果修改了对象中的属性,并影响其他模块的使用: 通常情况下,系统体量不大时,我们可以使用JSON.pase (JSON.stringi

vue组件最佳实践

看了老外的一篇关于组件开发的建议(强烈建议阅读英文原版),感觉不错翻译一下加深理解. 这篇文章制定一个统一的规则来开发你的vue程序,以至于达到一下目的.1.让开发者和开发团队更容易发现一些事情.2.让你更好的利用你的IDE.3.让你更加容易的使用打包工具4.让你的代码更容易碎片化以达到复用的目的. 基于模块开发 用一些功能单一的小模块来组织你的应用 Why? 对于你自己和你团队的人来说较小的模块更容易看懂 维护 复用和调试. How? 每个组件应该保持单一 独立 可复用 可测试把你很大的组件拆

【webpack】-- 样式加载

加载css需要用到css-loader和style-loader css-loader将@import 和 url 处理成正规的ES6 import ,如果@import指向的是一个外部资源,css-loader会跳过,而只会对内部资源做处理.css-loader处理之后,style-loader会将输出的css注入到打包文件中.css默认是inline模式,且实现了HMR接口.但inline不太适用于生产环境(全部输出在页面上).还需要用extracttextplugin生成一个单独的css文

【webpack2】-- 入门与解析

每次学新东西总感觉自己是不是变笨了,看了几个博客,试着试着就跑不下去,无奈只有去看官方文档. webpack是基于node的.先安装最新的node. 1.初始化 安装node后,新建一个目录,比如html5.cmd中切到当前文件夹. npm init -y 这个命令会创建一个默认的package.json.它包含了项目的一些配置参数,通过它可以进行初始安装.详细参数:https://docs.npmjs.com/files/package.json. 不要y参数的话,会在命令框中设置各项参数,但

Vue 开发常见问题集锦

涉及技术栈 CLI: Vue-CLI UI: Element HTML: Pug(Jade) CSS: Less JavaScript: ES6 正文: polyfill 与 transform-runtime 首先,vue-cli 为我们自动添加了 babel-plugin-transform-runtime 这个插件,该插件多数情况下都运作正常,可以转换大部分 ES6 语法. 但是,存在如下两个问题: 异步加载组件时,会产生 polyfill 代码冗余 不支持对全局函数与实例方法的 poly

Webpack2 视频教程

原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」.Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲解的.这个基本就是目前国内最好的 Webpack 2.0 最好的学习视频了,希望可以对新手或者复习相关知识的朋友有用. 原文发表于我的技术博客 Webpack 是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代

Vue.js语法糖整理

el:element 需要获取的元素,一定是HTML中的根容器元素 data:用于数据的存储 methods:用于存储各种方法 数据绑定字面量只加载一次{{* msg}} data里面可以进行简单的运算: methods:{ getHome(){ return "早上好" } } -------------------------------------------------- HTML中渲染{{getHome()}} //得到的结果是--->早上好 v-bind绑定属性简写就

你应该要知道的vue.js

前言 小组同事最近都在学习前端,目前我们小组前端技术栈主要是vue.在和同事交流过程成,发现他们对vue都不了解,所以整理了问的比较多的问题. 组件data为什么必须是函数? 因为组件可能被多处使用,但它们的data是私有的,所以每个组件都要return一个新的data对象,如果共享data,修改其中一个会影响其他组件 组件通信 父子组件通信: props.$emit / $on.provide / inject(2.2.0 新增,主要为高阶插件/组件库提供用例) 非父子组件的通信: event