非常教程

CSS参考手册

杂项 | Miscellaneous

Specificity

特定性是浏览器决定哪个CSS属性值与元素最相关的手段,因此将被应用。特定性基于由不同种类的CSS选择器组成的匹配规则。

如何计算特异性?

特定性是应用于给定CSS声明的权重,由匹配选择器中每个选择器类型的数量决定。当多个声明具有相同的特性时,CSS中的最后一个声明将应用于该元素。特定性仅适用于多个声明所针对的相同元素。按照CSS规则,直接目标元素总是优先于元素从其祖先继承的规则。

注:元素的邻近性在文档树中对特异性没有影响。

选择器类型

下列选择器类型列表按具体情况增加:

  • 类型选择器(例如h1)和伪元素(例如:before)。
  • 类选择器(例如.example),属性选择器(例如[type="radio"])和伪类(例如:hover)。
  • ID选择器(例如,#example)。
  • 通用选择器(*),组合子(+>~,“”)和否定伪类(:not())对特异性没有影响。(然而内部 声明的选择器是:not()这样做的)
  • 添加到元素的内联样式(例如,style="font-weight:bold")总是覆盖外部样式表中的任何样式,因此可以认为具有最高的特定性。

!important例外

important样式声明中使用规则时,此声明将覆盖任何其他声明。虽然在技术上!important与特异性没有任何关系,但它直接与它相互作用。!important,然而,使用这种做法不好的做法,应该避免这种做法,因为通过打破样式表中的自然级联使调试更加困难。当两个与!important规则相冲突的声明应用于相同的元素时,将应用具有更高特异性的声明。

一些经验法则:

  • 在考虑 !important 之前,总是寻找一种使用特异性的方法
  • 只能用于!important覆盖外部CSS的特定于页面的CSS(来自外部库,如Bootstrap或normalize.css)。
  • !important在编写插件/混搭时切勿使用。
  • 切勿!important用于在整个网站的CSS。

!important

  1. 更好地使用CSS层叠属性
  1. 使用更具体的规则。通过在元素之前指定一个或多个元素,您将选择规则变得更具体,并获得更高的优先级:

<div id="test"> <span>Text</span> </div>

div#test span {color:green; } div span {color:blue; } span {color:red; }

  1. 作为(2)的一个无意义的特例,重复简单的选择器来增加特殊性,当你没有更多的指定。无论顺序,文本将是绿色的,因为该规则是最具体的。(而且,尽管规则的顺序,蓝色的规则会覆盖红色的规则)您应该在以下情况下使用它: A)方案一:
  1. 您有一个全局CSS文件,可以在全局范围内设置您网站的可视化方面。
  1. 您(或其他人)在元素上使用内联样式。这被认为是非常糟糕的做法。

在这种情况下,您可以在全局CSS文件中设置特定的样式,因此重写直接在元素上设置的内联样式。

真实世界的例子:一些写得不好的使用内联样式的jQuery插件

B)另一种情况

#someElement p {
  color: blue;
}

p.awesome {
  color: red;
}

你怎么让awesome段落变红,甚至内部#someElement?没有!important,第一条规则将具有更多的特殊性,将赢得第二条规则。

如何重写 !important

A)简单地添加另一个CSS规则!important,并给选择器更高的特性(向选择器添加标签,ID或类),或者在稍后的点添加CSS规则。这是有效的,因为在特定的关系中,定义的最后一条规则胜出。

一些具有较高特异性的例子:

table td    { height: 50px !important; }
.myTable td { height: 50px !important; }
#myTable td { height: 50px !important; }

B)或者在现有的选择器之后添加相同的选择器:

td { height: 50px !important; }

C)或者重写原来的规则,以避免!important完全使用。

欲了解更多信息,请访问:

  • https://stackoverflow.com/questions/3706819/what-are-the-implications-of-using-important-in-css

  • https://stackoverflow.com/questions/9245353/what-does-important-in-css-mean

  • https://stackoverflow.com/questions/5701149/when-to-use-important-property-in-css

  • https://stackoverflow.com/questions/11178673/how-to-override-important

  • https://stackoverflow.com/questions/2042497/when-to-use-important-to-save-the-day-when-working-with-css

:not例外

否定伪类:not认为是特异性计算一个伪类。但是在确定选择器类型的计数时,选择器作为普通选择器放置在否定伪类中。

这块CSS ...

div.outer p {
  color:orange;
}
div:not(.outer) p {
  color: lime;
}

...与以下HTML一起使用时...

