css | 青训营笔记

57 阅读11分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

CSS样式概述

CSS:Cascading Style Sheets,层叠样式表
特点:

  • 以统一的方式完成相同的页面效果
  • 实现页面内容(html)与样式(css)相分离
  • 提高代码的可重用性和可维护性

CSS样式的定义格式:由选择器及一条或多条声明构成。

selector {declaration1; declaration2; ... declarationN }

选择器selector:需要改变样式的HTML元素
声明declaration:由一个属性和一个值组成。 1.png

书写CSS样式时,除遵循CSS样式定义规则外,还应注意以下特点:

  • CSS样式中的选择器严格区分大小写,属性和值不区分大小写,一般习惯将选择器、属性和值都采用小写的方式。
  • 多个属性之间必须用英文分号隔开,最后一个属性后的分号可以省略,但为了便于增加新样式,最好保留。
  • 若属性的值由多个单词组成,且中间包含空格,则必须为这个值加上英文引号。
  • 采用/*…*/对CSS代码进行注释。

css样式

<!--外部-->
<link rel="stylesheet" href=" /assets/style.css ">
<!--内部-->
<style>
    li { margin: 0 ;list-style: none; }
    p { margin : lem 0; }
</style>
<--内联-->
<p style="margin: lem0 ">Example content</p>

1. 内联样式

内联样式:又称行内样式,由HTML元素的style属性定义
语法:

<标记名称 style=“样式声明1;样式声明2;…;样式声明n;”>内容</标记名称>  

样式声明格式:样式属性 : 属性值;

<div style=“color:red; font-size:12px;width:200px;height:200px;background-color:grey;”>
	这是一个div
</div>

缺点:
属性值内容太多,会导致代码太乱,不能实现样式与元素相分离
只对其所在的标签及嵌套在其内的子标签起作用,其他元素想实现相同效果,需再重写相同的style属性,不能实现代码重用性

2. 内部样式表

使用<style></style>标记将样式表定义在HTML文档的元素中。
语法:

<head>
	<style>
		样式规则定义
	</style>
</head>

样式规则:一组可以应用在某些元素上的样式声明
样式规则语法:

选择器{
	样式声明1;
	样式声明2;
	…
	样式声明n;
}

例如:

<head>
	<style>
		div{
			color:red;
			font-size:12px;
			width:200px;
			height:200px;
			background-color:grey;
		}
	</style>
</head>
<body>
	<div>这是一个Div</div>
	<div>这是一个Div</div>
	<div>这是一个Div</div>
</body>

特点:以独立的方式,定义页面元素的样式(元素与样式相分离),并且能够让样式应用在多个元素中(提升可重用性和可维护性)
缺点:只能在当前页面中使用

3. 外部样式表

将样式定义在外部独立的CSS文件中,应用样式的HTML文档可以引入该CSS文件。
步骤:

  • 创建扩展名为.css的外部样式表文件,编写样式规则,样式规则由选择器和若干样式声明组成。
  • 在页面中以链接或导入的方式引入样式表文件。 链接式首先加载外部CSS文件,再加载网页页面,因此,这种情况下显示出来的网页从一开始就是带有样式效果的。
    导入式会在整个网页加载完毕后再装载CSS文件,即先将HTML的结构呈现出来,再把外部的CSS文件加载到网页当中,最终显示效果与链接式一样。但是,若网页比较大,或者网速较慢时会出现先显示没有统一CSS样式的HTML网页,然后再显示有样式的网页,这样会给阅读者带来不好的感觉。

4. 样式表的特征

(1)继承性:

样式继承是指书写CSS样式表时,子标签会继承父标签的某些样式。
user agent stylesheet:用户代理样式,即浏览器指定的默认样式。
CSS3提供了针对浏览器的前缀,现代浏览器的内核,主流内容主要有Mozilla、Webkit、Opera、Trident,前缀如下:
Chrome:谷歌浏览器,-webkit-
Safari:苹果浏览器,-webkit-
Firefox:火狐浏览器,-moz-
IE:-ms-
Opera:-o-

恰当使用继承可以简化代码,降低CSS样式的复杂性。但若在网页中所有的元素都大量继承样式,那么判断样式的来源就会很困难,所以对于字体、文本属性等网页中通用的样式,可以使用继承。如,字体、字号、颜色、行距等可以在body元素中统一设置,然后通过继承影响文档的所有文本。
并不是所有的CSS属性都可以继承,如 边框、外边距、内边距、背景、定位、元素宽高等属性。

(2)层叠性:

样式层叠是指多种CSS样式的叠加,即可以为一个元素定义多个样式规则或样式声明,只要样式声明不冲突,则所有样式声明都可应用于该元素上。

(3)样式冲突与优先级:

