描述CSS选择器及其优先级规则

11 篇文章 0 订阅

一․描述一下CSS选择器及其优先级规则

CSS选择器是用于指定CSS样式应应用于哪些HTML元素的模式。通过选择器,我们可以定位到特定的元素或元素组,并为它们应用样式。CSS选择器有多种类型,每种类型都有其特定的用途和语法。

以下是几种常见的CSS选择器:

  1. 元素选择器:根据HTML元素的名称来选择元素。例如,p选择器会选择所有的<p>元素。
  2. 类选择器:通过HTML元素的class属性来选择元素。类选择器使用点号(.)作为前缀。例如,.myClass会选择所有class为"myClass"的元素。
  3. ID选择器:通过HTML元素的ID属性来选择元素。ID选择器使用井号(#)作为前缀。例如,#myID会选择ID为"myID"的元素。
  4. 属性选择器:根据元素的属性和属性值来选择元素。例如,[type="text"]会选择所有type属性为"text"的元素。
  5. 伪类选择器:用于选择HTML元素的特定状态。例如,:hover选择器会选择鼠标悬停在其上的元素。
  6. 后代选择器(空格):选择特定元素的后代元素。例如,div p会选择所有在<div>元素内部的<p>元素。
  7. 子元素选择器(>):选择特定元素的直接子元素。例如,div > p会选择所有作为<div>元素直接子元素的<p>元素。
  8. 相邻兄弟选择器(+):选择紧接在另一元素后的元素,且二者有相同父元素。
  9. 通用兄弟选择器(~):选择某元素后面的所有兄弟元素,且二者有相同父元素。

关于CSS选择器的优先级规则,它主要基于选择器的特定性和源顺序。以下是基本规则:

  • 内联样式(在HTML元素内部使用style属性)具有最高的优先级。
  • ID选择器的优先级高于类和属性选择器。
  • 类选择器、属性选择器和伪类选择器的优先级相同。
  • 元素选择器和伪元素选择器的优先级最低。
  • 当选择器的特定性相同时,最后出现的规则会覆盖先前的规则(源顺序)。
  • 使用!important声明可以覆盖任何先前的规则,但应尽量避免使用,因为它会使样式表更难维护和理解。

特定性是通过给每个选择器分配一个权重来计算的,这个权重基于选择器的类型和数量。例如,ID选择器的权重高于类选择器,类选择器的权重高于元素选择器。当比较两个选择器的优先级时,会计算它们的特定性权重,权重更高的选择器将优先应用。

二․解释JavaScript中的闭包是什么,并给出一个例子。

在JavaScript中,闭包(Closure)是一个非常重要的概念。简单来说,闭包就是一个函数能够访问和操作函数外部的词法环境(lexical environment)的能力。这意味着一个函数内部定义的函数(称为内嵌函数)可以访问其父级函数的变量,甚至在父级函数执行完毕后,这些变量依然可以被内嵌函数访问。这是因为闭包可以维持一个到其外部作用域的引用。

下面是一个简单的闭包示例:

 

javascript复制代码

function outerFunction(outerVariable) {
return function innerFunction(innerVariable) {
console.log('outerVariable:', outerVariable);
console.log('innerVariable:', innerVariable);
}
}
const myInnerFunction = outerFunction('Hello');
myInnerFunction('World'); // 输出: outerVariable: Hello, innerVariable: World

在这个例子中,outerFunction 是一个外部函数,它接受一个参数 outerVariable,并返回一个内部函数 innerFunctioninnerFunction 接受一个参数 innerVariable,并打印出 outerVariable 和 innerVariable 的值。

当我们调用 outerFunction('Hello') 时,它返回了 innerFunction,并且这个返回的 innerFunction 仍然可以访问到 outerVariable(即使 outerFunction 已经执行完毕)。这是因为 innerFunction 形成了一个闭包,它保持了对 outerFunction 的词法环境的引用,包括 outerVariable

然后,我们将返回的 innerFunction 赋值给 myInnerFunction,并调用它,传入参数 'World'。此时,myInnerFunction(即 innerFunction)仍然可以访问到 outerVariable 的值 'Hello',并打印出来。这就是闭包的作用。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江边小子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值