<div class="outer">
  <p>This is in the outer div.</p>
  <div class="inner">
    <p>This text is in the inner div.</p>
  </div>
</div>

...显示效果如下:

形式特异性

特定性基于选择器的形式。在以下情况下,*[id="foo"]即使选择一个ID,选择器也会计算为属性选择器来确定选择器的特殊性。

以下CSS样式..。

*#foo {
  color: green;
}
*[id="foo"] {
  color: purple;
}

...当与这个标记一起使用时...

<p id="foo">I am a sample text.</p>

...最后看起来是这样

这是因为它匹配相同的元素,但是ID选择器具有更高的特异性。

无视树的附近空间

元素与给定选择器中引用的其他元素的接近度对特异性没有影响。以下样式声明...

body h1 {
  color: green;
}
html h1 {
  color: purple;
}

...下面的HTML...

<html>
  <body>
    <h1>Here is a title!</h1>
  </body>
</html>

...将作为:

这是因为两个声明具有相同的选择器类型计数,但是html h1选择器是最后声明的。

直接目标元素与继承样式

直接定位元素的样式总是优先于继承的样式,而不管继承的规则的特殊性如何。这个CSS ...

#parent {
  color: green;
}
h1 {
  color: purple;
}

...下面的HTML...

<html>
  <body id="parent">
    <h1>Here is a title!</h1>
  </body>
</html>

...还将作为:

这是因为h1选择器专门针对元素,但是绿色选择器仅从其父项继承。

CSS

层叠样式表( Cascading Style Sheets )是一种用来表现 HTML 或 XML 等文件样式的计算机语言。CSS 不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

CSS目录

1.动画和转换 | Animations & Transitions
2.背景和边框 | Backgrounds & Borders
3.基本框模型 | Basic Box Model
4.基本用户界面 | Basic User Interface
5.框对齐 | Box Alignment
6. 级联和继承 | Cascading & Inheritance
7.颜色 | Color
8. 合成与混合 | Compositing & Blending
9.条件和规则 | Conditional Rules
10.计数器样式 | Counter Styles
11.设备适配 | Device Adaptation
12.扩展 | Extensions
13.滤镜效果 | Filter Effects
14.灵活的框布局 | Flexible Box Layout
15.字体 | Fonts
16.片段模块 | Fragmentation
17.全屏 API | Fullscreen API
18. 生成内容 | Generated Content
19.网格布局 | Grid Layout
20.图像值 | Image Values
21.初始线格局 | Inline Layout
22.列表和计数器 | Lists & Counters
23.逻辑属性 | Logical Properties
24.面具 | Masking
25.媒体查询 | Media Queries
26.杂项 | Miscellaneous
27.Miscellaneous Level 1
28.Miscellaneous Level 2
29.运动路径 | Motion Path
30. 多列布局 | Multi-column Layout
31.命名空间 | Namespaces
32.项目模型 | Object Model View
33.网页媒体 | Paged Media
34.定位布局 | Positioned Layout
35.伪元素 | Pseudo-
36.节奏大小 | Rhythmic Sizing
37. Ruby布局 | Ruby Layout
38.可缩放矢量图形 | Scalable Vector Graphics
39.滚动快照 | Scroll Snap
40.选择 | Selectors
41.形状 | Shapes
42.文本 | Text
43.文字装饰 | Text Decoration
44.变换 | Transforms
45.值和单位 | Values & Units
46.变量 | Variables
47.写入模型 | Writing Modes
48.CSS 教程
49.CSS 创建
50.CSS Id 和 Class选择器
51.CSS 简介
52.CSS 盒子模型
53.CSS Table(表格)
54.CSS 列表样式(ul)
55.CSS 链接(link)
56.CSS Fonts(字体)
57.CSS Text(文本)
58.CSS Backgrounds(背景)
59.CSS Display(显示) 与 Visibility(可见性)
60.CSS 尺寸 (Dimension)
61.CSS 分组和嵌套
62.CSS 轮廓(outline)属性
63.CSS Border(边框)
64.CSS 图像透明/不透明
65.CSS 导航栏
66.CSS 伪元素
67.CSS 伪类
68.CSS Float(浮动)
69.CSS Position(定位)
70.CSS 总结
71.CSS 属性选择器
72.CSS 媒体类型
73.CSS 图像拼合技术
74.CSS 实例
75.CSS 组合选择符
76.响应式 Web 设计 – 框架
77.响应式 Web 设计 – 视频(Video)
78.CSS 提示工具(Tooltip)
79.CSS 布局 Overflow
80.CSS 计数器
81.CSS 表单