样式冲突是指多种CSS样式叠加时,出现属性相同而属性值不同的冲突现象。 不同优先级的样式表定义元素的不同属性都会作用在元素上,相同属性的只有优先级最高的会对元素起作用。
若样式表声明出现冲突,则按照样式规则优先级进行样式应用:

  • 低:浏览器缺省设置(User Agent StyleSheet)
  • 中:外部样式表
  • 次高:内部样式表
  • 高:内联样式表 注意:
    子元素定义的样式会覆盖继承来的样式
    样式优先级相同时,则采用就近原则,即选择离元素近的样式
    定义CSS样式时,对CSS样式属性值后缀“!important”可调整该样式为最高优先级。

选择器

  • 选择器用于指定CSS样式作用的HTML元素。
  • 使用CSS可对HTML页面中的元素实现一对一、一对多或多对一的控制。

基本选择器

(1)通用选择器:(通配选择器)

目的:作用范围最广,为了匹配HTML网页文档中所有的元素。
语法:*{样式声明;}
特点:匹配页面所有的元素,效率低,尽量少使用。

*{
	background-color:yellow;
	margin:0;    /*定义外边距*/
	padding:0;   /*定义内边距*/
}

(2)元素/标签选择器:

作用:指用HTML标签名作为选择器,为页面中某一类标签指定统一的CSS样式。
语法:标签名称{样式声明;}
特点:可快速为页面中同类型的标签统一样式,但不能设计差异化样式。

p{
	color:red;
	font-size:25px;
}
<body>
	<p>段落1</p>
	<h1>标题</h1>
	<p>段落2</p>
</body>

(3)类选择器:

作用:允许被任何一个元素的class属性进行引用的选择器
语法:.类名{样式声明;}
注意:类名允许包含字母、数字、下划线和连字符-,不允许以数字开头
引用语法:<标签名称 class=“类名”></标记名称>
特点:可为元素对象定义单独或相同的样式。

.color{
	color:red;	
}
<body>
	<p class=“color”>段落</p>
	<h1 class=“color”>标题</h1>
</body>

(4)id选择器:

作用:为标有特定 id 的 HTML 元素指定特定的样式
语法:#id值{样式声明;}
id属性设置:<标签名称 id=“id值”></标记名称>

#footer{
	color:red;		
        font-size:20px;
	background-color:#aaaaaa;
	width:300px;
	height:300px;
}
<body>
	<div id=“footer”>段落</div>
	<div id=“top”>段落</div>
</body>

群组选择器

作用:将多个选择器放在一起,统一声明样式
语法:选择器1,选择器2,…,选择器n{样式声明;}

#footer , p , div , .color{
	color:red;
}
#footer{   color:red;      }
p{	color:red;         }
div{	color:red;         }
.color{	color:red;         }

层次选择器

作用:通过HTML元素间的层次关系获取元素,并为其定义样式

选择器类型描述
E F后代选择器选择E元素的所有后代F元素
E > F子代选择器选择E元素下所有的子元素F
E + F相邻兄弟选择器选择紧接在E元素后的F元素
E ~ F通用兄弟选择器选择E元素后边的所有兄弟F元素

(1)后代选择器:

当元素发生嵌套时,内层元素就成为外层元素的后代。
格式:外层元素 内层元素{样式声明;}
作用:选择外层元素的所有后代内层元素。

#footer  p{   color:red;        }
<div id=“footer”>
	<h1>标题1</h1>	
	<p>段落1</p>
	<div>
		<p>段落2</p>
        </div>
	<h1>标题2</h1>	
	<p>段落3</p>
</div>	

(2)子代选择器:

格式:外层元素 >内层元素{样式声明;}
作用:选择外层元素的所有直接后代元素(间接元素不适用)。

#footer>p {   color:red;        }
<div id=“footer”>
	<h1>标题1</h1>	
	<p>段落1</p>
	<div>
		<p>段落2</p>
        </div>
	<h1>标题2</h1>	
	<p>段落3</p>
</div>	

(3)相邻兄弟选择器:

格式:元素E +元素F { 样式声明; }
作用:选择紧接在E元素后的F元素

h1+p{			
	color: red;		
        background: #CCCCCC;
}
<div id=“footer”>
	<h1>标题1</h1>	
	<p>段落1</p>
	<p>段落2</p>
	<h1>标题2</h1>	
	<p>段落3</p>
</div>	

(4)通用兄弟选择器: 格式:元素E ~元素F{样式声明;} 作用:选择E元素后边的所有兄弟元素F

h1~p{			
	color: red;		
        background: #CCCCCC;
}
<div id=“footer”>
	<h1>标题1</h1>	
	<p>段落1</p>
	<p>段落2</p>
	<h1>标题2</h1>	
	<p>段落3</p>
</div>	

伪类选择器

伪类:同一个元素,根据其不同的状态,有不同的样式。
作用:匹配元素不同状态
语法:

E: pseudo-class  {property:value}  

E:HTML元素
pseudo-class:伪类选择器名称
property:属性名称
value:属性值

