CSS学习笔记【1】
1 CSS的定义
- CSS 是一种描述 HTML 文档样式的语言。
- CSS 描述应该如何显示 HTML 元素。
- CSS 指的是层叠样式表* (Cascading Style Sheets)
- CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素
- CSS 节省了大量工作。它可以同时控制多张网页的布局
- 外部样式表存储在 CSS 文件中
- *也称级联样式表。
2 CSS的引入方法
- 行内样式
- 提示:行内样式失去了样式表的许多优点(通过将内容与呈现混合在一起)。请谨慎使用此方法。
<p style="background-color: #F0FFFF;">123</p>
- 注意语法:style=" ;"
- 头部样式/内部样式
<style>
body {
background-color: lightblue;
}
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
font-size: 20px;
}
</ style>
- 外部样式
- 外部 .css 文件不应包含任何 HTML 标签
- 注意:请勿在属性值和单位之间添加空格(例如 margin-left: 20 px;)。正确的写法是:margin-left: 20px;
<link rel="stylesheet" type="text/css" href="css1.css"/
2.1 各种引入方式的优先级
- 【外部引入】与【内部样式】某个元素产生冲突时,按照代码顺序自上到下优先级升高,“谁距离html最近就听谁的”,但当元素未出现冲突时,样式可以叠加
- 【行内样式】优先级最高
!important
赋予最高优先级
2.2 四种基本CSS选择器
- CSS 选择器用于“查找”(或选取)要设置样式的 HTML 元素。
2.2.1 标签选择器
- 元素选择器根据元素名称来选择 HTML 元素。
p {
text-align: center;
color: red;
}
2.2.2 id选择器
- id 选择器使用 HTML 元素的 id 属性来选择特定元素。
- 元素的 id 在页面中是唯一的,因此 id 选择器用于选择一个唯一的元素!
- 要选择具有特定 id 的元素,请写一个井号(#),后跟该元素的 id。
- id不能以数字开始
- 一个元素只允许选择一个id
#para1 {
text-align: center;
color: red;
}
<p id="para1"></p>
2.2.3 类选择器
- 类选择器选择有特定 class 属性的 HTML 元素。
- 如需选择拥有特定 class 的元素,写一个句点(.)字符,后面跟类名
- HTML 元素可以引用多个类
<!DOCTYPE html>
<html>
<head>
<style>
.center {
text-align: center;
color: red;
}
</style>
</head>
<body>
<h1 class="center">居中的红色标题</h1>
<p class="center">居中的红色段落。</p>
</body>
</html>
- 还可以指定只有特定的 HTML 元素会受类的影响。
- 在这个例子中,只有具有 class="center" 的
元素会居中对齐:
p.center {
text-align: center;
color: red;
}
- 类选择器也不能以数字开头
2.2.4 通配符选择器
- 通用选择器(*)选择页面上的所有的 HTML 元素。
- 下面的 CSS 规则会影响页面上的每个 HTML 元素:
* {
text-align: center;
color: blue;
}
- 通配符选择器的用途:
- 统一去除某些默认样式:比如无序列表的标引、超链接的下划线
四大选择器的优先级:id>类>标签>通配符
2.3 基本选择器的组合
2.3.1 分组选择器
- 分组选择器选取所有具有相同样式定义的 HTML 元素。
下面的 CSS 代码(h1、h2 和 p 元素具有相同的样式定义):
h1 {
text-align: center;
color: red;
}
h2 {
text-align: center;
color: red;
}
p {
text-align: center;
color: red;
}
- 最好对选择器进行分组,以最大程度地缩减代码。
- 用逗号来分隔每个选择器。
h1, h2, p {
text-align: center;
color: red;
}
2.3.2 后代选择器
-
后代选择器(descendant selector)又称为包含选择器
-
后代选择器可以选择作为某元素后代的元素。
-
根据上下文选择元素
-
我们可以定义后代选择器来创建一些规则,使这些规则在某些文档结构中起作用,而在另外一些结构中不起作用。
-
举例来说,如果您希望只对 h1 元素中的 em 元素应用样式,可以这样写:
h1 em {color:red;}
- 上面这个规则会把作为 h1 元素后代的 em 元素的文本变为 红色。其他 em 文本(如段落或块引用中的 em)则不会被这个规则选中:
<h1>This is a <em>important</em> heading</h1>
<p>This is a <em>important</em> paragraph.</p>
- 当然,您也可以在 h1 中找到的每个 em 元素上放一个 class 属性
- 但是显然,后代选择器的效率更高。
语法解释
-
在后代选择器中,规则左边的选择器一端包括两个或多个用空格分隔的选择器。选择器之间的空格是一种结合符(combinator)。
-
每个空格结合符可以解释为“... 在 ... 找到”、“... 作为 ... 的一部分”、“... 作为 ... 的后代”,但是要求必须从右向左读选择器。
-
因此,h1 em 选择器可以解释为 “作为 h1 元素后代的任何 em 元素”。
-
如果要从左向右读选择器,可以换成以下说法:“包含 em 的所有 h1 会把以下样式应用到该 em”。
具体应用
- 后代选择器的功能极其强大。有了它,可以使 HTML 中不可能实现的任务成为可能。
-假设有一个文档,其中有一个边栏,还有一个主区。边栏的背景为蓝色,主区的背景为白色,这两个区都包含链接列表。
-不能把所有链接都设置为蓝色,因为这样一来边栏中的蓝色链接都无法看到。
- 解决方法是使用后代选择器。在这种情况下,可以为包含边栏的 div 指定值为 sidebar 的 class 属性,
- 并把主区的 class 属性值设置为 maincontent。然后编写以下样式:
div.sidebar {background:blue;}
div.maincontent {background:white;}
div.sidebar a:link {color:white;}
div.maincontent a:link {color:blue;}
-
有关后代选择器有一个易被忽视的方面,即两个元素之间的层次间隔可以是无限的。
-
例如,如果写作 ul em,这个语法就会选择从 ul 元素继承的所有 em 元素,而不论 em 的嵌套层次多深。
-
因此,ul em 将会选择以下标记中的所有 em 元素:
<ul>
<li>List item 1
<ol>
<li>List item 1-1</li>
<li>List item 1-2</li>
<li>List item 1-3
<ol>
<li>List item 1-3-1</li>
<li>List item <em>1-3-2</em></li>
<li>List item 1-3-3</li>
</ol>
</li>
<li>List item 1-4</li>
</ol>
</li>
<li>List item 2</li>
<li>List item 3</li>
</ul>
2.3.3 子元素选择器
-
如果不希望选择任意的后代元素,而是希望缩小范围,只选择某个元素的子元素,使用子元素选择器(Child selector)。
-
例如,如果希望选择只作为 h1 元素子元素的 strong 元素,可以这样写:
h1 > strong {color:red;}
- 这个规则会把第一个 h1 下面的两个 strong 元素变为红色,但是第二个 h1 中的 strong 不受影响:
<h1>This is <strong>very</strong> <strong>very</strong> important.</h1>
<h1>This is <em>really <strong>very</strong></em> important.</h1>
结合后代选择器和子选择器
table.company td > p
- 上面的选择器会选择作为 td 元素子元素的所有 p 元素,这个 td 元素本身从 table 元素继承,该 table 元素有一个包含 company 的 class 属性。
3 选择器的权重值
选择器 | 权重值 |
---|---|
!important | >1000 |
内联选择器 | =1000 |
id | 100 |
类(伪类) | 10 |
标签 | 1 |
通配符 | 0 |
- 权重值可叠加,但不进位 (10个标签叠加,优先级也无法超过类)