Web 基础之CSS (全文5w字,超级详细)

文章目录


这里是一段防爬虫文本,请读者忽略。
本文原创首发于CSDN,作者IDYS
博客首页:https://blog.csdn.net/weixin_41633902/
本文链接:https://blog.csdn.net/weixin_41633902/article/details/115503008
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!


CSS学习

00. 使用CSS样式的方式

0.0 HTML的局限性

  • HTML,只关注内容的语义,而不会去在意内容的样式

  • CSS是层级样式表(cascading style sheets)的简称

  • 有时我们也称之为css样式表或者级联表

  • CSS也是一种标记语言

  • CSS主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局和外观显示样式

  • CSS让我们的网页更加丰富多彩,布局更加灵活自如。简单理解:CSS可以美化HTML,让HTML更加漂亮,让页面布局更加简单

  • 总结:

    • HTML主要做结构、显示元素内容
    • CSS美化HTML,布局网页
    • CSS最大价值:由HTML专注做结构呈现,样式交给CSS,即结构(HTML)与样式(CSS)相分离

0.1 HTML <! DOCTYPE>声明标签

  • 定义和用法:<!DOCTYPE> 声明必须是 HTML文档的第一行,位于 <html> 标签之前。<!DOCTYPE>声明不是 HTML 标签;它是指示 web浏览器关于页面使用哪个 HTML 版本进行编写的指令。在 HTML 4.01 中,<!DOCTYPE>声明引用 DTD,因为 HTML 4.01 基于 SGMLDTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。HTML5 不基于 SGML,所以不需要引用 DTD

0.2 内链(行内)样式表(行内式)

  • 定义和用法
<body style="backgroud-color:green;margin:0 ;padding=0;">
</body>
  • style其实就是标签的属性
  • 在双引号中间,写法要符合CSS规范
  • 可以控制当前的标签设置样式
  • 由于书写繁琐,并且没有体现出结构与样式相分离的思想,所以不推荐大量使用,只要对当前元素添加简单样式的时候,可以考虑使用

0.3 嵌入式(内部)样式表(嵌入式)

  • 定义和用法
<style type="text/css"></style>
  1. <style>标签理论上可以放在HTML文档的任何地方,但是一般需要将样式放在<head></head>
  2. 通过此种方式,可以方便控制当前整个页面的元素样式设置
  3. 使用内部样式表设定CSS,通常也被成为嵌入式引入,这种方式是我们练习时常用的方式

0.4 引入式(外部)样式表(链接式)

  • 实际开发都是外部样式表,适合于样式比较多的情况,核心是:样式单独写到CSS文件中,之后把CSS文件引入到HTML页面中使用

  • 引入外部样式表分为两步:

    • 新建一个后缀名为.css的样式文件,把所有CSS代码都放入此文件中。
    • HTML页面中,使用<link>标签引入这个文件
  • 定义和用法

<link rel="StyleSheet" type="text/css" href="style.css">
  • 属性说明
属性作用
rel定义当前文档与被链接文档之间的关系,在这里需要指定为stylesheet,表示被链接的文档是一个样式表文件
herf定义所链接外部样式表文件的URL,可以是相对路径,也可以是绝对路径

0.5 CSS引入方式总结

样式表优点缺点使用情况控制范围
行内样式表书写方便,权重高结构样式混写较多控制一个标签
内部样式表部分结构和样式想分离没有彻底分离较多控制一个页面
外部样式表完全实现结构和样式相分离需要引入最多控制多个页面

0.6 CSS 语法规范

  • CSS规则由两个主要的部分构成:选择器以及一条或者多条声明。

  • 例如:

h1 {
    color:red;
    font-size:25px;
}
/*
其中 p 为选择器
color:red 为声明
color 为属性
red 为值 
*/
  • 选择器,是用于指定CSS样式的HTML标签,花括号内是对该对象设置的具体样式
  • 属性和属性值以键值对的形式出现
  • 属性是对指定的对象设置的样式属性,例如字体大小,文本颜色等
  • 属性和属性值之间用英文:分开
  • 多个键值对之间用英文;进行区分

0.7 CSS代码风格

  1. 展开格式:建议每一行一个声明,如:
p{
    color: red;
    font-size: 25px;
}
  1. 全部使用小写字母
  2. 属性值前面和冒号后面保留一个空格;选择器(标签)和大括号中间保留空格

01. 定义样式表

1.1 HTML标记定义

  • <p></p>

  • 定义<p>的样式

p{
属性1:属性值1;
属性2:属性值2
}

p可以叫做选择器,定义那个标记中的内容执行其中的样式,一个选择器可以控制若干个样式属性,他们之间需要用英语的“;”隔开,最后一个可以不应加”;“


1.2 Class 定义

  • 用法:
<p class="p">
</p>
  • class定义是以.开始
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>CSS learning</title>
	<style type="text/CSS">
		.p {
			color: green;
			font-size: 28px;
		}
		.p p{
			color: red;
			font-size: 40px;
		}
		.i {
			color: yellow;
			background-color: red
		}
	</style>
</head>
<body>
	<div class="p">
		hello world
		<p>my name is li hua</p>
		<i class="i">this is italics</i>
	</div>
</body>
</html>
  • 显示结果为

在这里插入图片描述


1.3 ID 选择器

  • ID定义
<p id="p">
</p>
  • ID定义是以#开始的
  • 用法
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>ID 选择器</title>
	<style type="text/css">
		#test {
			color:blue;
			font-size: 40px;
		}
		#test p{
			color: red;
			font-size: 30px;
		}
	</style>
</head>
<body>
	<div id="test">
		<p>测试段落</p>
		<u>测试下划线</u>
		<br>
		<i>测试斜体</i>
	</div>
</body>
</html>
  • 最终显示

在这里插入图片描述


1.4 优先级问题

  • ID选择器 > Class选择器 > HTML标记

  • 同级时选择离元素最近的一个

#p{ color:red}
#p{ color:#f60}
/*  执行颜色为 #f60 */

1.5 组合选择器(同时控制多个元素)

  • 用法
h1,h2,h3,.div,#eye{ font-size: 14px; color:red;}

选择器组合可以使用“.”隔开


1.6 伪元素选择器

  1. a:link正常连接的样式
  2. a:hover鼠标放上去的样式
  3. a:active选择链接时的样式
  4. a:visited已经访问的链接样式

02. 常见属性

2.1 颜色属性

  • color属性定义文本的颜色
color:green
color:##ff6600 
color:#f60 /* 简写式 */
  • rgb颜色表示:color:rgb(红(r),绿(g),蓝(b)),红®、绿(G)、蓝(B)每个的取值范围0~255,也可以0%~100%之间取值
红色
color:rgb(255,0,0)
绿色
color:rgb(0,255,0)
蓝色
color:rgb(0,0,255)
  • rgba颜色显示:R代表红色(Red)、Green(绿色)、Blue(蓝色)、和Alpha的色彩空间透明度
color:rgba(255,255,255,1) /* 透明度取值范围为 0到1 */
  • 演示:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>颜色属性</title>
	<style type="text/css">
		h1 {
			color: rgba(0,0,0,1);
		}
		h2 {
			color: rgba(0,0,0,0.75);
		}
		h3 {
			color: rgba(0,0,0,0.5);
		}
		h4 {
			color: rgba(0,0,0,0.25);
		}
		h5 {
			color: rgba(0,0,0,0.0);
		}
		
	</style>
</head>
<body>
	<h1>中文字体</h1>
	<h2>中文字体</h2>
	<h3>中文字体</h3>
	<h4>中文字体</h4>
	<h5>中文字体</h5>
</body>
</html>
  • 最终显示结果

在这里插入图片描述


03. 字体属性

3.1 font-size字体大小

  • px:设置一个固定的值,px(像素)大小是我们网页的最常用单位,谷歌浏览器默认文字大小为16px,不同浏览器可能默认显示的字号大小不一致,我们尽量给一个明确值大小,不要默认大小。使用通配符*去匹配修改字体大小,它对标题无效,标题标签字体大小需要
  • %:父元素的百分比
  • smaller:比父元素更小
  • larger:比父元素更大
  • inherit:继承父元素的

3.2 font-family定义字体类型

  • font-family:微软雅黑,serif
  • 可以使用,隔开,以确保当字体不存在的时候直接使用下一个
  • 例如:
p{
    font-family: 'Microsoft YaHei', Arial, Helvetica, sans-serif;
}
h1{
    font-family: '宋体';
}
  • 各种字体之间必须使用英文状态下的逗号隔开
  • 一般情况下,如果有空格隔开的多个单词组成的字体,加引号
  • 尽量使用系统默认自带字体,保证在任何用户的浏览器中都能正确显示
  • 最常见的几个字体:body

3.3 font-weight字体加粗

  • normal:默认值

  • bold:粗体

  • lighter:更粗

  • bolder:更细

  • 选项各有:100、200、300~900;normal=400bold=700,必使是整百数,注意后面不要带单位。正常字体相当于number值等于400


3.4 font-style字体样式

  • normal:正常
  • italic:斜体
  • oblique:倾斜
  • inherit:继承

注意:平时我们很少给文字加斜体,反而要给斜体标签(em, i)改为不倾斜字体


3.5 font-variant小型大写字母显示文本

  • normal:标准
  • small-caps:小型大写字母显示文本
  • inherit:继承

3.6 font字体复合属性

  • 字体属性可以把以上文字样式综合来写,这样可以更节约代码
body{
font: font-style font-weight font-size/line-weight font-family;
}

使用font属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开

不需要设置的属性可以省略(取默认值),但必须保留font-sizefont-family属性,否则font属性将不起作用


3.7 字体属性总结

属性表示注意点
font-size字号我们通常使用的单位为px像素,一定要跟上单位
font-family字体实际工作按照团队约定来写字体
font-weight字体粗细记住加粗是700或者bold不加粗是normal或者400,记住数字不要带单位
font-style字体样式记住倾斜是italic,不倾斜是normal,工作中我们最常用的是normal
font字体连写字体连写是有顺序的,不能随意换位置;其中字号和字体必须同时出现

04. 背景属性

4.1 background-color 背景颜色


4.2 backgroud-img 背景图片

  • backgroud-imgage:url(图片路径)
  • backgroud-images:none

