2022-07-06随笔

99 阅读7分钟

CSS 基础

继承控制

CSS 为控制继承提供了三个特殊的通用属性值。每个 css 属性都接收这些值。

  • inherit:设置该属性会使子元素属性和父元素相同。实际上,就是 "开启继承".
  • initial:设置属性值和浏览器默认样式相同。如果浏览器默认样式中未设置且该属性是自然继承的,那么会设置为 inherit 。
  • unset:将属性重置为自然值,也就是如果属性是自然继承那么就是 inherit,否则和 initial一样

重设所有属性值

CSS 的 shorthand 属性all可以用于同时将这些继承值中的一个应用于(几乎)所有属性。它的值可以是其中任意一个 (inherit, initial or unset)。

层叠

通用选择器 (*),组合符 (+, >, ~, ' '),和否定伪类 (:not) 不会影响优先级。

影响层叠的三个重要因素

  • 资源顺序
  • 优先级
  • 重要程度

资源顺序

如果有超过一条规则,而且都是相同的权重,那么最后面的规则会应用。可以理解为后面的规则覆盖前面的规则,直到最后一个开始设置样式。

优先级

本质上,不同类型的选择器有不同的分数值,把这些分数相加就得到特定选择器的权重,然后就可以进行匹配。

一个选择器的优先级可以说是由四个部分相加 (分量),可以认为是个十百千 — 四位数的四个位数:

  1. 千位:如果声明在style的属性(内联样式)则该位得一分。这样的声明没有选择器,所以它得分总是 1000。
  2. 百位:选择器中包含ID选择器则该位得一分。
  3. 十位:选择器中包含类选择器属性选择器或者伪类则该位得一分。
  4. 个位:选择器中包含元素伪元素选择器则该位得一分。

例如:

选择器千位百位十位个位优先级
h100010001
h1 + p::first-letter00030003
li > a[href*="en-US"] > .inline-warning00220022
#identifier01000100
内联样式10001000

重要程度

!important:有一个特殊的 CSS 可以用来覆盖所有上面所有优先级计算,不过需要很小心的使用 — !important。用于修改特定属性的值, 能够覆盖普通规则的层叠。

CSS选择器

类型选择器

类型选择器有时也叫做“标签名选择器”或者是”元素选择器“

全局选择器

全局选择器,是由一个星号(*)代指的,它选中了文档中的所有内容(或者是父元素中的所有内容,比如,它紧随在其他元素以及邻代运算符之后的时候)

类选择器

类选择器以一个句点(.)开头,会选择文档中应用了这个类的所有物件.

ID 选择器

ID 选择器开头为#而非句点,不过基本上和类选择器是同种用法.
可是在一篇文档中,一个 ID 只会用到一次。

属性选择器

HTML元素可以带有属性,提供了关于如何标记的更详细信息。

CSS 中,你能用属性选择器来选中带有特定属性的元素。 属性选择器包含以下几种:

选择器示例描述
[attr]a[title]匹配带有一个名为attr的属性的元素
[attr=value]a[href="cn.bing.com"]匹配带有一个名为attr的属性的元素,其值为value的元素
[attr~=value]p[class~="special"]匹配带有一个名为attr的属性的元素,其值为value,或者匹配带有一个attr属性的元素,其值有一个或者更多,至少有一个和value匹配。
[attr|=value]div[lang|="zh"]匹配带有一个名为attr的属性的元素,其值可正为value,或者开始为value,后面紧随着一个连字符。
[attr^=value]li[class^="box-"]匹配带有一个名为attr的属性的元素,其值开头为value子字符串。
[attr$=value]li[class$="-box"]匹配带有一个名为attr的属性的元素,其值结尾为value子字符串
[attr*=value]li[class*="box"]匹配带有一个名为attr的属性的元素,其值的字符串中的任何地方,至少出现了一次value子字符串。
[attr=value i]li[class^="a" i]使属性选择器大小写不敏感

伪类元素

伪类是选择器的一种,它用于选择处于特定状态的元素.
伪类开头为冒号:.

伪类选择器示例描述
:activea:active在用户激活(例如点击)元素的时候匹配
:hovera:hover当用户悬浮到一个元素之上的时候匹配
:visiteda:visited匹配已访问链接
:linka:link匹配未曾访问的链接
:checkedinput:checked匹配处于选中状态的单选或者复选框
:enabledinput:enabled匹配处于开启状态的用户界面元素
:disabledinput:disabled匹配处于关闭状态的用户界面元素
:emptyp:empty匹配除了可能存在的空格外,没有子元素的元素。
:focusinput:focus当一个元素有焦点的时候匹配
:read-onlyinput:read-only匹配用户不可更改的元素
:read-writeinput:read-write匹配用户可更改的元素
:not(selector):not(p)匹配作为值传入自身的选择器未匹配的物件
:first-childp:first-child匹配兄弟元素中的第一个元素
:first-of-type p:first-of-type匹配兄弟元素中第一个某种类型的元素
:last-childp:last-child匹配兄弟元素中最末的那个元素
:last-of-typep:last-of-type匹配兄弟元素中最后一个某种类型的元素
:only-childp:only-child匹配没有兄弟元素的元素
:only-of-typep:only-of-type匹配兄弟元素中某类型仅有的元素
:nth-child(n)p:nth-child(2)匹配一列兄弟元素中的元素——兄弟元素按照an+b形式的式子进行匹配(n从0开始)
:nth-of-type(n)p:nth-of-type(2)匹配某种类型的一列兄弟元素——兄弟元素按照an+b形式的式子进行匹配
:nth-last-child(n)p:nth-last-child(2)匹配一列兄弟元素,从后往前倒数。兄弟元素按照an+b形式的式子进行匹配
:nth-last-of-type(n)p:nth-last-of-type(2)匹配某种类型的一列兄弟元素,从后往前数。兄弟元素按照an+b形式的式子进行匹配

伪元素选择器

伪元素以类似元素的方式表现,不过表现得是像你往标记文本中加入全新的 HTML 元素一样,而不是向现有的元素上应用类.

伪元素是一个附加在选择器末尾的关键词,通过伪元素您不需要借助元素的 ID 或 class 属性就可以对被选择元素的特定部分定义样式

伪元素开头为双冒号::

常用的伪元素:

伪元素示例描述
::beforep::before匹配出现在原有元素的实际内容之前的一个可样式化元素
::afterp::after匹配出现在原有元素的实际内容之后的一个可样式化元素
::first-letterp::first-letter匹配元素的第一个字母。
::first-linep::first-line匹配包含此伪元素的元素的第一行。
::selectionp::selection匹配文档中被选择的那部分。

关系选择器

关系选择器示例描述
空格p span后代选择器
>p > span子代关系选择器
+p + img相邻兄弟选择器
~p ~ img通用兄弟选择

内容整理于MDN