为什么使用CSS样式表?
- 样式表能实现内容与样式的分离,方便团队开发,形成内容与样式和谐统一的完整网页
- 样式复用、方便网站的后期维护,同一网站共用同一样式,确保网站统一的风格
- 页面的精确控制,实现精美、复杂页面
CSS的用途
- 外观、美化
- 布局、定位
CSS基本语法
<head>
<style type="text/css"> /*<style>标签声明标签内为CSS*/
选择器(即修饰对象){
/*
多条样式规则
1.多个属性间用分号分隔
2.用冒号声明对应属性值
*/
对象的属性1: 属性值1;
对象的属性2: 属性值2;
}
</style>
</head>
一、选择器的分类
- 标签选择器
/*
标签选择器:用于修饰同类HTML标签的共性风格,作用范围是全局;
记住标签(li)是可变的^_^;
标签选择器直接应用于HTML标签;
*/
<style type="text/css">
li {
color:red;
font-size:30px;
font-family:黑体;
}
</style>
- 类选择器
/* 类选择器 可在页面中多次使用
定义样式,注意类名有点号
*/
.red {
color: red;
}
<!-- class=""只要是在标签(任何个)内即可
应用类样式,其他元素也可以使用
-->
<li class="red">家用电器</li>
- ID选择器
/* ID选择器 同一个页面只能用一次*/
#gray {
background: lightgray; /*设置背景色*/
}
二、应用样式的方式
1. 内部样式表
HTML和CSS在同一文件,方便开发时修改,样式和内容分离不够彻底,不利于页面复用
<head>
<style type="text/css">
….. //样式定义
</style >
</head>
2. 外部样式表(建议采用)
分别定义*.css和*.html文件,样式和内容彻底分离,多个网页可共享同一CSS
CSS代码保存在扩展名为.css的样式表中
.blue{color:blue;}
….. //CSS样式定义
HTML文件引用扩展名为.css的样式表,有两种方式
(1)链接式(常用)
<head>
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
(2) 导入式
<head>
……
<style type="text/css">
@import url("style.css");
</style>
</head>
注:二者的区别
<link/>标签属于XHTML,@import是属于CSS2.1
使用<link/>链接的CSS文件先加载到网页当中,再进行编译显示
使用@import导入的CSS文件,客户端显示HTML结构,再把CSS文
件加载到网页当中
@import是属于CSS2.1特有的,对于不兼容CSS2.1的浏览器来说就
是无效的。
3.行内样式表
单独定义某个元素的样式,灵活方便。但因为内容与样式混写在一起,应尽量少用或不用
<li>
<a href=""#" style="color:red;font-size:10px;">日用百货</a>
</li>
三、CSS的复合选择器
1.后代选择器(常用)
在CSS选择器中通过嵌套的方式,对特殊位置的HTML标签进行声明
外层的标签写在前面,内层的标签写在后面,之间用空格分隔
标签嵌套时,内层的标签成为外层标签的后代;
不只是两个,可以多个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style type="text/css">
/* 选择的是多层标签共同控制的内容 */
p .lala {
color:blue;
}
</style>
</head>
<body>
<p>
啦啦啦啦
<span class="lala">后代选择器</span>
</p>
</body>
</html>
2.交集选择器
由两个选择器直接连接构成,选中二者各自元素范围的交集
第一个必须是标签选择器,第二个必须是类选择器或者ID选择器
选择器之间不能有空格,必须连续书写
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style type="text/css">
/* 选择是p标签元素里的且是类名为txt的元素*/
p.txt {
color:red;
}
</style>
</head>
<body>
<p class="txt">交集选择器</p>
</body>
</html>
3.并集选择器
多个选择器通过逗号连接而成
利用并集选择器同时声明风格相同样式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style type="text/css">
h2,.one,.two ,#three { 并集选择器
color:blue;
}
</style>
</head>
<body>
<h3>庭院深深深几许,杨柳堆烟,帘幕无重数。</h3>
<p class="one">玉勒雕鞍游冶处,楼高不见章台路。</p>
<p class="two">雨横风狂三月幕,门掩黄昏,无计留春住。</p>
<p id="three">泪眼问花花不语,乱红飞过秋千去。</p> -->
</body>
</html>
四、其他
1.通配符选择器
特点
- 设置页面中所有标签为统一的样式
- 通配符选择器选中的是所有标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<style type="text/css">
* { 通配符选择器(一般用于初始化,加载速度慢)
color:red;
}
</style>
</head>
<body>
....
</body>
</html>
2.多类名(类选择器)
可以给一个标签指定多个类名,从而达到更多的选择目的。
<div class="red font20">亚瑟</div>
在标签class 属性中写 多个类名
多个类名中间必须用空格分开
这个标签就可以分别具有这些类名的样式
五、CSS的高级选择器
1.层次选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>层次选择器</title>
<style type="text/css">
/* 层次选择器 */
/* p{
border:1px solid red; 给元素设置边框,1px是边框的宽度,
solid是边框的样式 (solid:实线,dotted:点线,dashed:虚线,
double:双线),red是边框的颜色
} */
/* 后代的 */
/* body p{
background:red; 背景色`
} */
/* 子选择 E>F 选择匹配的F元素,
且匹配的F元素是匹配的E元素的子元素 */
p>a {
background:red;
}
/* 相邻兄弟 E+F 选择匹配的F元素,
且匹配的F元素紧位于匹配的E元素后面*/
/* .demo+p {
background:red;
} */
/* 通用兄弟 E~F 选择匹配的F元素,
且位于匹配的E元素后的所有匹配的F元素*/
/* .demo~p {
background:red;
} */
</style>
</head>
<body>
<!-- <h1>00</h1>
--> <!-- 缩写语法 p{$}*10+ul>li*3>p{$@11} -->
<p>1</p>
<p class="demo">2</p>
<p>3</p>
<p>4</p>
<p>5</p>
<p>
<a href="#">啦啦啦</a>
</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<ul>
<li>
<p>11</p>
</li>
<li>
<p>12</p>
</li>
<li>
<p>13</p>
</li>
</ul>
</body>
</html>
后代选择器和子选择器的区别
子选择器仅是指它的直接后代,或者你可以理解为作用于子元素的第一代后代。
而后代选择器是作用于所有子后代元素。
后代选择器通过空格来进行选择,而子选择器是通过“>”进行选择。
2.结构伪类选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>css的高级选择器</title>
<style type="text/css">
/* 结构伪类选择器 */
/* 第一个 */
/*
body>p:first-child {
background:red;
} */
/* 最后一个 */
/* p:last-child {
background:red;
} */
/* 指定位置 */
/* body>p:nth-child(10) {
background: red;
} */
/* odd奇数位置 even偶数位置 */
/* body>p:nth-child(even) {
background:red;
} */
/* body>p:first-of-type {
background:red;
}
*/
/* body>p:last-of-type {
background:red;
} */
/* body>p:nth-of-type(4) {
background:red;
}
body>p:nth-child(1) {
background: red;
} */
</style>
</head>
<body>
<!-- <h1>00</h1>
--> <!-- 缩写语法 p{$}*10+ul>li*3>p{$@11} -->
<p>1</p>
<p class="demo">2</p>
<p>
<a href="#">啦啦啦</a>
</p>
<p>4</p>
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<ul>
<li>
<p>11</p>
</li>
<li>
<p>12</p>
</li>
<li>
<p>13</p>
</li>
</ul>
</body>
</html>
注:使用E F:nth-child(n)和E F:nth-of-type(n)的 区别:
E F:nth-child(n)在父级里从一个元素开始查找,不分类型
E F:nth-of-type(n)在父级里先看类型,再看位置
:first-child()和 :first-of-type()的区别
3.属性选择器
六、CSS的三大特性
1.层叠性
标签必须使用同一类型的选择器,最后定义的样式会 将前面定义的样式冲突部分覆盖掉。
(长江后浪推前浪,前浪死在沙滩上。)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>css的三大特性</title>
<style type="text/css">
/* 重叠性 */
div {
color:red;
}
div {
color:blue;
}
</style>
</head>
<body>
<div>
层叠性-标签必须使用同一类型的选择器,最后定义的样式会
将前面定义的样式冲突部分覆盖掉。(长江后浪推前浪,前浪死在沙滩上。)
</div>
</body>
</html>
2.继承性
继承性必须在嵌套结构中才会有;
该子元素标签会受父元素样式影响(子承父业;
继承性属性总结:
✔能被继承的属性:
1. color 2.text-,font-,line-这些元素开头的
X不能被继承的属性:
1. width 2. height 3. background
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>css的三大特性</title>
<style type="text/css">
/* 继承性 */
div {
color:blue;
font-size:100px;
text-decoration:underline; /*下划线*/
line-height: 80px; /*行高*/
/*不能继承*/
background:#666;
width:800px;
height:700px;
}
</style>
</head>
<body>
<div>
<p>
继承性-该子元素标签会受父元素样式影响(子承父业)
</p>
</div>
</body>
</html>
3.优先级
总结:
1. 优先级是使用了不同的选择器给同一个标签设置样式
2. 权重叠加
3. 继承的权重是0
4. 从左到右,左面的最大,一级大于一级,数位之间没有进制,
级别之间不可超越
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>css的三大特性</title>
<style type="text/css">
/* 优先级 行内样式(style) > id选择器 > 类选择器 > 标签选择器*/
div {
color: blue!important; !important 将优先级提到最高
}
.demo {
color: yellow;
}
#test {
color:lightpink;
}
/* 复合选择器 权重叠加的问题*/
/* 权重为1 */
/* li {
color:blue;
} */
/* 权重为 2 */
/* ul li {
color:lightpink;
} */
/* 权重为 11 *//*
.nav li {
color:red;
} */
/* 继承权重为0 */
/* .nav {
color:blue;
}
li {
color:gold;
} */
.nav li {
color:red;
}
.nav .pink {
color:pink;
}
</style>
</head>
<body>
<div class="demo" id="test" style="color: red">
优先级-优先级是使用了不同的选择器给同一个标签设置样式、权重叠加
</div>
<ul class="nav">
<li class="pink">通配符和继承权重为0</li>
<li>标签选择器为1</li>
<li>类(伪类)选择器为 10</li>
<li>id选择器 100</li>
<li>行内样式表为 1000</li>
<li>!important 无穷大</li>
</ul>
</body>
</html>
另外:改变无序列表ul-li的样式
li {
display:inline-block; ul横向排列
float: left;
list-style: none; 去掉ul-li黑点
}
float: left;
float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,
使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。
浮动元素会生成一个块级框,而不论它本身是何种元素。
如果浮动非替换元素,则要指定一个明确的宽度;否则,它们会尽可能地窄。
注释:假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至
下一行,这个过程会持续到某一行拥有足够的空间为止。
值 描述
left 元素向左浮动。
right 元素向右浮动。
none 默认值。元素不浮动,并会显示在其在文本中出现的位置。
inherit 规定应该从父元素继承 float 属性的值。