“伪”的含义:它不像类样式那样,需要使用class属性。

选择器
E:link链接伪类选择器选择匹配的E元素,而且匹配元素被定义了超链接并未被访问过。常用于链接锚点上
E:visited链接伪类选择器选择匹配的E元素,而且匹配元素被定义了超链接并已被访问过。常用于链接锚点上
E:active用户行为伪类选择器选择匹配的E元素,且匹配元素被激活。常用于锚点与按钮上
E:hover用户行为伪类选择器选择匹配的E元素,且用户鼠标在停留在元素E上。
E:focus用户行为伪类选择器选择匹配的E元素,且匹配的元素获得焦点

超链接的4种状态,需要有特定的书写顺序才能生效。
a:link {}
a:visited {}
a:hover {}
a:active {}
可靠的顺序可用喜欢(love)和讨厌(hate)两个词来概括:
l(link)ov(visited)e h(hover)a(active)te

a:link{
	color: #0f0;
}
a:visited{
	color: #0000ff;
}
a:hover{
	color: #CCCCCC;
}
a:active{
	color: #f00;
}
<body>
	<a href="http://www.baidu.com" target="_blank">Web前端技术</a>
</body>

结构伪类是CSS3新设计的选择器,利用文档结构树实现元素过滤,通过文档结构的相互关系来匹配特定的元素,从而减少文档内class属性和id属性的定义,使得文档更加简洁。

2.png

E:nth-child(n):

作用:选择所有在其父元素中第n个位置的匹配E的子元素。
n可以是数字、关键词或公式。

tr:nth-child(odd) /*用于匹配下标是奇数的子元素的关键词*/
{
	background-color:#ff0000;
}
tr:nth-child(even) /*用于匹配下标是偶数的子元素的关键词*/
{
	background-color:#0000ff;
}
p:nth-child(2n+1) /*使用公式(an+b),表示周期的长度,n为计数器(从0开始),b是偏移量*/
{
	background:#ff0000;
}

E:nth-of-type(n):

作用:选择所有在其父元素中同类型第n个位置的匹配E的子元素。
N可以是数字、关键词或公式。

属性选择器

在HTML中,通过各种各样的属性可以给元素增加很多附加的信息。CSS3在CSS2的基础上扩展了这些属性选择器,支持基于模式匹配来定位元素。

选择器描述
E[attr]选择匹配具有属性attr的E元素。其中E可以省略,表示选择定义了attr属性的任意类型元素
E[attr=val]选择匹配具有属性attr的E元素,并且attr的属性值为val(其中val区分大小写),同样E元素省略时表示选择定义了attr属性值为val的任意类型元素
E[attr|=val]选择匹配E元素,且E元素定义了属性attr,attr属性值是一个具有val或者以val-开始的属性值。常用于lang属性(例如lang=“en-us”)。例如p[lang=en]将匹配定义为英语的任何段落,无论是英式英语还是美式英语
E[attr~=val]选择匹配E元素,且E元素定义了属性attr,attr属性值具有多个空格分割的值,其中一个值等于val。例如,.info[title~=more]将匹配元素具有类名info,而且这个元素设置了一个属性title,同时title属性值包含了”more”的任何元素。如<a class=“info” title=“click here for more information”>click

通配符类型示例
^匹配起始符span[class^=span]表示选择以类名“span”开头的所有span元素
$匹配终止符a[href$=pdf]表示选择以“pdf”结尾的所有href属性的所有a元素
*匹配任意符a[title*=site]匹配a元素,而且a元素的title属性值中任意位置有“site”字符的任何字符串

选择器优先级

① 在属性后面使用 !important会覆盖页面内任何位置定义的元素样式
② 作为style属性写在元素标签上的内联样式
③ id选择器
④ 类选择器/伪类选择器/属性选择器
⑤ 标签选择器
⑥ 通配符选择器
⑦ 浏览器默认属性或继承的属性

语法: 属性:值!important;
作用:提升指定样式规则的应用优先权。

选择器类型权值
通配符选择器0,0,0,0
元素选择器0,0,0,1
类选择器0,0,1,0
属性选择器0,0,1,0
伪类选择器0,0,1,0
ID选择器0,1,0,0
内联样式1,0,0,0

例:

<!doctype html>
<html lang="zh-cn">

	<head>
		<title>选择器优先级</title>
		<meta charset="utf-8">
		<style>
			#d1 #s1 {
				color: red;
			}
			
			#d1 p span {
				color: orange;
			}
			
			.p1 span {
				color: yellow;
			}
			
			#s1 {
				color: pink;
			}
			
			#d1 .p1 span {
				color: blue;
			}
			
			#d1 #p1 #s1 {
				color: green;
			}
		</style>
	</head>

	<body>
		<div id="d1">
			<p id="p1" class="p1">
				<span id="s1">这是一个span</span>
			</p>
		</div>
	</body>

</html>