4.3 `background-repeat 背景重复

  • repeat:重复平铺满
  • repeat-x:向X轴重复
  • repeat-y:向Y轴重复
  • no-repeat:不重复

4.4 background-position 背景位置

  • 横向(left、center、right)
  • 纵向(top、center、bottom)

background-position:(x)(y)

  • 基本演示
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>颜色属性</title>
	<style type="text/css">
		/*body{
			background-image: url(./img/01.jpg);
			background-repeat: no-repeat;
			background-position: 100px 300px;
		}*/
		div{
			height: 900px;
			width: 900px;
			background: red url(./img/01.jpg) no-repeat 100px 100px;
		}
	</style>
</head>
<body>
	<div>
		
	</div>
</body>
</html>
  • 呈现结果

在这里插入图片描述


05. 文本属性

5.1 text-align 横向排列

  • left:居左
  • center:居中
  • right:居右

5.2 line-height 文本行高

  1. %基于字体大小百分比设置行高
  2. 数值设置固定值行高

5.3 text-indent 首行缩进

  • %父元素的百分比
  • px固定值,默认0
  • inherit继承
  • em是一个相对单位,就是当前元素(font-size)1个文字的大小,如果当前元素没有设置大小,则会按照父元素的1个文字大小
  • text-indent属性用来指定文本的第一行的缩进,通常是将段落的首行缩进

5.4 letter-spacing 字符间距

  • normal:默认
  • length设置具体的数值(可以设置负值)
  • inherit继承

5.5 word-spacing 单词间距

  • normal:默认
  • px设置固定值
  • inherit继承

5.6 direction 文字方向

  • ltr从左到右,默认值
  • rtl:从右到左
  • inherit:继承

5.7 text-transform 文本大小写

  • none:默认
  • capitalize:每个单词首字母大写开头
  • uppercase:定义仅有大写字母
  • lowercase:定义无大写字母,仅有小写字母
  • inherit:规定应该从父元素继承text-transform属性的值

5.8 text-decoration 装饰文本

  • text-decoration属性规定添加到文本的装饰,可以给文本添加下划线、删除线、上划线等,例如
div{
    text-decoration: none;
}
  • 属性值
属性值描述
none默认。没有装饰线(最常用)
underline下划线。链接a自带下划线(常用)
overline上划线。(几乎不用)
line-through删除线。(不常用)

06. 边框属性

6.1 边框风格border-style

  • border-style:统一风格(简写风格)
  • 边框风格样式的属性值
    • none:无边框
    • solid:直线边框
    • dashed:虚线边框
    • dotted:点状边框
    • double:双线边框
    • groove:凸槽边框
    • ridge:垄状边框
    • insetinset边框
    • outsetouset边框
    • inherit:继承

6.2 边框宽度border-width

  • border-width:统一风格
  • border-top-width:上边边框宽度
  • border-bottom-width:下边边框宽度
  • border-left-width:左边边框宽度
  • border-right-width:右边边框宽度

  • 边框属性值
    • thin:细边框
    • medium:中等边框
    • thick:粗边框
    • px:固定值的边框
    • inherit:继承

  • 边框颜色border-color

    • border-color:统一风格
  • border-top-color:上边边框颜色

  • border-bottom-color:下边边框颜色

  • border-left-color:左边边框颜色

  • border-right-color:右边边框颜色

  • 属性值

    • RGBrgb(255,255,255)
    • RGBArgba(255,255,255,1)
    • 颜色名:red
    • 十六位进制:#ff0#ff0000
    • inherit:继承
  • 简写方式

    • bordersolid2px#f60

07. 列表属性

7.1 list-style-type:标记的类型

  • none:无标记
  • disc:默认。标记是实心圆
  • circle:标记是空心圆
  • square:标记是实心方块
  • decimal:标记是数字
  • decimal-leading-zero0开头的数字标记(01,02,03等。)
  • lower-roman:小写罗马数字
  • upper-roman:大写罗马数字
  • lower-alpha:小写英文字母
  • upper-alpha:大写英文字母
  • lower-greek:小写拉丁字母
  • lower-latin:小写拉丁字母
  • upper-latin:大写拉丁字母
  • hebrew:传统的希伯来编号方式
  • georgian:传统的乔治亚编码方式
  • armenian:传统的亚美尼亚编号方式
  • cjk-ideographic:简单的表意数字

7.2 list-style-position 标记的位置

  • inside:列表项目标记放置在文本以内,且环绕文本根据标记对齐
  • outside:默认值。保持标记位于文本的左侧。列表项目标记放置在文本以外,且环绕文本不根据标记对齐
  • inherit:规定应该从父元素继承list-style-position属性的值

7.3 list-style-image 设置图像列表标记

  • list-style-image

    • URL:图像路径
    • none:默认。无图形被显示
    • inherit:规定应该从父元素继承list-style-image属性的值

7.4 简写方式

  • list-style:square inside url('/i/arrow.jpg');

08. CSS选择器

8.1 选择器分类

选择器可以分为两大类,分别为:

  1. 基础选择器
  2. 符合选择器
  • 基础选择器是由单个选择器组成的
  • 基础选择器又包括:标签选择器类选择器id选择器通配符选择器

8.2 标签选择器

  • 标签选择器(元素选择器)是指用HTML标签名称作为选择器,按标签名称分类,为页面某一类标签指定统一的CSS样式

  • 作用

    • 标签选择器可以把某一类标签全部选择出来,比如所有的<div>标签和所有的<span>标签
  • 优点

    • 能快速为页面中同类型的标签设置统一样式
  • 缺点

    • 不能设计差异化样式,只能选择全部的当前标签

8.3 类选择器

  • 如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用类选择器
  • 类选择器在HTML中以CSS属性表示,在CSS中,类选择器以一个点.号显示

  • 注意:
  1. 类选择器使用.(英文点号)进行标识,后面紧跟类名(自定义,我们自己命名的)
  2. 可以理解为给这个标签起了一个名字,来表示
  3. 长名称或词组可以使用中横线来为选择器命令
  4. 不要使用纯数字或者中文命名,尽量使用英文字母来表示
  5. 命名要有意义,尽量使别人一眼就知道这个类名的目的

8.4 类选择器-多类名

  • 我们可以给一个标签指定多个类名,从而达到更多的选择目的。这些类名都可以选出这个标签
  • 简单理解就是一个标签有多个名字

  1. 多类名使用方式
<div class="red font35">idys</div>
  • 在标签class属性中写多个类名
  • 多个类名中间必须用空格分开
  • 这些标签可以分别具有这些类名的样式

  1. 多类名开发中使用场景
  • 可以把一些标签元素相同的样式(共同的部分)放到一个类里面
  • 这些标签都可以调用这个公共的类,然后调用自己独有的类

8.5 id选择器

  • id选择器可以为标有特定idHTML元素指定特定的样式
  • HTML元素以id属性来设置id选择器,CSSid选择器以#来定义

  • 语法:
#id-name{
    属性1: 属性值1
}
  • 例如:
#nav{
    color: red;
}

注意:id属性只能在每个HTML文档中出现一次,口诀:样式#定义,结构id调用,只能调用一次,别人切勿使用


  • id选择器和类选择器的区别
  1. 类选择器(class)好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用
  2. id选择器好比人的身份证号码,全中国是唯一的,不得重复

8.6 通配符选择器

css中,通配符选择器使用*定义,它表示选取页面中所有元素(标签)

  • 语法
* {
    属性1: 属性值1;
}

通配符选择器不需要调用,自动就给所有的元素使用样式


8.7 基础选择器总结

基础选择器作用特点使用情况
标签选择器可以选出所有相同的标签,比如p不能差异化选择较多
类选择器可以选出一个或多个标签可以根据需求选择非常多
id选择器一次只能选择1个标签ID属性只能在每个HTML文档中出现一次一般情况和js搭配
通配符选择器选择所有标签选择的太多,有部分不需要特殊情况使用

09. Chrome 调试工具

  1. Ctrl+滚轮可以放大开发者工具代码大小
  2. 左边是HTML元素结构,右边是CSS样式
  3. 右边CSS样式可以改动数值(左右箭头或者直接输入)和查看颜色
  4. Ctrl+0复原浏览器
  5. 如果点击元素,发现右侧没有样式引入,及有可能是类名或者样式引入错误
  6. 如果有样式,但是样式前面有黄色叹号提示,则是样式属性书写错误

10. Emmet语法

10.1 前述

Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速度,VS code内部已经集成该语法


10.2 快速生成HTML结构语法

  1. 生成标签直接输入标签名,按tab键即可,比如:div然后tab键,就可以生成<div></div>
  2. 如果想要生成多个相同标签,加上*就可以了,比如:div*3就可以快速生成3个div标签
  3. 如果有父子级关系标签,就可以用>,比如ul>li就可以了
  4. 如果有兄弟关系的标签,用+就可以了,比如div+p
  5. 如果生成带有类名或者id名字的,直接写.demo或者#two然后tab键就可以了
  6. 如果生成的div类名是有顺序的,可以用自增符号$
  7. 如果想要在生成的标签内部写内容可以用{}表示

生成基本的html文档可以使用html:5然后安装tab键或者输入!然后安装tab

.demo后按住tab键,会生成div标签class书写为demo

  • 当你输入.demo$*5会出现如下
<div class="demo1"></div>
<div class="demo2"></div>
<div class="demo3"></div>
<div class="demo4"></div>
<div class="demo5"></div>
  • 输入div{你是gay}*5会出现如下内容
<div>你是gay</div>
<div>你是gay</div>
<div>你是gay</div>
<div>你是gay</div>
<div>你是gay</div>
  • 输入p.demo${我是基佬}*10,会出现如下内容
<p class="demo1">我是基佬</p>
<p class="demo2">我是基佬</p>
<p class="demo3">我是基佬</p>
<p class="demo4">我是基佬</p>
<p class="demo5">我是基佬</p>
<p class="demo6">我是基佬</p>
<p class="demo7">我是基佬</p>
<p class="demo8">我是基佬</p>
<p class="demo9">我是基佬</p>
<p class="demo10">我是基佬</p>

10.3 CSS快速生成语法

  • 输入w200,按住tab键会出现
width: 200px;
  • 输入ti200会出现
text-indent: 200px;

10.4 快速格式化代码

  • VS Code快速格式化代码:shift+alt+f

  • 也可以设置当我们保存页面的时候自动格式化代码

  1. 【文件】->【首选项】->【设置】
  2. 搜索emmet.include
  3. settings.json下【用户】中添加如下语句
"editor.formatOnType": true,
"editor.formatOnSave": true

只需要设置一次即可,以后都可以自动保存格式化代码


  • 新版本直接搜索在设置项搜索format,然后勾选对应的保存时格式化即可

在这里插入图片描述


11. CSS 复合选择器

11.1 什么是复合选择器

CSS中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基础选择器进行组合形成的

  • 复合选择器可以更准确、更高效的选择目标元素(标签)

  • 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的

  • 常用的复合选择器包括:

    • 后代选择器
    • 子选择器
    • 并集选择器
    • 伪类选择器

11.2 后代选择器(重要)

  • 后代选择器又称之为包括选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代
元素1 元素2 { 样式声明 }

上述语法表示选择元素1里面的所有元素2(后代元素)

  • 例如
ul li { 样式声明 }
/*
选择ul 里面所有的li标签元素
*/
  • 元素1和元素2中间用空格隔开

  • 元素1是父级,元素2是子级,最终选择的是元素2

  • 元素可以是儿子,也可以是孙子等,只要是元素1的后代即可

  • 元素1和元素2可以是任意基础选择器


11.3 子选择器(重要)

子元素选择器(子选择器)只能作为某元素的最近一级子元素,简单理解就是选亲儿子元素

  • 语法:
元素1>元素2 {样式声明}
  • 元素1和元素2中间用大于号隔开
  • 元素1是父级,元素2是子级,最终选择的是元素2
  • 元素2必须是亲儿子,其孙子、重孙子之类的都不归他管,你也可以叫他亲儿子选择器

11.4 并级选择器(重要)

  • 并级选择器可以选择多组标签,同时为它们定义相同的样式。通常用于集体声明
  • 并集选择器是各选择器通过英文逗号,连接而成,任何形式的选择器都可以作为并集选择器的一部分
  • 语法:
元素1,元素2 {样式声明}

上述语法表示选择元素1和元素2

  • 例如:
ul,div {样式声明}
  • 元素1和元素2中间用逗号隔开

约定的语法规范,我们并集选择器喜欢竖着写。一定要注意,最后一个选择器不需要加逗号

元素1和元素2中间用逗号隔开

逗号可以理解为和的意思

并集选择器通常用于集体声明


11.5 伪类选择器

  • 伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加效果,或选择第1个,第n个元素

  • 伪类选择器书写最大的特点是用冒号:表示,比如:hover:first-child

  • 伪类选择器很多,比如有链接伪类、结构伪类等,所以这里先给大家讲解常用的链接伪类选择器


11.5 链接伪类选择器

  • a:link:选择所有未被访问的链接
  • a:visited:选择所有已经被访问的链接
  • a:hover:选择鼠标指针位于其上的链接
  • a:active:选择活动链接(鼠标按下未弹起的链接)
  1. 链接伪类选择器注意事项
  • 为了确保生效,请按照LVHA的顺序声明:link-visited-hover-active
  • 因为a链接在浏览器中具有默认样式,所有我们实际工作中都需要给链接单独指定样式

11.6 focus伪类选择器

:focus伪类选择器用于选取获得焦点的表单元素

焦点就是光标,一般情况<input>类表单元素才能获取,因此这个选择器也主要针对表单元素来说

input:focus {
background-color: orange;
color: white;
}

11.7 复合选择器总结

  • 表格如下
选择器作用特征使用情况隔开符号及用法
后代选择器用来选择后代元素可以是子孙后代较多符号是空格.nav a
子代选择器选择最近一级元素只选亲儿子较少符号是大于.nav>p
并集选择器选择某些相同样式的元素可以用于集体声明较多符号是逗号.nav,.header
链接伪类选择器选择不同状态的链接跟链接相关较多重点记住a{}a:hover
:focus选择器选择获得光标的表单跟表单有关较少input:focus记住这个写法

12. CSS的元素显示模式

12.1 前述

了解元素的显示模式可以更好的让我们布局页面

  1. 什么是元素的显示模式
  2. 元素显示模式的分类
  3. 元素显示模式的转换

12.2 什么是元素显示模式

  • 作用:网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页

元素显示模式就是元素(标签)以什么方式进行显示,比如:div自己占一行,比如一行可以放多个span

HTML元素一般分为块元素和行内元素两种类型


12.3 块元素

常见的块级别元素有

  • <h1>~<h6>
  • <p>
  • <div>
  • <ul>
  • <ol>
  • <li>

其中,<div>就是典型的块级元素

块级元素特点

  1. 独占一行
  2. 高度、宽度、外边距以及内边距都可以控制
  3. 宽度默认是容器(父级宽度)的100%
  4. 是一个容器及盒子,里面可以放行内或者块级别元素

注意:

  • 文字类的元素内不能使用块级元素
  • <p>标签主要用于存放文字,因此<p>里面不能放块级元素,特别是不能放<div>
  • 同理,<h1>~<h6>等都是文字类块级标签,里面也不能放其他块级元素

12.4 行内元素

常见的行内元素有<a><strong><b><em><i><del><s><ins><u><span>等,其中<span>标签是最典型的行内元素。有的地方也将行内元素称之为内联元素

行内元素特点

  • 相邻行内元素在一行上,一行可以显示多个
  • 高、宽直接设置是无效的
  • 默认宽度就是它本身内容的宽度
  • 行内元素只能容纳文本或其他行内元素

注意

  • 链接里面不能再放链接
  • 特殊情况下链接<a>里面可以放块级元素,但是给<a>转换一下块级模式最安全

12.5 行内块元素

在行内元素中有几个特殊的标签—— <img><input><td>,它们同时具有块级元素和行内元素的特点,有些资料称它们为行内块元素

行内块元素的特点

  1. 和相邻行内元素(行内块)在一行上,但是它们之间有空白缝隙。一行可以显示多个(行内元素特点)
  2. 默认宽度就是它本身内容的宽度(行内元素特点)
  3. 高度、行高、外边距以及内边距都可以控制(块级元素特点)

12.6 元素显示模式总结

元素模式元素排列设置样式默认宽度包含
块级元素一行只能放一个块级元素可以设置宽度和高度容器的100%容器级可以包含任何标签
行内元素一行可以放多个行内元素不可以直接设置宽度和高度它本身内容的宽度容纳文本或则其他行内元素
行内块元素一行放多个行内块元素可以设置宽度和高度它本身内容的宽度

12.7 元素显示模式转换

  • 特殊情况下,我们需要元素模式的转换,简单理解:一个模式的元素需要另外一个模式的特性
  • 比如想要增加链接<a>的触发范围
  • 转换为块元素:display:block
  • 转换为行内元素:dispaly:line
  • 转换为行内块元素:display:inline-block

12.8 单行文字垂直居中的代码

CSS没有给我们提供文字垂直居中的代码,这里我们可以使用一个小技巧来实现

解决方案:让文字的行高等于盒子的高度,就可以让文字在当前盒子内垂直居中

简单理解:行高的上空隙和下空隙把文字挤到中间了,如果行高小于盒子高度,文字会偏上,如果行高大于盒子高度,文字偏下


13. CSS的背景

通过CSS背景属性,可以给页面元素添加背景样式

背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等

13.1 背景图片

background-images属性描述了元素的背景图像。实际开发常见于logo或者一些装饰性的小图片或者是超大的背景图片,优点是非常便于控制位置(精灵图也是一种运用场景)

background-images: none | url (url)
  • 图表如下
参数值作用
none无背景图(默认的)
url使用绝对或者相对地址指定背景图像

13.2 背景平铺

  • 如果需要在html页面上对背景图片进行平铺、可以使用background-repeat属性
  • background-repeat属性值:
    • repeat:背景图像在纵向和横向上平铺(默认的)
    • no-repeat:背景图像不平铺
    • repeat-x:背景图像在横向上平铺
    • repeat-y:背景图像在纵向上平铺
  • 页面元素既可以添加背景图片又可以添加背景颜色,只不过背景图片的图层会在背景颜色图层上边

13.3 背景图片位置

利用background-position属性可以改变图片在背景中的位置

  • 例如
background-position: x y;

参数代表的意思是 x坐标和y坐标。可以使用方位名词或者精确单位

参数值说明
length百分数 | 由浮点数字和单位标识符组成的长度值
positiontop

  1. 参数是方位名词
  • 如果指定的两个值都是方位名词,则两个值前后顺序无关、比如:left toptop left效果一致
  • 如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐

  1. 参数是精确单位
  • 如果参数值是精确坐标,那么第一个肯定是x坐标,第二个一定是y坐标
  • 如果只指定一个数值,那该数值一定是x坐标,另一个默认垂直居中

  1. 参数是混合单位
  • 如果指定两个值是精确单位和方位名词混合使用,则第一个值是x坐标,第二个值是y坐标

13.4 背景图像固定(背景附着)

  • background-attachment属性设置背景图像是否固定或者随着页面的其余部分滚动
  • background-attachment后期可以制作视差滚动的效果

  • background-attachment:scroll | fixed

  • 表格示意

参数作用
scroll背景图像是随着对象内容滚动
fixed背景图像固定

13.5 背景复合写法

当使用简写属性时,没有特定的书写顺序,一般习惯约定顺序为

background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置

transparent属性用来指定全透明色彩


13.6 背景色半透明

CSS3为我们提供了背景颜色半透明的效果

background: rgba(0,0,0,0.3)
  • 最后一个参数是alpha透明度,取值范围在0~1之间
  • 我们习惯把0.30省略掉,写为background: rgba(0,0,0,.3)
  • 注意:背景半透明是指盒子背景半透明,盒子里面的内容不受影响
  • CSS3新增属性,是IE9+版本浏览器才支持的

13.7 背景总结

属性作用
background-color背景颜色预定义的颜色值/十六进制/RGB代码
background-image背景图片url(图片路径)
background-repeat是否平铺repeat/no-repeat/repeat-x/repeat-y
background-position背景位置length/position
background-attachment背景附着scroll(背景滚动)/fixed(背景固定)
背景简写书写更简单背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置
背景色半透明背景颜色半透明background: rgba(0,0,0,0.3);后面必须是4个值

背景图片:实际开发常见于logo或者一些装饰性的小图片或者是超大的背景图片,优点是非常便于控制位置。(精灵图也是一种运用场景)


14. CSS 的三大特性

css有三个非常重要的三个特性:层叠性、继承性、优先级

14.1 层叠性

相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突的问题

层叠性原则:

  • 样式冲突,遵循的原则是就近原则,那个样式离结构近,就执行那个样式
  • 样式不冲突,不会层叠

14.2 继承性

现实中的继承:我们继承了父亲的姓

CSS中的继承:子标签会继承父标签的某些样式,如文本颜色和字号。简单的理解就是子承父业

子元素可以继承父元素的样式(text-font-line-)这些元素开头的可以继承,以及color属性


行高的继承性

body {
font: 12px/1.5 Microsoft YaHei;
}
/*
1.5 代表 1.5 倍行高
*/
  • 行高可以跟单位也可以不跟单位
  • 如果子元素没有设置行高,则会继承父元素的行高1.5
  • 此时子元素的行高是:当前子元素的文字大小*1.5

14.3 优先级

当同一个元素指定多个选择器,就会有优先级的产生

  • 选择器相同,则执行层叠性
  • 选择器不同,则根据选择器权重执行

  • 选择器权重如下表所示
选择器选择器权重
继承或者*0,0,0,0
元素选择器0,0,0,1
类选择器,伪类选择器0,0,1,0
ID选择器0,1,0,0
行内样式style=""1,0,0,0
!important重要的无穷大
  • 基本演示
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>优先级演示</title>
    <style>
        #test {
            background-color: red;
        }

        .demo {
            background-color: purple;
        }

        div {
            height: 300px;
            width: 300px;
            background-color: black: !important;
            ;
        }
    </style>
</head>

<body>
    <div class="demo" id="test" style="background-color: orange;"></div>
</body>

</html>

优先级注意点

  1. 权重是有4组数字组成,但是不会有进位
  2. 可以理解为类选择器永远大于元素选择器,id选择器永远大于类选择器,以此类推
  3. 等级判断从左到右,如果某一位数值相同,则判断下一位数值
  4. 可以简单记忆法:通配符号和继承权重为0,标签选择器为1,类(伪类)选择器为10id选择器100,行内样式表为1000!important无穷大
  5. 继承的权重是0,如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是0

a链接浏览器默认制定了一个样式,蓝色。


权重叠加

权重叠加:如果是复合选择器,则会有权重叠加,需要计算权重

  • 例如
ul li {
    color: green;
    text-decoration: none;
}

li {
    color: blue;
    text-decoration: none;
}
.nav {
    color: yellow;
    text-decoration: none;
    list-style: none;

}
/*
ul li 的权重值为 0,0,0,1 + 0,0,0,1 = 0,0,0,2
li 的权重值为 0,0,0,1
.nav li 的权重值为 0,0,1,0 + 0,0,0,1 = 0,0,1,1
*/

权重可以叠加但是不会进位

计算下列选择器的权重

.nav ul li ---> 0,0,0,3

.nav ul l ---> 0,0,1,2

a:hover ---> 0,0,1,1

.nav a ---> 0,0,1,1


15 盒子模型

页面布局要学习三大核心,盒子模型,浮动和定位。学习好盒子模型能非常好的帮助我们布局页面

15.1 看透网页布局的本质

网页布局过程:

  1. 先准备好相关的网页元素,网页元素基本都是盒子Box
  2. 利用CSS设置好盒子样式,然后摆放到相应位置
  3. 往盒子里面装内容

网页布局的核心本质:利用CSS摆放盒子


15.2 盒子模型(Box Model)组成

所谓盒子模型:就是把HTML页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器

CSS盒子模型本质上是一个盒子,封装周围的HTML元素,它包括:边框、外边距、内边距、和实际内容

  • border
  • content内容
  • padding内边距
  • 外边距margin

在这里插入图片描述


15.3 边框(border)

border可以设置元素的边框,边框有三部分组成:边框宽度(粗细)、边框样式、边框颜色

  • 语法:
border: border-width || border-style || border-color
  • 图表
属性作用
border-width定义边框粗细,单位是px
border-style边框的样式
border-color边框颜色
  • border-style边框样式属性
属性值作用
none无边框
solid直线边框
dashed虚线边框
dotted点状边框
double双线边框
groove凸槽边框
ridge垄状边框
insetinset边框
outsetouset边框
inherit继承

CSS边框属性允许你指定一个元素边框的样式颜色

边框简写

border: 1px solid red; 没有顺序
  • 练习:给一个200*200的盒子,设置上边框为红色,其余边框为蓝色(提示:一定要注意边框的层叠性)

  • 作用答案

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>边框属性</title>
    <style>
        div {
            width: 200px;
            height: 200px;
            border: 5px solid blue;
            border-top: 5px solid red;
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>

15.4 表格的细线边框

border-collapse属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框

  • 语法
border-collapse: collapse;
  • collapse单词是合并的意思
  • border-collapse:collapse;表示相邻边框合并在一起

15.5 边框会影响盒子实际大小

边框会额外增加盒子的实际大小。因此我们有两种方案解决:

  1. 测量盒子大小的时候,不含边框
  2. 如果测试的时候包含边框,则需要width/height减去边框宽度

15.6 内边距(padding)

padding用于设置内边距,即边框与内容之间的距离

  • 图表如下:
属性作用
padding-left左内边距
padding-right右内边距
padding-top上内边距
padding-bottom下内边距

padding属性(简写属性)可以有一到四个值

值的个数表达含义
padding:5px1个值,代表上下左右都有5像素内边距
padding:5px 10px2个值,代表上下内边距5像素,左右内边距是10像素
padding:5px 10px 20px3个值,代表上内边距5像素,左右内边距10像素,下内边距20像素
padding:5px 10px 20px 30px4个值,代表上内边距5像素,右内边距10像素,下内边距20像素,左内边距30像素

当我们给盒子指定padding值之后,发生了2件事:

  1. 内容和边框有了距离,添加了内边距
  2. padding影响了盒子实际大小

也就是说,如果盒子已经有了宽度和高度,此时再指定内边框,会撑大盒子

解决方案

如果保证盒子跟效果图大小保持一致,则让width/height减去多出来的内边距大小即可


如果盒子本身没有指定width/height属性,则此时padding不会撑开盒子大小


15.7 外边距(margin)

margin属性用于设置外边距,即控制盒子和盒子之间的距离

属性作用
margin-left左外边距
margin-right右外边距
margin-top上外边距
margin-bottom下外边距

15.8 外边距典型应用

外边距可以让块级盒子水平居中,但是必须满足两个条件

  1. 盒子必须指定了宽度
  2. 盒子左右的外边距都设置为auto

常见的写法,以下三种都可以

  • margin-left:auto; margin-right:auto
  • margin: auto
  • margin: 0 auto

行内元素或者行内块元素水平居中,只需要给其父元素添加text-align: center即可


15.9 外边距合并

  • 使用margin定义块元素的垂直外边距时,可能会出现外边距的合并

相邻块元素垂直外边距的合并

当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的块元素有下边距margin-bottom,下面的元素有上边距margin-top,则它们之间的垂直间距不是margin-bottommargin-top之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并

解决方案:

尽量只给一个盒子添加margin


嵌套块元素垂直外边距的塌陷

对于两个嵌套关系(父子关系)的块元素,父元素有上边距同时子元素也有上边距,此时父元素会塌陷较大的外边距值

解决方案

  1. 可以为父元素定义上边框
  2. 可以为父元素定义内边框
  3. 可以为父元素添加overflow:hidden
  4. 父元素设置position: relative,子元素设置为position: absolute

还有其他方法,比如浮动、固定。绝对定位的盒子不会有塌陷问题。

transparent为透明色


15.10 清除内外边距

网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距

* {
padding: 0;
margin: 0;
}

注意:行内元素为了照顾兼容性,尽量只设置左右外边距,不要设置上下内外边距。但是转换为块级和行内块元素就可以。


15.11 PS基本操作

  • 文件-> 打开:可以打开我们要测量的图片
  • CTRL+R:可以打开标尺,或者视图->标尺
  • 右击标尺,把里面的单位改为像素
  • Ctrl+加号(+)可以放大视图,Ctrl+减号(-)可以缩小视图
  • 按住空格键,鼠标可以变成小手,拖动PS视图
  • 用选取拖动,可以测量大小
  • Ctrl+D可以取消选区,或者在旁边空白处点击一下也可以取消选区s

15.12 总结

  1. 布局为啥不用别的盒子,我只想用div

标签都是有语义的,合理的地方用合理的标签,比如产品标题就用h

  1. 为啥用这么多的类名

类名就是给每个盒子起了一个名字,可以更好的找到这个盒子,选取盒子更容易,后期维护也更方便


15.13 圆角边框

CSS3中,新增了圆角边框样式,这样我们的盒子就可以变圆角了。

border-radius属性用于设置元素的外边框圆角

语法:

border-radius: length;

radius半径(圆的半径)原理:(椭)圆与边框的交集形成圆角效果

radius半径(圆的半径)原理:(椭)圆与边框的交集形成圆角效果

border-radius后面也可以接百分数,如:50%含义为宽度和高度的一半

圆角矩形border-radius的设置:圆角矩形border-radius设置为高度的一半

该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角

分开写:border-top-left-radius、border-top-right-radius、border-bottom-left-radius、border-bottom-right-radius


15.14 盒子阴影

CSS3中新增了盒子阴影,我们可以使用box-shadow属性为盒子添加阴影

语法:

box-shadow: h-shadow v-shadow blur spread color inset;
  • 图表
h-shadown必需。水平阴影的位置。允许负值
v-shadow必须。垂直阴影的位置。允许负值
blur可以模糊距离
spread可选。阴影尺寸
color可选。阴影的颜色。请参阅CSS颜色值
inset可选。将外部阴影(outset)改为内部阴影

轻灰色:rgba(0,0,0,0.3)

默认的是外阴影(outset),但是不可以写这个单词,否则导致阴影无效

盒子阴影不占用空间,不会影响其他盒子排列

div:hoverspan:hover都代表鼠标经过该元素时,显现的效果


15.15 文字阴影

CSS3中,我们可以使用text-shadow属性将阴影应用与文本

语法:

text-shadow: h-shadow v-shadow blur color
  • 参考表格
描述
h-shadow必需,水平阴影的位置。允许负值
v-shadow必需,垂直阴影的位置,允许负值
blur可选。模糊的距离
color可选。阴影的颜色

16. CSS 浮动

16.1 传统网页布局的三种方式

网页布局的本质-用CSS来摆放盒子,把盒子摆放到相应位置

CSS提供了三种传统布局方式(简单点,就是盒子如何进行排列顺序)

  • 普通流(标准流)
  • 浮动
  • 定位

16.2 标准流(普通流、文档流)

  1. 块级元素会独占一行,从上到下顺序排列
  • 常见元素:div、hr、p、h1~h6、ul、ol、dl、form、table
  1. 行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行
  • 常见元素:spanaiem

以上都是标准布局,我们前面学习的就是标准流,标准流是最基本的布局方式


16.3 为什么需要浮动

提问:我们用标准流能很方便的实现如下效果吗?

  1. 如何让多个块级盒子(div)水平排列成一行
  • 利用浮动(float

总结:有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局,因为浮动可以改变元素便签默认的排列方式。

浮动最典型的应用:可以让多个块级元素一行内排列显示

网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动


16.4 什么是浮动?

float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘及包含块或另一个浮动框的边缘

语法

选择器 {float:属性值;}
属性值描述
none元素不浮动(默认方式
left元素向浮动
right元素向浮动

16.5 浮动特性(重难点)

加了浮动之后的元素,会具有很多特性,需要我们掌握的。

  1. 浮动元素会脱离标准流(脱标)
  2. 浮动的元素会一行内显示并且元素顶部对齐
  3. 浮动的元素会具有行内块元素的特性
  4. 脱离标准普通流的控制(浮)移动到指定位置(动),俗称脱标
  5. 浮动的盒子不再保留原先的位置
  6. 如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列
  7. 浮动元素会具有行内块元素特性:任何元素都可以浮动,不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性
  8. 任何元素都可以浮动,不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性
  9. 如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
  10. 浮动的盒子中间是没有缝隙的,是紧挨着一起的

注意:浮动的元素是相互靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐

任何元素都可以浮动,不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性

如果行内元素有了浮动,则不需要转换行内级/行内块元素就可以直接给高度和宽度


16.6 浮动元素经常和标准流父级搭配使用

为了约束元素位置,我们网页布局一般采取的策略是:

先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。复合网页布局第一准则


16.7 浮动布局注意点

  1. 浮动和标准流的父盒子搭配

先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置

  1. 一个元素浮动了,理论上其余的兄弟元素也要浮动

一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题

浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流


16.8 思考题

我们前面浮动元素都有一个标准流父元素,它们有一个共同的特点,都是有高度的。

但是,所以父盒子都必须给高度吗?

理想中的状态,让子盒子撑开父元素,有多少孩子,我父元素就有多高


16.9 清除浮动

  1. 为什么需要清除浮动?

由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占位置,最后父级高度为0,就会影响下面的标准流盒子

由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响

  1. 清除浮动的本质
  • 清除浮动的本质就是清除浮动元素造成的影响

  • 如果父盒子本身有高度,则不需要清除浮动

  • 清除浮动只会,父级别聚会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了

语法:

选择器 {clear:属性值}
属性值描述
left不允许左侧有浮动元素(清除左侧浮动的影响)
right不允许右侧有浮动元素(清除右侧浮动的影响)
both同时清除左右两侧浮动的影响

我们实际工作中,几乎只用clear:both

清除浮动的策略是:闭合浮动


16.10 清除浮动的方法

  1. 额外标签法,也称之为隔墙法,是W3C推荐的做法
  2. 父级添加overflow属性
  3. 父级添加after伪元素
  4. 父级添加双伪元素

16.11 额外标签法

额外标签法也称之为隔墙法,是W3C推荐的做法

额外标签法会在浮动元素末尾添加一个空的标签。例如<div style="clear:both"></div>,或者其他标签,如<br />

  • 优点:通俗易懂
  • 缺点:添加许多无意义的标签,结构较差

这个标签必须是块级元素,不能是行内元素


  • 总结
  1. 清除浮动的本质是?

清除浮动的本质是清除浮动元素脱离标准流造成的影响

  1. 清除浮动的策略是?

闭合浮动,只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子

  1. 什么是额外标签法

隔墙法,就是在最后一个浮动的子元素后面添加一个额外标签,添加清除浮动样式。实际工作可能会遇到,但是不常用


16.12 清除浮动 —— 父级添加 overflow

可以给父级添加overflow属性,将其属性值设置为hiddenauto或者scroll

  • 优点:代码简洁
  • 缺点:无法显示溢出的部分

16.13 清除浮动 —— :after 伪元素法

:after方式是额外标签法的升级版。也是给父元素添加

  • 演示:
.clearfix:after {                 
content: "." ;                    
display: block ;   
height: 0 ;   
clear: both ;   
visibility: hidden ;   
}
.clearfix {
    /*  IE6 IE7 专用*/
    *zoom: 1;
}
  • 优点:没有增加标签,结构更加简单
  • 缺点:照顾低版本浏览器
  • 代表网站:百度、淘宝、网易

16.14 清除浮动——双伪元素清除浮动

/*声明清除浮动的样式*/
.clearfix:before,.clearfix:after {
	content: "";
	display: table;
}
.clearfix:after {
    clear:both;
}
.clearfix {
   *zoom: 1;  /*ie6,7 专门清除浮动的样式*/
}
  • 优点:代码更加简洁
  • 缺点:照顾低版本浏览器
  • 代表网站:小米、腾讯

16.15 清除浮动总结
  • 为什么需要清除浮动?
  1. 父级没高度
  2. 子盒子浮动了
  3. 影响下面布局了,我们就应该清除浮动
  • 表格归纳:
清除浮动的方式优点缺点
额外标签法(隔墙法)通俗易懂,书写方便添加许多无意义的标签,结构化较差
父级overflow书写简单溢出隐藏
父级after伪元素结构语义化正确由于IE6-7不支持:after,兼容性问题
父级双伪元素结构语义化正确由于IE6-7不支持:after,兼容性问题

16.15 PS切图

16.15.1 常见的图片格式
  1. jpg图像格式:jpeg(jpg)对色彩的信息保留较好,高清,颜色较多,我们产品类的图片经常用jpg格式的
  2. gif图像格式:gif格式最多只能存储256色,所以通常用来显示简单图形及字体,但是可以保存透明背景和动画效果,实际经常用于一些图片小动画效果
  3. png图像格式是一种新兴的网络图形格式,结合了GIFjpeg的优点,具有存储形式丰富的特点,能够保持透明背景。如果想要切成背景透明的图片,请选择png格式
  4. PSD图像格式是photoshop的专用格式,里面可以存放图层、通道、遮罩等多种设计稿。对我们前端人员来说,最大的优点就是我们可以直接从上面复制文字,获得图片,还可以测量大小和距离

16.15.2 图层切图

最简单的切图方式:右击图层-> 快速导出为png

但是很多情况下,我们需要合并图层再导出

  1. 选中需要的图层:图层菜单->合并图层(Ctrl+e
  2. 右击->快速导出为PNG

16.15.3 切片切图
  1. 利用切片选择图片

利用切片工具手动划出

  1. 导出选择的图片

文件菜单->导出->存储为WEB设备所用格式->选择我们要的图片格式->存储


16.15.4 PS插件切图

cutterman是一款运行在photoshop中的插件,能够自动将你需要的图层进行输出,以替代传统的手工“导出web”所用格式以及使用切片工具挨个切图的繁琐流程


16.16 CSS 书写顺序(重要)

建议遵循以下顺序:

  1. 布局定位属性:display/position/float/clear/visibility/overflow(建议display第一个写,毕竟关系到模式)
  2. 自身属性:width/height/margin/padding/border/background
  3. 文本属性:color/font/text-decoration/text-align/vertical-align/white-space/break-word
  4. 其他属性CSS3content/cursor/border-radius/border-shadow/text-shadow/background:liner-gradient

17. 学成在线案例

17.1 准备素材和工具

  1. 学成在线PSD源文件
  2. 开发工具=PS(切图)/cutterman插件+vscode(代码)+chrome(测试)

17.2 案例准备工作

我们本次采取结构与样式相分离的思想

  1. 创建study目录文件夹(用于存放我们这个页面的相关内容)
  2. VSCODE打开这个目录文件夹
  3. study目录内新建images文件夹,用于保存图片
  4. 新建首页文件index.html(以后我们的网站首页统一规定为index.html
  5. 新建style.css样式文件,我们本次采用外链样式表
  6. 将样式引入到我们的HTML页面中
  7. 样式表写入清除内外边距的样式,来检测样式表是否引入成功

17.3 页面布局整体思路

为了提高网页制作的效率,布局时通常有以下的整体思路:

  1. 必须确定页面的版心(可视区),我们测量可得知
  2. 分析页面中的行模块,以及每个行模块中的列模块。
  3. 一行中的列模块经常浮动布局,先确定每个列的大小,之后确定列的位置,页面布局第二准则
  4. 制作HTML结构。我们遵循,先有结构,后有样式的原则,结构永远最重要
  5. 先理清布局结构,再写代码尤为重要。这需要我们多写多积累

导航栏注意点:

实际开发中,我们不会直接用链接a而是li包含(li+a)的做法

  1. li+a语义更加清晰,一看这就是有条理的列表型内容
  2. 如果直接用a,搜索引擎容易辨别为有堆砌关键字嫌疑(故意堆砌关键字容易被搜索引擎降权),从而影响网站权重

注意:

  1. 让导航栏一行显示,给li加浮动,因为li是块级元素,需要一行显示
  2. 这个nav导航栏可以不给宽度,将来可以继续添加其余文件、
  3. 因为导航栏里面文字不一样多,所以最好给链接a左右padding撑开盒子,而不是指定宽度

行内块元素之间是有缝隙的


18. CSS定位

18.1 定位

18.1.1 为什么需要定位
  1. 浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子
  2. 定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子

18.1.2 定位组成

定位:将盒子定在某一个位置,所以定位也是在排放盒子,按照定位的方式移动盒子

定位=定位模式+边偏移

定位模式用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置

  1. 定位模式

定位模式决定元素的定位方式,它通过CSSposition属性来设置,其值可以分为四个

语义
static静态定位
relative相对定位
absolute绝对定位
fixed固定定位
  1. 边偏移

边偏移就是定位的盒子移动到最终位置,有topbottomleftright4个属性

边偏移属性描述
top顶部偏移量,定义元素相对于其父元素上边线的距离
bottom底部偏移量,定义元素相对于其父元素下边线的距离
left左部偏移量,定义元素相对于其父元素左边线的距离
right右部偏移量,定义元素相对于其父元素右边线的距离

18.1.3 静态定位static(了解)

静态定位是元素的默认定位方式,无定位的意思

语法:

选择器 {position: static}
  • 静态定位按照标准流特性摆放位置,它没有边偏移

  • 静态定位在布局时很少用到


18.1.4 相对定位 relative (重要)

相对定位是元素在移动位置的时候,是相对于它原来的位置来说的(自恋型)

语法:

选择器 { position:relative; }

相对定位的特点:务必记住

  1. 它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)
  2. 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它(不脱标,继续保留原来位置)

因此,相对定位并没有脱标,它最典型的应用是给绝对定位当爹的


18.1.5 绝对定位 absolute(重要)

绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)

语法:

选择器 {position: absolute}

绝对定位的特点:(务必记住)

  1. 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位
  2. 如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为参照点移动位置
  3. 绝对定位不再占用原先的位置(脱标)

18.1.6 子绝父相的由来

弄清除这个口诀,就明白了绝对定位和相对定位的使用场景

这个子绝父相太重要了,是我们学习定位的口诀,是定位中最常用的一种方式,这句话的意思是:子级是绝对定位的话,父级要用相对定位

  1. 子级绝对定位,不会占用位置,可以放到父盒子里面任何一个地方,不会影响其他的兄弟盒子
  2. 父盒子需要加定位限制子盒子在父盒子内显示
  3. 父盒子布局时,需要占有位置,因此父亲只能是相对定位

这就是子绝父相的由来,所以相对定位经常用来作为绝对定位的父级

总结:因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位


18.1.7 固定定位 fixed (重要)

固定定位是元素固定与浏览器可视区的位置。主要使用场景:可以在浏览器滚动时元素的位置不会改变。

语法:

选择器 {position: fixed}

固定定位的特点:(务必记住)

  1. 以浏览器的可视窗口为参照点移动元素
  2. 跟父元素没有任何关系
  3. 不随滚动条滚动
  4. 固定定位不在占有原先的位置
  5. 固定定位也是脱标,其实固定定位也可以看做是一种特殊的绝对定位

固定定位小技巧:固定在版心右侧位置

小算法:

  1. 让固定定位的盒子left:50%,走到浏览器可视区(也可以看做版心)的一半位置
  2. 让固定定位的盒子margin-left:版心宽度的一半距离。多走版心宽度的一半位置

就可以让固定定位的盒子贴着版心右侧对齐了


18.1.8 粘性定位(了解)

粘性定位可以被认为是相对定位与固定定位的混合,sticky粘性的

语法:

选择器 { position: sticky; top: 10px }

粘性定位的特点:

  1. 以浏览器的可视窗口为参照点移动元素(固定定位特点)
  2. 粘性定位占有原先的位置(相对定位特点)
  3. 必须添加topleftrightbottom其中一个才有效

跟页面滚动搭配。兼容性较差,IE不支持


18.1.19 定位总结
定位模式是否脱标移动位置
static不能使用边偏移
relative相对定位否(占有位置)相对于自身移动位置
absolute绝对定位是(不占有位置)带有定位的父级
fixed固定定位是(不占有位置)浏览器可视区
sticky否(占有位置)浏览器可视区

18.1.10 定位叠放次序 z-index

在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序(z轴)

语法:

选择器 {z-index: 1}

数值可以是正整数、负整数或0,默认是auto,数值越大,盒子越靠上

如果属性值相同,则按照书写顺序,后来居上

数字后面不能加单位

只有定位的盒子才有z-index属性


18.1.11 定位的扩展

绝对定位的盒子不能通过margin:0 auto水平居中,但是可以通过以下计算方法实现水平和垂直居中

  1. left:50%:让盒子的左侧移动到父级元素的水平中心位置
  2. margin-left:-100px:让盒子向左移动自身宽度的一半。

18.1.12 定位的特殊特性

绝对定位和固定定位也和浮动类似

  1. 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
  2. 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小

浮动元素、绝对定位(固定定位)元素都不会触发外边距合并的问题


18.1.13 绝对定位(固定定位)会完全压住盒子

浮动元素不同,之后压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字(图片)

但是绝对定位(固定定位)会压住下面标准流所有的内容

浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的。文字会围绕浮动元素


18.2 综合案例总结

  • 加了绝对定位的盒子可以直接设置高度和宽度
  • 一个盒子如果既有left属性也有right属性,则默认会执行left属性,同理topbottom同时存在会执行top属性(先上后下,先左后右)

通过盒子模型,清除知道大部分html标签是一个盒子

通过CSS浮动、定位可以让每个盒子排列成为网页

一个完整的网页,是标准流、浮动、定位一起完成布局的,每个都有自己的专门用法

  1. 标准流

可以让盒子上下排列或者左右排列,垂直的块级盒子显示就用标准流布局

  1. 浮动

可以让多个块级元素一行显示或者左右对齐盒子,多个块级盒子水平显示就用浮动布局

  1. 定位

定位最大的特点是有层叠的概念,就是可以让多个盒子前后叠压来显示。如果元素自由在某个盒子内移动就用定位布局


18.3 元素的显示与隐藏

类似网站广告,当我们点击关闭就不见了,但是当我们重新刷新页面,会重新出现

本质:让一个元素在页面中隐藏或者显示出来

  1. display显示隐藏
  2. visibility显示隐藏
  3. overflow溢出显示隐藏

18.3.1 display属性

display属性用于设置一个元素应如何显示

  • display:none隐藏对象
  • display:block除了转换为块级元素之外,同时还有显示元素的意思

display隐藏元素后,不再占有原来的位置

后面应用及其广泛,搭配JS可以做很多网页特效


18.3.2 visibility 可见性

visibility属性用于指定一个元素应是可见还是隐藏

  • visibility:visible元素可视
  • visibility:hidden元素隐藏

visibility隐藏元素后,继续占有原来的位置

如果隐藏元素想要原来位置,就用visibility:hidden

如果隐藏元素不想要原来位置,就用display:none(用处更多 重点)


18.3.3 overflow 溢出

overflow属性指定了如果内容溢出一个元素的框(超过其指定高度及其宽度)时,会发生什么

  • overflow:scroll溢出的部分显示滚动条,不溢出也显示滚动条
  • overflow:auto溢出的部分显示滚动条,不溢出不显示滚动条
属性值描述
visible不剪切内容也不添加滚动条
hidden不显示超过对象尺寸的内容,超出的部分隐藏掉
scroll不管超出内容与否,总是显示滚动条
auto超出自动显示滚动条,不超出不显示滚动条

一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局

但是如果有定位的盒子,请慎用overflow:hidden,因为它会隐藏多余的部分


  1. display显示隐藏元素,但是不保留位置
  2. visibility显示隐藏元素,保留原来的位置
  3. overflow溢出显示隐藏,但是只是对于溢出的部分处理

19. CSS 高级技巧

19.1 精灵图

19.1.1 为什么需要精灵图

一个网页中往往会应用很多小的背景图作为修饰,当网页中的图像过多时,服务器就会频繁地接受和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度

因此,为了有效地减少服务器接受和发送请求的次数,提高页面的加载速度,出现了CSS精灵技术(也称CSS SpritesCSS雪碧)

核心原理:将网页中的一些小背景图像整合到一张大图中,这样服务器只需要一次请求就可以了


19.1.2 精灵图(sprites)的使用

使用精灵图核心

  1. 精灵技术主要针对于背景图片使用,就是把多个小背景图片整合到一张大图片中。
  2. 这个大图片也成为sprites精灵图或者雪碧图
  3. 移动背景图片位置,此时可以使用background-position
  4. 移动的距离就是这个目标图片xy坐标。
  5. 因为一般情况下都是往上往左移动,所以数值是负值

19.1.3 字体图标的产生

字体图标使用场景:主要用于显示网页中通用、常用的一些小图标

精灵图是有诸多优点的,但是缺点明显

  1. 图片文件还是比较大的
  2. 图片本身放大和缩小会失真
  3. 一旦图片制作完毕想要更换非常复杂

此时,有一种技术的出现很好的解决了以上问题,就是字体图标iconfont

字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质属于字体。


19.1.4 字体图标的优点

轻量级:一个图标字体要比一系列的图像要小。一旦字体加载了,图标就会马上渲染出来,减少服务器请求

灵活性:本质其实是文字,可以很随意的改变颜色、产生阴影、透明效果、旋转等

兼容性:几乎支持所有的浏览器,请放心使用

总结:

  1. 如果遇到一些结构和样式比较简单的小图标,就用字体图标
  2. 如果遇到一些结构和样式复杂一点的小图片,就用精灵图

字体图标是一些网页常见的小图标,我们直接网上下载即可。因此使用可以分为

  1. 字体图标下载
  2. 字体图标引入(引入到我们HTML页面中)
  3. 字体图标的追加(以后添加新的小图标)

推荐下载网站

  • icmoon字库http://icomoon.io
  • 阿里iconfont字库http://www.iconfont.cn/
19.2.3 字体文件格式

不同浏览器所支持的字体格式是不一样的,字体图标之所以兼容,就是因为包含了主流浏览器支持的字体文件。

  1. TureType(.ttf)格式,.ttf字体是WindowsMac的最常见的字体,支持这种字体的浏览器有IE9+Firefox3.5+Chrome4+Safari3+Opera10+iOS MobileSafari4.2+
  2. Web Open Font Format(.woff)格式woff字体,支持这种字体的浏览器有IE9+Firefox3.5+Chrome6+Safari3.6+Opera11.1+
  3. Embedded Open Type(.eot)格式.eot字体是IE专用字体,支持这种字体的浏览器有IE4+
  4. SVG(.SVG)格式.svg字体是基于SVG字体渲染的一种格式,支持这种字体的浏览器有Chrome4+Safari3.1+Opera10.0+iOS Mobile Safari3.2+;

19.2.4 字体图标的引入
  1. CSS样式中全局声明字体,简单理解把这些字体通过CSS引入到我们页面中

一定注意字体文件路径的问题


19.2.5字体图标的追加

如果工作中,原来的字体图标不够用了,我们需要添加新的字体图标到原来的字体文件中。

把压缩包里面的selection.json重新上传,然后选中自己想要的新图标,重新下载压缩包,并且替换原来的文件即可


19.3 CSS三角

网页中常见一些三角形,使用CSS直接画出来就可以,不必做成图片或者字体图标

一张图,你就知道CSS三角是怎么来的了,做法如下:

  • 当代码如下时呈现如下图形
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 0;
            height: 0;
            border-top: 100px solid red;
            border-left: 100px solid green;
            border-right: 100px solid yellow;
            border-bottom: 100px solid blue;
        }
    </style>
</head>

<body>
    <div></div>
</body>

</html>
  • 图示如下

在这里插入图片描述

所以当你需要呈现三角形时,只需要让一边有颜色其他三边透明即可

  • 代码如下:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS三角图标</title>
    <style>
        div {
            width: 0;
            height: 0;
            line-height: 0;
            font-size: 0;
            border: 200px solid transparent;
            border-top-color: skyblue;
        }
    </style>
</head>

<body>
    <div>

    </div>
</body>

</html>
  • 此时呈现三角形

在这里插入图片描述


19.4 CSS用户界面样式

19.4.1 鼠标样式cursor
li {cursor: pointer;}

设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状

属性值描述
default小白 默认
pointer小手
move移动
text文本
not-allowed禁止

19.4.2 轮廓线 outline

给表单添加outline:0;或者outline:none;样式之后,就可以去掉默认的蓝色边框。

input { outline:none; }

19.4.3 防止拖拽文本域 resize

实际开发中,我们文本域右下角是不可以拖拽的

textarea {
    resize: none
}

19.5 vertical-align 属性应用

CSSvertical-align属性使用场景:经常用于设置图片或者表单(行内块元素)和文字垂直对齐

官方解释:用于设置一个元素的垂直对齐方式,但是它只针对于行内元素或者行内块元素有效

语法:

vertical-align: baseline | top | middle | bottom
描述
baseline默认。元素放置在父元素的基线上
top把元素的顶端与行中最高元素的顶端对齐
middle把此元素放置在父元素的中部
bottom把元素的顶端与行中最低元素的底端对齐

图片、表单都属于行内块元素,默认的vertical-align是基线对齐

默认文字与图片是基线对齐

此时可以给图片、表单这些行内块元素的vertical-align属性设置为middle就可以让文字和图片垂直居中对齐了


19.5.1 解决图片底部默认空白缝隙问题
  • bug:图片侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐

主要解决方法有两种:

  1. 给图片添加vertical-align:middle | top | bottom(提倡使用的)

  2. 把图片转换为块级元素display:block

只有行内元素和行内块元素才有vertical属性


19.6 溢出的文字省略号显示

  1. 单行文本溢出显示省略号
  2. 多行文本溢出显示省略号

  • 单行文本溢出显示省略号–必须满足三个条件
  1. 先强制一行内显示文本white-sapce:nowrap;(默认normal自动换行)

  2. 超出的部分隐藏overflow:hidden;

  3. 文字用省略号替代超出的部分text-overflow:ellipsis;

white-space:normal如果文字显示不开自动换行


  • 多行文本溢出显示省略号

多行文本溢出显示省略号,有较大兼容性问题,适合于webKit

浏览器或移动端(移动端大部分是webKit内核)

overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box; /* 弹性伸缩盒子模型显示 */
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;

更推荐让后台人员来做这个效果,因为后台人员可以设置显示多少个字,操作更为简单


19.7 常见布局技巧

巧妙利用一个技术更快更好的布局

  1. margin负值的运用
  2. 文字围绕浮动元素
  3. 行内块的巧妙运用
  4. css三角强化

19.7.1 margin负值的运用
  1. 让每个盒子margin往左侧移动-1px正好压住相邻盒子边框
  2. 鼠标经过某个盒子的时候,提高当前盒子的层级即可(如果没有定位,则加相对定位(保留位置),如果有定位,则加z-index

  • 情况一:其他无定位
ul li {
    float: left;
    margin-left: -1px;
    list-style: none;
    width: 200px;
    height: 350px;
    border: 1px solid orange;
}

ul li:hover {
    position: relative;
    border: 1px solid red;
}
  • 情况二:其他有定位加z-index
ul li {
position: relative;
float: left;
margin-left: -1px;
list-style: none;
width: 200px;
height: 350px;
border: 1px solid orange;
}

ul li:hover {
z-index: 1;
border: 1px solid red;
}

19.7.2 CSS三角强化

代码:

.box {
    height: 0;
    width: 0;
    border-color: transparent blue transparent transparent;
    border-style: solid;
    border-width: 100px 50px 0 0;
}

此时会得到一个直角三角形


19.7.3 练习:价格栏制作
  • 代码如下
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>价格秒杀</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 250px;
            height: 45px;
            border: 2px solid red;
            margin: 40px auto;
        }

        .current-price {
            display: inline-block;
            position: relative;
            width: 150px;
            background-color: red;
            font-size: 18px;
            color: white;
            text-align: center;
            line-height: 45px;
            font-weight: 700;
        }

        .current-price i {
            position: absolute;
            top: 0;
            right: 0;
            width: 0;
            height: 0;
            border-color: transparent white transparent transparent;
            border-width: 45px 10px 0 0;
            border-style: solid;
        }

        .box span {
            width: 100px;
            color: grey;
            font-size: 14px;
            text-decoration: line-through;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="current-price">¥1678
            <i></i>
        </div>
        <span>¥1920</span>
    </div>
</body>

</html>
  • 效果图

在这里插入图片描述


19.8 CSS初始化

不同浏览器对有些便签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容,我们需要对CSS初始化

简单理解:CSS初始化是指重设浏览器的样式(也称为CSS reset

每个网页都必须首先进行CSS初始化。

这里我们以京东css初始化代码为例

  • Unicode编码字体

把中文字体的名称用相应的Unicode编码来代替,这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题

比如:

\9ED1\4F53:黑衣

5B8B\4F53:宋体

\5FAE\8F6F\96C5\9ED1:微软雅黑

  • 初始化代码
/* 把我们所有标签的内外边距清零 */
* {
    margin: 0;
    padding: 0
}
/* em 和 i 斜体的文字不倾斜 */
em,
i {
    font-style: normal
}
/* 去掉li 的小圆点 */
li {
    list-style: none
}

img {
    /* border 0 照顾低版本浏览器 如果 图片外面包含了链接会有边框的问题 */
    border: 0;
    /* 取消图片底侧有空白缝隙的问题 */
    vertical-align: middle
}

button {
    /* 当我们鼠标经过button 按钮的时候,鼠标变成小手 */
    cursor: pointer
}

a {
    color: #666;
    text-decoration: none
}

a:hover {
    color: #c81623
}

button,
input {
    /* "\5B8B\4F53" 就是宋体的意思 这样浏览器兼容性比较好 */
    font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif
}

body {
    /* CSS3 抗锯齿形 让文字显示的更加清晰 */
    -webkit-font-smoothing: antialiased;
    background-color: #fff;
    font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif;
    color: #666
}

.hide,
.none {
    display: none
}
/* 清除浮动 */
.clearfix:after {
    visibility: hidden;
    clear: both;
    display: block;
    content: ".";
    height: 0
}

.clearfix {
    *zoom: 1
}

20.HTML5 和CSS3提高

20.1 HTML5 新特性

HTML5的新增特效主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等

这些新特性都有兼容性问题,基本是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性

声明:

  1. 新特性增加了很多,但是我们专注于开发常用的新特性

20.1.1 HTML5 新增的语义化标签

以前布局,我们基本用div来做,div对于搜索引擎来说,是没有语义的

<div class="header"></div>
<div class="nav"></div>
<div class="content"></div>
<div class="footer"></div>

  • <header>:头部标签
  • nav:导航标签
  • <article>:内容标签
  • <selection>:定义文档某个区域
  • <aside>:侧边栏标签
  • footer:尾部便签

注意:

  • 这种语义化标准主要是针对搜索引擎的
  • 这些新标签页面中可以使用多次
  • IE9中,需要把这些元素转换为块级元素
  • 其实,我们移动端更喜欢使用这些标签
  • HTML5还增加了很多其他标签

20.1.2 HTML5 新增的多媒体标签

新增的多媒体标签主要包含两个:

  1. 音频:<audio>
  2. 视频:<video>

使用它们可以很方便的在页面中嵌入音频和视频,而不再去使用flash和其他浏览器插件

  1. 视频<video>

当前<video>元素支持三种视频格式,尽量使用mp4格式

浏览器MP4WebMOgg
Internet explorerYESNONO
ChromeYESYESYES
FirefoxYES
从Firefox21版本开始,Linux系统从Firefox30开始
YESYES
SafariYESNONO
OperaYES,从Opera25版本开始YESYES

语法:

<video src="文件地址" controls="controls"></video>

写法二:

<video width="320" height="240" controls>
    <source src="movie.mp4" type="video/mp4">
    <source src="movie.ogg" type="video/ogg">
    您的浏览器不支持 video 标签。
</video>
  • <video>常见属性
属性描述
autoplayautoplay如果出现该属性,则视频在就绪后自动播放(谷歌浏览器需要添加muted来解决自动播放问题)。
controlscontrols如果出现该属性,则向用户显示播放控件,比如播放按钮。
heightpixels(像素)设置视频播放器的高度。
widthpixels(像素)设置视频播放器的宽度。
looploop如果出现该属性,则当媒介文件完成播放后再次开始播放。
mutedmuted如果出现该属性,视频的音频输出为静音。
posterURL加载等待的画面图片
preloadauto(预先加载视频)metadata(当页面加载后仅加载音频/视频的元数据。)none(不预先加载视频)如果出现该属性,则视频在页面加载时进行加载,并预备播放。如果使用 “autoplay”,则忽略该属性。
srcURL要播放的视频的 URL。

HTML5 在不使用插件的情况下,也可以原生的支持音频格式文件的播放,当然,支持的格式是有限的。

  1. 音频<audio>

当前<audio>元素支持三种音频格式

浏览器MP3WavOgg
Internet Explorer 9+YESNONO
Chrome 6+YESYESYES
Firefox 3.6+YESYESYES
Safari 5+YESYESNO
Opera 10+YESYESYES

语法:

<audio src="文件地址" controls="controls"></audio>

其他写法

<audio controls>
  <source src="horse.ogg" type="audio/ogg">
  <source src="horse.mp3" type="audio/mpeg">
  您的浏览器不支持 audio 元素。
</audio>

常见属性

属性描述
autoplayautoplay如果出现该属性,则音频在就绪后马上播放
controlscontrols如果出现该属性,则向用户显示控件,比如播放按钮
looploop如果出现该属性,则每当音频结束时重新开始播放
srcurl要播放的音频的url
  • 谷歌浏览器把音频和视频自动播放禁止了

总结·:

  • 音频标签和视频标签使用方式基本一致
  • 浏览器支持情况不同
  • 谷歌浏览器把音频和视频自动播放禁用了
  • 我们可以给视频标签添加muted属性来静音播放视频,音频不可以(可以通过JavaScript解决)
  • 视频标签是重点,我们经常设置自动播放,不使用controls控件,循环和设置大小属性

20.1.3 HTML5 新增的input类型
  • 属性值
属性值说明
type="email"限制用户输入必须为Email类型
type=url限制用户输入必须为URL类型
type="date"限制用户输入必须为日期类型
type="time"限制用户输入必须为时间类型
type=month限制用户输入必须为月类型
type="week"限制用户输入必须为周类型
type="number"限制用户输入必须为数字类型
type="tel"手机号码
type="search"搜索框
type="color"生成一个颜色选择表单

20.1.4 HTML5 新增的表单属性
属性说明
requiredrequired表单拥有该属性表示其内容不能为空,必填
placeholder提示文本表单的提示信息
autofocusautofocus自动聚焦属性,页面加载完成自动聚集到指定表单
autocompleteoff/on当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。默认已经打开,如autocomplete="on",关闭autocomplete="off"需要放在表单内,同时加上name属性,同时成功提交
multiplemultiple可以多选文件提交

可以痛过以下设置方式修改placeholder里面的字体颜色:

input::placeholder {
    color:pink
}

20.2 CSS3 新特性

20.2.1 CSS3 的现状
  • 新增的CSS3特性有兼容性问题,IE9+才支持
  • 移动端支持优于PC
  • 不断改进中
  • 应用相对广泛
  • 现阶段主要学习:新增选择器和盒子模型以及其他特性

20.2.1.1 CSS3 新增选择器

CSS3给我们新增了选择器,可以更加便捷,更加自由的选择目标元素

  1. 属性选择器
  2. 结构伪类选择器
  3. 伪元素选择器

20.2.2 属性选择器

属性选择器可以根据特性属性来选择元素。这样就可以不用借助于类或者是id选择器

选择符简介
E[att]选择具有att属性的E元素
E[att="val"]选择具有att属性且属性值等于valE元素
E[att^="val"]选择具有att属性且属性值以val开头的E元素
E[att$="val"]选择具有att属性且属性值以val结尾的E元素
E[att*="val"]选择具有att属性且属性值含有valE元素

类选择器、属性选择器、伪类选择器、权重为10


20.2.3 结构伪类选择器

结构伪类选择器主要根据文档结构来选择元素,常用于根据父级选择器里面的子元素

选择符简介
E:first-child匹配父元素中第一个子元素E
E:last-child匹配父元素中最后一个子元素E
E:nth-child(n)选择父元素的第n个子元素,n1开始计算
E:first-of-type选择父元素下同种标签的第一个元素,相当于E:nth-of-type(1)
E:last-of-type选择父元素下同种标签的倒数第一个元素,相当于E:nth-last-of-type(1)
E:nth-of-type(n):nth-child(n)作用类似,用作选择使用同种标签的第n个元素

nth-child(n)选择某个父元素的一个或多个特定的子元素

  • n可以是数字,关键字和公式
  • 如果n是数字,就是选择第n个子元素,里面数字从1开始
  • n可以是关键字:even偶数,odd奇数
  • n可以是公式:常见的公式如下(如果n是公式,则从0开始计算,但是第0个元素或者超出了元素的个数会被省略)
公式取值
2n偶数
2n+1奇数
5n5、10、15
n+5从第5个开始(包含第五个)
-n+5前5个(包含第5个)

nth-child会把所有的盒子都排列序号

执行的时候首先看nth-child()之后回去再看前面的元素

nth-of-type会把指定元素的盒子排列序号

执行的时候首先看指定的元素,之后再看nth-of-type是第几个孩子

区别:

  1. nth-child对父元素里面所有孩子排序选择(序号是固定的)先找到第n个孩子,然后看看是否和E匹配
  2. nth-of-type对父元素里面指定子元素进行排序选择。先去匹配E,然后再根据E找到第n个孩子

小结
  • 结构伪类选择器一般用于选择父级里面的第几个孩子
  • nth-child对父元素里面所有孩子排序选择(序号是固定的)先找到第n个孩子,然后看看是否和E匹配
  • nth-of-type对父元素里面指定子元素进行排序选择,先去匹配E,然后再根据E找第n个孩子
  • 关于nth-child(n)我们要知道是从0开始计算的,要记住常用的公式
  • 如果是无序列表,我们肯定用nth-child更多
  • 类选择器、属性选择器、伪类选择器,权重为10

20.2.4 伪元素选择器(重点)
选择符简介
::before在元素内部的前面插入内容
::after在元素内部的后面插入内容

注意:

  • beforeafter创建一个元素,但是属于行内元素
  • 新创建的这个元素在文档树中是找不到的,所以我们称为伪元素
  • 语法:element::before{}
  • beforeafter必须有content属性,后面的内容使用单引号括起来
  • before在父元素内容的前面创建元素,after在父元素内容的后面插入元素
  • 伪元素选择器和标签选择器一样,权重为1

伪元素选择器使用场景1:伪元素字体图标
@font-face {
    font-family: 'icomoon';
    src: url('fonts/icomoon.eot?7y92vs');
    src: url('fonts/icomoon.eot?7y92vs#iefix') format('embedded-opentype'),
    url('fonts/icomoon.ttf?7y92vs') format('truetype'),
    url('fonts/icomoon.woff?7y92vs') format('woff'),
    url('fonts/icomoon.svg?7y92vs#icomoon') format('svg');
    font-weight: normal;
    font-style: normal;
    font-display: block;
}

.box {
    position: relative;
    width: 300px;
    height: 100px;
    border: 2px solid tomato;
}

.box::before {
    position: absolute;
    bottom: 10px;
    right: 10px;
    font-family: 'icomoon';
    color: tomato;
    content: "\e900";
    font-size: 30px;
}

伪元素选择器使用场景:伪元素清除浮动

后面两种伪元素清除浮动算是第一种额外标签法的一个升级和优化

.clearfix:after {
    content: "", /* 伪元素必须写的属性*/
    display: block; /*插入的元素必须是快级*/
    height: 0; /*不要看见这个元素*/
    clear:both; /*核心代码清除浮动*/
    visibility:hidden; /*不要看见这个元素*/
}

后面两种伪元素清除浮动算是第一种额外便签法的升级和优化

.clearfix:before,.clearfix:after{
    content:"";
    display:table; /* 转换为块级元素并且一行显示*/
}
.clearfix:after {
    clear:both;
}

20.2.5 CSSS3 盒子模型

CSS3中可以通过box-sizing来指定盒模型,有2个值:即可指定为content-boxborder-box,这样我们计算盒子大小的方式就发生了改变

可以分为两种情况

  1. box-sizingconten-box盒子大小为width+padding+border(以前默认的)
  2. box-sizing:border-box盒子大小为width

如果盒子模型我们改为了box-sizing:border-box,那paddingborder就不会撑大盒子了(前提paddingborder不会超过width宽度)


20.2.6 CSS3 其他特性(了解)
  1. 图片变模糊
  2. 计算盒子宽度width:calc函数
20.2.6.1 CSS3 滤镜filter

filter CSS属性将模糊或颜色偏移等图形效果应用于元素

filter:函数()

例如:filter:blur(5px);blur模糊处理 数值越大越模糊


20.2.6.2 CSS3 calc 函数

calc()CSS函数让你在声明CSS属性值时执行一些计算

width:calc(100%-80%)

括号里面可以使用+ - * /来计算


20.2.6.3 CSS3过渡(重点)

过渡(transition)是CSS3中具有颠覆性的特征之一,我们可以在不使用Flash动画或JavaScript的情况下,当元素从一种样式变换为另外一种样式时为元素添加效果。

过渡动画:是从一个状态渐渐的过渡到另外一个状态

可以让我们页面更加好看,更加动感十足,虽然低版本浏览器不支持(ie9)以下版本,但是不会影响页面布局

我们现在经常和:hover一起搭配使用


transition: 要过渡的属性 花费的时间 运动曲线 何时开始;
  1. 属性:想要变化的CSS属性,宽度、高度、背景颜色、内外边距都可以,如果想要所有的属性都变化过渡,写一个all就可以了
  2. 花费时间:单位是秒(必须写单位)比如0.5s
  3. 运动曲线:默认是ease(可以省略)
  4. 何时开始:单位是秒(必须写单位)可以设置延迟触发时间,默认0s(可以省略)

谁做过渡给谁加


20.3 广义的HTML5

  1. 广义的HTML5HTML5本身+CSS3+JavaScript
  2. 这个集合有时候称为HTML5和朋友,通常缩写为html5
  3. 虽然HTML5的一些特性仍然不被某些浏览器支持,但是它是一种发展趋势

写在最后的话:

  • 无论每个知识点的难易程度如何,我都会尽力将它描绘得足够细致
  • 欢迎关注我的CSDN博客,IDYS’BLOG
  • 持续更新内容
    linux基础 | 数据通信(路由交换,WLAN) | Python全栈 | 云计算
  • 如果你有什么疑问,或者是难题。欢迎评论或者私信我。你若留言,我必回复!
  • 虽然我现在还很渺小,但我会做好每一篇内容。谢谢关注!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值