权威CSS学习笔记!

文章目录

CSS学习

1、CSS简介

1.1、关于CSS

  • CSS指层叠样式表(Cascading Style Sheets)
  • 样式定义如何显示HTML元素
  • 样式通常存储在样式表中
  • 把样式添加到HTML 4.0中,是为了解决内容与表现分离的问题
  • 外部样式表可以极大提高工作效率
  • 外部样式表通 常存储在CSS文件中
  • 多个样式定义可层叠为一个

1.2、HTML的局限性

说起HTML,这其实是个非常单纯的家伙,他只关注内容的语义。比如<h1>表明这是一个大标题,<p>
明这是一个段落, <img>表明这儿有一个图片,<a>表示此处有链接。

很早的时候,世界上的网站虽然很多,但是他们都有一个共同的特点就是丑!虽然HTML可以做简单的样式,但是带来的是无尽的臃肿和繁琐!所以CSS改变了这种现状,给现代化网页带来了丰富的体验。

1.3、CSS-网页的美容师

CSS指层叠样式表(Cascading Style Sheets)的简称,有时我们也会称之为CSS样式表级联样式表。CSS也是一种标记语言!

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

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

CSS最大的价值:由HTML专注去做结构呈现,样式交给CSS,即结构(HTML)与样式(CSS)相分离。

1.4、CSS语法规范

使用HTML时,需要遵从一定的规范,CSS也是如此。要想熟练地使用CSS对网页进行修饰,首先需要了解
CSS样式规则。

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

在这里插入图片描述

<style>
    /* 选择器 { 样式 } */
    p {
     
     
        color: red;
        font-size: 20px;
    }
</style>
  • 选择器是用于指定CSS样式的HTML标签,花括号内是对该对象设置的具体样式
  • 属性和属性值以键值对的形式出现
  • 属性是对指定的对象设置的样式属性 ,例如字体大小、文本颜色等
  • 属性和属性值之间用英文:分开

1.5、CSS代码风格

以下代码书写风格不是强制规范,而是符合实际开发书写方式。

1、样式格式书写

/* ① 紧凑格式 */
h3 {
    
     color: red;font-size: 20px;}
/* ② 展开格式 */
h3 {
    
    
    color: red;
    font-size: 20px
}

2、样式大小写风格

/* 小写 */
h3 {
    
    
    color: pink;
}
/* 大写 */
H3 {
    
    
    COLOR: PINK;
}

强烈推荐样式选择器,属性名,属性值关键字全部使用小写字母,特殊情况除外!

3、样式空格风格

p {
    
    
    color: red;
}

①属性值前面,冒号后面,保留一个空格

②选择器(标签)和大括号中间保留空格

2、CSS的基础选择器

2.1、CSS选择器的作用

选择器(选择符)就是根据不同需求把不同的标签选出来这就是选择器的作用。简单来说 ,就是选择标签用的

h1 {
    
    
    color: red;
    font-size: 25px;
}

以上CSS做了两件事:

  • 找到所有的h1标签。选择器(选对人)
  • 设置这些标签的样式,比如颜色为红色,字体大小为25px。

2.2、CSS选择器的分类

选择器分为基础选择器复合选择器两个大类,我们这里先讲解一下基础选择器。

  • 基础选择器是由单个选择器组成的。
  • 基础选择器又包括:标签选择器、类选择器、id 选择器和通配符选择器

2.3、标签选择器

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

语法:

/* 批量选中 */
HTML标签名 {
    
    
    属性1: 属性值1;
    属性2: 属性值2;
    ...
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>css练习</title>
    <style>
        /* 为所有p标签设置字体颜色和大小 */
        p {
     
     
            color: red;
            font-size: 50px;
        }
    </style>
</head>
<body>
    <p>welcome</p>
    <p>to</p>
    <p>the</p>
    <p>world</p>
    <p>of</p>
    <p>Java</p>
</body>
</html>

作用:

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

优点:

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

2.4、类选择器

如果想要差异化选择不同的标签,单独选一个或者几个标签,可以使用类选择器

语法:

.类名 {
    
    
    属性1: 属性值1;
    属性2: 属性值2;
    ...
}

例如:将所有class="comment"的HTML元素设置为红色。

.comment {
    
    
    color: red;
}

结构需要用clas属性来调用 class类 的意思。

<style>
    p {
     
     
        color: black;
        font-size: 50px;
    }
    .red {
     
     
        color: red;
    }
</style>

<body>
    <p class="red">welcome</p>
    <p class="red">to</p>
    <p>the</p>
    <p>world</p>
    <p>of</p>
    <p>Java</p>
</body>

说明:

  • 不能使用标签的名字为类命名!例如.p、.div等都是不允许的。
  • 如果想要差异化选择不同的标签,单独选一个或者几个标签,可以使用类选择器。
  • 类选择器在HTML中以class属性表示,在CSS中,类选择器以一个点.号显示。

注意
①类选择器使用 “.” ( 英文点号)进行标识,后面紧跟类名(自定义,我们自己命名的)。
②可以理解为给这个标签起了一个名字,来示。
③长名称或词组可以使用中横线来为选择器命名。
④不要使用纯数字、中文等命名,尽量使用英文字母来表示。

网页命名规范:

/*
1.网页公共命名
#wrapper 页面外围控制整体布局宽度

#container或#content 容器,用于最外层

#layout 布局

#head, #header 页头部分

#foot, #footer 页脚部分

#nav 主导航

#subnav 二级导航

#menu 菜单

#submenu 子菜单

#sideBar 侧栏

#sidebar_a, #sidebar_b 左边栏或右边栏

#main 页面主体

#tag 标签

#msg #message 提示信息

#tips 小技巧

#vote 投票

#friendlink 友情连接

#title 标题

#summary 摘要

#loginbar 登录条

#searchInput 搜索输入框

#hot 热门热点

#search 搜索

#search_output 搜索输出和搜索结果相似

#searchBar 搜索条

#search_results 搜索结果

#copyright 版权信息

#branding 商标

#logo 网站LOGO标志

#siteinfo 网站信息

#siteinfoLegal 法律声明

#siteinfoCredits 信誉

#joinus 加入我们

#partner 合作伙伴

#service 服务

#regsiter 注册

#arrow 箭头

#guild 指南

#sitemap 网站地图

#list 列表

#homepage 首页

#subpage 二级页面子页面

#tool, #toolbar 工具条

#drop 下拉

#dorpmenu 下拉菜单

#status 状态

#scroll 滚动

.tab 标签页

.left .right .center 居左、中、右

.news 新闻

.download 下载

.banner 广告条(顶部广告条)

2.电商网站相关
.products 产品

.products_prices 产品价格

.products_description 产品描述

.products_review 产品评论

.editor_review 编辑评论

.news_release 最新产品

.publisher 生产商

.screenshot 缩略图

.faqs 常见问题

.keyword 关键词

.blog 博客

.forum 论坛

3.CSS文件命名 说明
master.css,style.css 主要的

module.css 模块

base.css 基本共用

layout.css 布局,版面

themes.css 主题

columns.css 专栏

font.css 文字、字体

forms.css 表单

mend.css 补丁

print.css 打印
*/

2.5、类选择器-多类名

我们可以给一个标签指定多 个类名,从而达到更多的选择目的。这些类名都可以选出这个标签。

简单理解就是一个标签有多个名字:

<!-- 类名之间使用空格隔开 -->
<button class="submit login"></button>

(1) 在标签class属性中写多个类名
(2) 多个类名中间必须用空格分开

案例:多类名的使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .set_color {
     
     
            color: red;
        }
        .set_font_size {
     
     
            font-size: 20px;
        }
    </style>
</head>
<body>
    <!--这个标签就可以分别具有这些类名的样式-->
    <div class="set_color set_font_size">Java</div>
</body>
</html>

多类名的使用场景:

(1) 可以把一些标签元素相同的样式(共同的部分)放到一个类里面。

(2) 这些标签都可以调用这个公共的类然后再调用自己独有的类。

(3) 从而节省CSS代码,统一修改也非常方便。

2.6、id选择器

id选择器可以为标有特定id的HTML元素指定特定的样式。

HTML元素以id属性来设置id选择器, CSS中id选择器以#来定义。

语法:

#id名 {
    
    
    属性1: 属性值2;
    属性2: 属性值2;
    ...
}

例如:将id为nav元素中的内容设置为红色。

#nav {
    
    
    color: red;
}

id选择器和类选择器的区别

① 类选择器 (class) 好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用。

② id选择器好比人的身份证号码,全中国是唯一的,不得重复。

③ id选择器和类选择器最大的不同在于使用次数上。

④ 类选择器在修改样式中用的最多,id选择器一般用于页面唯一性的元素上,经常和JavaScript 搭配使用。

2.7、通配符选择器

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

语法:

* {
    
    
    属性1: 属性值1;
    属性2: 属性值2;
    ...
}

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

特殊情况才使用,后面讲解使用场景(以下是清除所有的元素标签内外边距)

* {
    
    
    margin: 0;
    padding: 0;
}

2.8、4种基础选择器总结

在这里插入图片描述

3、CSS字体属性

CSS Fonts (字体)属性用于定义**字体系列、**大小、粗细、和文字样式(如斜体)。

3.1、字体系列

CSS使用font-family属性定义文本的字体系列。

p {
    
    
    font-family: "微软雅黑"; /* 我们可以设置一系列的字体 */
}
div {
    
    
    font-family: Arial,"Microsoft YaHei","微软雅黑";
}

各种字体之间必须使用英文状态下的逗号隔开!

一般情况下,如果有空格隔开的多个单词组成的字体,加英文引号。

尽量使用系统默认自带字体,保证在任何用户的浏览器中都能正确显示。

最常见的几个字体:

/* 字体属性的设置通常在body标签里 */
body {
    
    
    font-family: "Microsoft YaHei",tahoma,arial,"Hiragino Sans GB";
}

3.2、字号大小

CSS使用font-size属性定义字体大小。

p {
    
    
    font-size: 20px; /* px(像素)大小是我们网页的最常用的单位 */
}

谷歌浏览器默认的文字大小为16px

不同浏览器可能默认显示的字号大小不一致,我们尽量给一个明确值大小,不要默认大小。

可以个body指定整个页面文字的大小

body {
    
    
    font-size: 16px;
}
/* 标题标签比较特殊,需要单独指定文字大小 */
h1 {
    
    
   font-size: 16px; 
}

3.3、字体粗细

CSS使用 font-weight属性设置文本字体的粗细。

语法:

font-weight: normal | bold | bolder | lighter | number
/*
参数:
normal:是默认的,正常的字体。相当于number为400。声明此值将取消之前任何设置
bold:粗体。相当于number为700。也相当于b对象的作用。
等等,可自行查询
通常我们使用时,指定number的值比较多。
*/
<style>
    body {
     
     
        font-size: 16px;
        font-family: "微软雅黑";
    }
    h2 {
     
     
        font-size: 16px;
    }
    #test {
     
     
        font-weight: 600; /* 等于400的时候,就可以改变标题标签加粗效果 */
    }
</style>
<body>
    <h2>你好</h2>
    <p id="test">你好</p>
    <p>你好</p>
</body>

3.4、文本样式

CSS使用font-style属性设置文本的风格。

p {
    
    
    font-style: normal | italic;
}
/*
font-style: normal; 让倾斜标签取消倾斜
*/
属性值 作用
normal 默认值,浏览器会显示标准的字体样式 font-style: normal;
italic 浏览器会显示斜体的字体样式。

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

3.5、字体复合属性

字体属性可以把以上文字样式综合来写,这样可以更节约代码。

语法:

body {
    
    
    font: font-style font-weight font-size/line-height font-family;
}

案例使用复合属性实现:想要div文字变倾斜、加粗、字号设置为16像素,并且是微软雅黑

<div>三生三世十里桃花,一心一意白行代码</div>
/* 想要div文字变倾斜、加粗、字号设置为16像素,并且是微软雅黑 */
div {
    
    
    font: italic 700 16px "Microsoft YaHei";
}

注意:

  • 使用font属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性件以空格隔开。
  • 不需要设置的属性可以省略(去默认值),但必须保留font-sizefont-family属性,否则font属性将不起作用

3.6、字体属性总结

在这里插入图片描述

4、CSS文本属性

CSS Text(文本)属性可定义文本的外观,比如文本的颜色、对齐方式、装饰文本、文本缩进、行间距等。

4.1、文本颜色

color属性用于定义文本的颜色。

div {
    
    
    color: red;
}
颜色表示 属性值
预定义的颜色值 red,green,blue等
十六进制 #FF0000,#FF6600,#29D794等
RGB代码 rgb(255,0,0)或rgb(100%,0%,0%)

RGB ==> Red Green Blue

开发中最常用的十六进制

4.2、对齐文本

text-align属性用于设置元素内文本内容的水平对齐方式。

语法:

div {
    
    
    text-align: center; /* 水平居中 */
}

可设置属性值:

属性值 解释
left 左对齐(默认值)
right 右对齐
center 居中对齐
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
     
     
            height: 200px;
            width: 200px;
            text-align: center;
            background-color: pink;
        }
    </style>
</head>
<body>
    <div>
        hello world
    </div>
</body>
</html>

注意:想要图片居中对齐,则是让它的父亲标签添加水平居中的代码。

例如:

<style>
    .pic {
     
     
        text-align: center;
    }
</style>

<p class="pic">
	<img src="images/pic.jpeg" alt="">
</p>

4.3、装饰文本

text-decoration属性规定添加到文本的修饰。可以给文本添加下划线、删除线、上划线等。

div {
    
    
    text-decoration: underline;
}

可选属性值:

属性值 描述
none 默认。没有装饰线(最常用)
underline 下划线。链接 a 自带下划线(常用)
overline 上划线。(几乎不用)
line-through 删除线。(不常用)

案例实现:去掉a链接标签自带的下划线。

a {
    
    
    text-decoration: none;
}

重点记住如何添加下划线!如何删除下划线!其余的了解即可。

4.4、文本缩进

text-indent属性用来指定文本的第一行的缩进,通常是将段落的首行缩进

div {
    
    
    text-indent: 10px; /* 首行缩进多少距离 */
}

通过设置该属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值。但是使用像素指定缩进距离,是不规范的!所有我们有了新的单位,来完善像素的局限!

p {
    
    
    text-indent: 2em; /* 如果此时写了2em 则是缩进当前元素2个文字大小的距离 */
}

em 是一个相对单位,就是当前元素(font-size)1个文字的大小,如果当前元素没有设置大小,则会按照父元素的1个文字大小。

4.5、行间距

line-height属性用于设置行间的距离(行高)。可以控制文字行与行之间的距离。

p {
    
    
    line-height: 26px;
}

在这里插入图片描述

4.6、文本属性总结

在这里插入图片描述

5、CSS的三种引入方式

5.1、CSS的三种样式表

按照CSS样式书写的位置(或者引入的方式),CSS样式表可以分为三大类:

1、行内样式表(行内式)

2、内部样式表(嵌入式)

3、外部样式表(链接式)

5.2、内部样式表

内部样式表(内嵌样式表)是写到html页面内部,是将所有的CSS代码抽取出来,单独放到一个<style>标签中。

<style>
    div {
     
     
        color: red;
        font-size: 12px;
    }
</style>

<style>标签理论上可以放在HTML文件的任何地方,但一般会放在文件的<head>标签中。

通过此种方式,可以方便控制当前整个页面中的元素样式设置

代码结构清晰,但是并没有实现结构与样式完全分离

使用内部样式表设定CSS,通常也被称为嵌入式引入,这种方式是我们练习时常用的方式。

5.3、行内样式表

行内样式表(内联样式表)是在元素标签内部的style属性中设定CSS样式。适合于修改简单样式。

<!--控制当前标签样式-->
<p style="color: red;line-height: 26px">hello world</p>

1、style其实就是标签的属性,在双引号中间,写法要符合CSS规范。可以控制当前的标签设置样式。

2、由于书写繁琐,并且没有体现出结构与样式相分离的思想,所以不推荐大量使用,只有对当前元素添加简
单样式的时候,可以考虑使用。

3、使用行内样式表设定CSS,通常也被称为行内式引入。

5.4、外部样式表

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

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

1、新建一个后缀名为.css的样式文件,把所有CSS代码都放入到此文件中。

style.css

/* 这个CSS文件,只有样式没有标签 */
div {
    
    
    color: blue;
}

2、在HTML页面中,使用<link>标签引入这个文件。

<link rel="stylesheet" href="css文件路径">
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <div>人生苦短,Java是岸!</div>
</body>
</html>

link标签两个属性:

属性 作用
rel 定义当前文档与被链接文档之间的关系,这里需要指定为"stylesheet",表示被链接的文档是一个样式表文件
href 定义所链接外部样式表文件的URL,可以是相对路径,也可以是绝对路径。

使用外部样式表设定CSS,通常也被称为外链接链接式引入,这种方式是开发中常用的方式。

5.5、CSS引入方式总结

在这里插入图片描述

6、Chrome调试工具调试样式

Chrome浏览器提供了一个非常好用的调试工具,可以用来调试我们的HTML结构和CSS样式。

6.1、打开调试工具方式

打开Chrome浏览器,按下F12键或者右击页面空白处 -> 检查

6.2、使用调试工具

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

7、Emmet 语法

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

7.1、快速生成HTML标签

1、生成标签直接输入标签名,按tab键即可。比如div然后tab键,就可以生成<div></div>

2、如果想要生成多个相同标签,加上*就可以了。比如div*3 就可以快速生成3个div

3、如果有父子级关系的标签,可以用 > 。比如ul> Ii就可以了

4、如果有兄弟关系的标签,用 + 就可以了比如div+p

5、如果生成带有类名或者id名字的,直接写.demo或者#two tab 键就可以了

6、如果生成的div类名是有顺序的,可以用自增符号$

7、如果想要在生成的标签内部写内容可以用{}示

7.2、快速生成CSS样式语法

CSS基本采取简写形式即可:

1、比如 w200 按tab 可以生成 width: 200px;

2、比如 lh26 按tab 可以生成 line-height: 26px;

7.3、快速格式化代码

VsCode为例:Shift + Alt + F

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

1、文件 -> 首选项 -> 设置

2、搜索 emmet.include

3、在settings.json 下的 [用户] 中添加以下语句:

"editor.formatOnType": true,
"editor.formatOnSave": true

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

8、CSS的复合选择器

8.1、什么是复合选择器

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

  • 复合选择器可以更准确、更高效的选择目标元素(标签)
  • 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的
  • 常用的复合选择器包括:后代选择器、子选择器、并集选择器、 伪类选择器等等

8.2、后代选择器(重要)

后代选择器又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。

语法:

元素1 元素2 ...{
    
    
    /* 样式声明 */
}

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

  • 元素与元素之间用空格隔开。
  • 元素1是负极,元素2是子级,最终选择的是元素2
  • 元素2可以是儿子,也可以是孙子等,只要是元素1的后代即可。
  • 元素1和元素2可以是任意的基础选择器。

例如:

ul li {
    
    
    声明样式
}
/* 选择 ul 里面所有的 li 标签原色 */

案例:把 ol 下 li 标签改变颜色。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后代选择器</title>
    <style>
        /* 后代选择器 */
        ol li {
     
     
            color: greenyellow;
        }
    </style>
</head>
<body>
    <ol>
        <li>我是 ol 的孩子</li>
    </ol>
    <ul>
        <li>我是 ul 的孩子</li>
    </ul>
</body>
</html>

8.3、子选择器(重要)

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

语法:

元素1 > 元素2 {
    
     样式声明 }

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

例如:

div > p {
    
    
    声明样式
}
/* 选择 div 里面所有最近一级 p 标签元素 */
  • 元素1和元素2中间用大于号隔开。
  • 元素1是父级,元素2是子级,最终选择的是元素2。
  • 元素2必须是"亲儿子",器孙子,重孙之类都不归他管,你也可以叫他亲儿子选择器。
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后代选择器</title>
    <style>
        /* 子选择器 */
        .nav>a {
    
    
            color: greenyellow;
        }
    </style>
</head>

<body>
    <div class="nav">
        <a href="#">我是儿子</a><!-- 选中此标签 -->
        <p>
            <a href="#">我是孙子</a>
        </p>
    </div>
</body>

</html>

8.4、并集选择器(重要)

**并集选择器可以选择多组标签,同时为他们定义相同的样式。**通常用于集体声明。

并集选择器是各选择器通过英文逗号,连接而成,任何形式的选择器都可以作为并集选择器的一部分。

语法:

元素1,元素2 {
    
    
    样式声明
}

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

例如:

ul,div {
    
     样式声明 } /* 选择 ul 和 div 标签元素 */
  • 元素1 和 元素2中间用逗号隔开
  • 逗号可以理解为和的意思
  • 并集选择器通常用于集体声明
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>后代选择器</title>
    <style>
        /* 要求1:请把熊大和熊二改为粉色 */
        /* 并集选择器 */
        div,p {
    
    
            color: pink;
        }
        /* 要求2:请把熊大和熊二改为粉色,还有小猪一家改为粉色 */
        div,p,.pig {
    
    
            color: pink;
        }
		/*
			约定的语法规范,我们并集选择器喜欢竖着写,一定要注意,最后一个选择器不加逗号。
			div,
			p,
			.pig {

			}
		*/
        
    </style>
</head>

<body>
    <div>熊大</div>
    <p>熊二</p>
    <span>关头强</span>
    <ul class="pig">
        <li>小猪佩奇</li>
        <li>猪爸爸</li>
        <li>猪妈妈</li>
    </ul>
</body>

</html>

8.5、伪类选择器

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

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

因为伪类选择器很多,比如有链接伪类,结构伪类等,所以这里先给讲常用的链接伪类选择器。

1、链接伪类选择器
a:link /* 选择所有未被访问的链接 */
a:visited /* 选择所有已被访问的链接 */
a:hover /* 选择鼠标指针位于其上的链接 */
a:active /* 选择活动链接(鼠标按下为弹起的链接) */
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>伪类选择器</title>
    <style>
        /* 未访问的链接 a:link 把没有点击过的链接选出来*/
        a:link {
     
     
            color: #333;
            text-decoration: none;
        }
        /* 访问过的链接 a:visited 把点击过的链接选出来,改为荧光绿颜色 */
        a:visited {
     
     
            color: yellowgreen;
            text-decoration: none;
        }
        /* a:hover 选择鼠标经过的那个链接 */
        a:hover {
     
     
            color: violet;
        }
        /* a:active 选择的是我们鼠标正在按下还没有弹起鼠标的那个链接 */
        a:active {
     
     
            color: green; /* 点击鼠标变色 */
        }
    </style>
</head>
<body>
    <a href="#">小猪佩奇</a>
    <a href="https://www.hello.com">大猪佩奇</a>
</body>
</html>

链接伪类选择器的注意事项:

  • 为了确保生效,请按照 LVHA 的顺序声明::link->:visited->:hover->:active
  • 因为a链接在浏览器中具有默认样式,所以我们实际工作中都需要给链接单独指定样式。
2、:focus 伪类选择器

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

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

input:focus {
    
    
    background-color: yellow;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #name:focus {
     
     
            background-color: greenyellow;
            color: red;
        }
    </style>
</head>
<body>
    <div>
        <input id="name" type="text" placeholder="请输入内容">
    </div>
</body>
</html>

8.6、复合选择器总结

在这里插入图片描述

9、CSS的元素显示模式

9.1、什么是元素显示模式

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

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

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

9.2、块元素

常见的块元素有<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等,其中<div>标签是最典型的块元素。

块级元素的特点:

1、比较霸道,自己独占一行。

2、高度,宽度,外边距以及内边距都可以控制。

3、宽度默认是容器(父级宽度)的100%。

4、是一个容器及盒子,里面可以放行内或者块级元素。

注意:

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

9.3、行内元素

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

行内元素的特点:

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

注意:

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

9.4、行内块元素

在行内元素中有几个特殊的标签。比如:<img/>、<input/>、<td>等,它们同时具有块元素和行内元素的特点,有些资料称它们为行内块元素

行内块元素的特点:

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

9.5、元素显示模式总结

在这里插入图片描述

9.6、元素显示模式转换

特殊情况下,我们需要元素模式的转换,简单理解:一个模式的元素需要另外一种模式的特性。比如:想要增加链接<a>的触发范围。

转换为块元素:display: block;

转换为行内元素: display: inline;

转换为行内块:display: inline-block;

案例:增加a链接的触发范围!

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        a {
     
     
            display: block; /* 把行内元素a 转换为块元素 */
            width: 120px;
            height: 50px;
            background-color: greenyellow;
        }
    </style>
</head>

<body>
    <a href="#">hello 树先生!</a>
</body>

</html>

效果:
在这里插入图片描述
综合案例:简洁版小米官网侧边栏。

要实现的效果:
在这里插入图片描述
代码实现:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>仿照小米侧边栏</title>
    <style>
        .nav {
     
     
            width: 200px;
            height: 300px;
            background-color: rgb(82, 87, 88);
        }

        .nav a {
     
     
            display: block;
            text-decoration: none;
            width: 100%;
            font-size: 14px;
            height: 40px;
            color: white;
            text-indent: 2em;
        }

        .nav a:hover {
     
     
            background-color: rgb(255, 106, 0);
        }
    </style>
</head>

<body>
    <div class="nav">
        <a href="#">手机 电话卡</a>
        <a href="#">电视 盒子</a>
        <a href="#">笔记本 平板</a>
        <a href="#">出行 穿戴</a>
        <a href="#">智能 路由器</a>
        <a href="#">健康 儿童</a>
        <a href="#">耳机 音响</a>
    </div>
</body>

</html>

我们发现,以上代码并没有呈现链接垂直居中的效果,CSS没有给我们提供文字垂直居中的代码,这里我们只可以使用技巧来实现。实现垂直居中的技巧有很多,可自行在网上了解!在此案例上我们使用比较简单的一种。

就是让文字的行高等于盒子的高度就可以让文字在当前盒子内垂直居中。

.nav a {
    
    
    display: block;
    text-decoration: none;
    font-size: 14px;
    width: 100%;
    height: 40px;
    color: white;
    text-indent: 2em;
    line-height: 40px; /* 行高等于a标签设置的高度,就可以实现文字垂直居中 */
}

单行文字垂直居中的原理:
在这里插入图片描述
简单理解:行高的上空隙和下空隙把文字挤到中间了,如果行高小于盒子高度,文字会偏上,如果行高大于盒子高度,则文字会偏下。

10、CSS的背景设置

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

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

10.1、背景颜色

background-color属性定义了元素的背景颜色。

语法:

background-color: transparent | color(颜色值、十六进制、RGB代码);

参数:

  • transparent(默认): 背景色通明
  • color:指定颜色

一般情况下元素背景颜色默认值是transparent(透明),我们也可以手动指定背景颜色为透明色。

10.2、背景图片

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

语法:

background-image: none | url("path")

参数:

none: 无背景图
url: 使用绝对或相对地址指定背景图片

示例:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
     
     
            width: 100%;
            height: 900px;
            /* background-image: url('./images/bjj.jpg'); */
            background-image: url('https://ossweb-img.qq.com/upload/webplat/info/yxzj/20210126/278481035286681.jpg');
        }
    </style>
</head>

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

</html>

10.3、背景平铺

当我们指定的背景图片小于盒子宽高时,就会出现平铺现象!
在这里插入图片描述

如果需要在HTML页面上对背景图像进行平铺,可以使用background-repeat属性。

语法:

background-repeat: repeat | no-repeat | repeat-x | repeat-y

参数:

参数值 作用
repeat 背景图像在纵向和横向上平铺(默认的)
no-repeat 背景图像不平铺
repeat-x 背景图像在横向上平铺
repeat-y 背景图像在纵向平铺

注意:

背景属性既可以加背景颜色也可以加背景图像,背景图像会置于顶层。如:
在这里插入图片描述

10.4、背景图片位置

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

语法:

background-position: x y;

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

参数值 说明
length 百分数 | 由浮点数字和单位标识符组成的长度值
position top | center | bottom | left | right 方位名词

1、参数是方位名词

  • 如果指定两个值都是方位名词,则两个值前后顺序无关,比如 left top 和 top left 效果一致。
  • 如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐。
div {
    
    
    width: 100%;
    height: 900px;
    /* background-image: url('./images/bjj.jpg'); */
    background-image: url('https://game.gtimg.cn/images/yxzj/web201706/images/comm/logo.png');
    background-repeat: no-repeat; /* 设置不平铺!默认情况下,背景图片是平铺的 */
    /* background-color: rgb(195, 230, 125); */
    /* background-position: center top; 水平居中靠上显示 */
    /* 如果是方位名词 right center 和 center right 效果是等价的 跟顺序没有关系 */
    /* background-position: center right; */

    /* 此时 水平一定是靠右侧对齐 第二个参数省略 y轴是 垂直居中显示的 */
    /* background-position: right; */
    /* 此时 第一个参数一定是 top y,顶部对齐 第二个参数省略 x 轴是水平居中显示的 */
    background-position: top;
}

2、参数时精确单位

  • 如果参数值是精确坐标,那么第一个肯定是x坐标,第二个一定是y坐标。
  • 如果指定一个数值,那该数值一定是x坐标,另一个默认垂直居中。
/* x轴 20px , y轴 50px*/
background-position: 20px 50px;
/* x轴 20px, y轴默认是 center(这里垂直居中) */
background-position: 20px;

3、参数时混合单位

  • 如果指定的两个值是精确单位和方位名词混合使用,则第一个值x坐标,第二个值是y坐标。
/* 混合参数,x轴20px,y轴垂直居中 */
background-position: 20px center;

/* 水平居中,垂直20px */
background-position: center 20px;

背景设置案例1:

实现下图效果:

在这里插入图片描述
代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .ost {
     
     
            width: 118px;
            height: 40px;
            /* background-color: yellowgreen; */
            font-size: 14px;
            font-weight: 400;
            line-height: 40px;
            background-image: url('https://game.gtimg.cn/images/js/title/title_sprite.png');
            background-position: -30px;
            background-repeat: no-repeat;
            text-indent: 2em;
        }
    </style>
</head>
<body>
    <h3 class="ost">
        成长守护平台
    </h3>
</body>
</html>

背景设置案例2:王者荣耀官网超大背景图片显示

代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .bg {
     
     
            width: 100%;
            height: 800px;
            background-image: url("https://ossweb-img.qq.com/upload/webplat/info/yxzj/20210126/278481035286681.jpg");
            background-repeat: no-repeat;
            background-position: center top;
        }
    </style>
</head>
<body>
    <div class="bg"></div>
</body>
</html>

10.5、背景图像固定(背景附着)

background-attachment属性设置背景图像是否固定或者随着页面的其余部分滚动。

使用此属性我们后期可以制作视差滚动的效果。

语法:

background-attachment: scroll | fixed;

参数:

参数值 作用
scroll 默认选项,背景图像是随着对象内容滚动
fixed 背景图像固定
background-attachment: fixed; /* 固定背景图片 */

10.6、背景复合写法

为了简化背景属性的代码,我们可以将这些属性合并简写在同一个属性background中。从而节约代码量。

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

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

/* 例如 */
background: black url('images/bg.jpg') no-repeat fixed center top;

实际开发中非常提倡这种写法!

10.7、背景色半透明

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

语法:

background: rgba(0,0,0,0.3);
  • 最后一个参数是alpha透明度,取值范围在0~1之间。
  • 我们习惯把 0.3 的 0 省略掉,写为 background: rgba(0,0,0.3);
  • 注意:背景半透明是指盒子背景半透明,盒子里面的内容不受影响。
  • CSS3新增属性,是IE9+版本浏览器才支持的。
  • 但是现在实际开发,我们不太关注兼容性写法了,可以放心使用。

10.8、背景设置总结

在这里插入图片描述
背景图片使用总结:实际开发中常见于logo或者一些装饰性 的小图片或者是超大的背景图片,优点是非常便于控制位置(精灵图也是一种运用场景)

综合案例:实现五彩导航。

素材下载地址: https://gitee.com/xiaoqiang001/html_css_material.git
在这里插入图片描述

  • 链接属于行内元素但是此时需要宽度高度,因此需要模式转换
  • 里面文字需要水平居中和垂直居中,因此需要单行文字垂直居中的代码。
  • 链接里面需要设置背景图片因此需要用到背景的相关属性设置。
  • 鼠标经过变化背景图片,因此需要用到链接伪类选择器。

代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>五彩导航</title>
    <style>
        .nav a {
     
     
            display: inline-block;
            width: 120px;
            height: 58px;
            background-color: chartreuse;
            line-height: 48px; /* 垂直居中 */
            text-decoration: none;
            color: white;
            text-align: center; /* 水平居中 */
        }
        #bg1 {
     
     
            background: url('./images/bg1.png') no-repeat;
        }
        #bg1:hover {
     
     
            background: url('./images/bg22.png') no-repeat;
        }
        #bg2 {
     
     
            background: url('./images/bg2.png') no-repeat;
        }
        #bg2:hover {
     
     
            background: url('./images/bg11.png') no-repeat;
        }
    </style>
</head>
<body>
    <div class="nav">
        <a href="#" id="bg1">五彩导航</a>
        <a href="#" id="bg2">五彩导航</a>
        <a href="#" id="bg3">五彩导航</a>
        <a href="#" id="bg4">五彩导航</a>
        <a href="#" id="bg5">五彩导航</a>
    </div>
</body>
</html>

11、CSS的三大特性

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

11.1、层叠性

在这里层叠也是覆盖的意思,比如我们给相同的标签设置两次不同的属性值。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
     
     
            color: red;
        }
        div {
     
     
            color: yellowgreen; /* 覆盖掉red,显示 yellowgreen */
        }
    </style>
</head>
<body>
    <div>人生苦短,Java是岸。</div>
</body>
</html>

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

层叠性原则:

  • 样式冲突,遵循的原则是就近原则,哪个样式离结构近,就执行哪个样式。
  • 样式不冲突,不会层叠。
    在这里插入图片描述

11.2、继承性

CSS中继承:子标签会继承父标签的某些样式,如文本颜色和字号。简单的理解就是:子承父业。
在这里插入图片描述
恰当的使用继承可以简化代码,降低CSS样式的复杂性。

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

1、行高的继承性

body {
    
    
font: 12px/1.5 'Microsoft YaHei';
  • 行高可以跟单位也可以不跟单位。
  • 如果子元素没有设置行高,则会继承父元素的行高为1.5。
  • 此时子元素的行高:当前子元素的文字大小 * 1.5.
  • body行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
     
     
            color: yellowgreen;
            /* font: 14px/36px 'Microsoft YaHei'; */
            font: 12px/1.5 'Microsoft YaHei';
        }
        div {
     
     
            /* 
                子元素继承了父元素 body 的行高 1.5 
                这个1.5 就是当前元素文字大小 font-size 的 1.5 倍
                所以当前 div 的行高就是 14px * 1.5 = 21px
            */
            font-size: 14px;
        }
        p {
     
     
            /* p标签的行高(24px) = 16px * 1.5 */
            font-size: 16px;
        }
    </style>
</head>
<body>
    <div>星辰大海</div>
    <p>白月光</p>
</body>
</html>

11.3、优先级

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

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

选择器权重如下表所示:

选择器 选择器权重
继承 或者 * 0,0,0,0
标签选择器 0,0,0,1
类选择器,伪类选择器 0,0,1,0
ID选择器 0,1,0,0
行内样式(style="") 1,0,0,0
!important 重要的 ∞ 无穷大

总结下来就是:!important > 行内样式 > ID选择器 > 类与伪类选择器 > 标签选择器 > 继承或者 *

当然如果是复合选择器,还需另外计算。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .test {
     
     
            color: red;
        }
        div {
     
     
            color: yellowgreen !important; /* 权重最大 */
        }
    </style>
</head>
<body>
    <div class="test">
        人生苦短,Java是岸。
    </div>
</body>
</html>

优先级注意点:

  • 权重是有4组数字组成,但是不会有进位。
  • 可以理解为类选择器永远大于元素选择器,id选择器永远大于类选择器,以此类推。
  • 等级判断从左向右,如果某一位数值相同,则判断下一位数值。
  • 继承的权重是0,如果该元素没有直接选中,不管父元素权重多高,子元素得到的权重都是0。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 父亲的权重是100 */
        .test {
     
     
            color: red;
        }
        /* p继承的权重为0 */
        p {
     
     
            color: yellowgreen; /* 显示此颜色 */
        }
        /* a链接浏览器默认制定了一个样式 蓝色的 有下划线 a{color: blue;} */
        a {
     
     
            color: green;
        }
    </style>
</head>
<body>
    <div class="test">
        <p>人生苦短,Java是岸。</p>
    </div>
    <a href="#">hello</a>
</body>
</html>

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

  • div ul li -----> 0,0,0,3
  • .nav ul li -----> 0,0,1,2
  • div ul li -----> 0,0,1,1
  • div ul li -----> 0,0,1,1
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* li 的权重 0,0,0,1 */
        li {
     
     
            color: red;
        }
        /* 复合选择器会有权重叠加的问题 */
        /* ul li 的权重 0,0,0,1 + 0,0,0,1 = 0,0,0,2 */
        ul li {
     
     
            color: yellowgreen; /* 显示此颜色 */
        }
        /* 权重虽然会叠加,但是永远不会有进位 */
    </style>
</head>
<body>
    <ul>
        <li>Java</li>
        <li>Python</li>
        <li>Linux</li>
    </ul>
</body>
</html>

12、CSS的盒子模型

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

12.1、看透网页布局的本质

在这里插入图片描述
网页布局过程:

1、先准备好相关的网页元素,网页元素基本都是盒子 Box。

2、利用CSS 设置好盒子样式,然后摆放到相关位置。

3、往盒子里面装内容。

网页布局的核心:就是利用CSS摆盒子。

12.2、盒子模型(Box Model) 组成

所谓盒子模型:就是把页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。CSS盒子模型本质上是一个盒子,封装周围的HTML元素,它包括:边框、外边距、内边距、和实际内容。

在这里插入图片描述
不同部分的说明:

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。

12.3、Border(边框)

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

语法:

border: border-width | border-style | border-color
属性 作用
border-width 定义边框粗细,单位是px
border-style 边框的样式
border-color 边框颜色

border-style可选值:
在这里插入图片描述
边框属性简写方式:

border: 1px solid red; /* 实际书写过程中,可以不指定顺序 */
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
     
     
            width: 300px;
            height: 200px;
            /* border-width 边框的粗细 一般情况下都用 px */
            border-width: 1px;
            /* border-style 边框的样式 solid 实线边框 */
            border-style: solid;
            /* border-color 边框的颜色 */
            border-color: yellowgreen;
            /* border: 1px solid yellowgreen; 推荐写法 */
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

12.3、边框单独设置各边

在CSS中,可以指定不同的侧面不同的边框。

实例:

div {
    
    
	broder-top: 1px solid red; /* 只设定上边框,其余同理 */
	border-right: xxxx; /* 只设定右边框 */
	border-bottom: xxxx; /* 只设置下边框 */
	border-left: xxx; /* 只设定左边框 */
}

12.5、表格的细线边框

我们在编写前端代码时,常常会遇到这样一个场景,相邻的边框会合在一起,如下图:
在这里插入图片描述

为了解决上述问题,CSS在设置边框属性时提供了解决方式!border-collapse属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。

语法:

border-collapse: collapse; /* 合并相邻边框 */
  • collapse单词是合并的意思。
  • border-collapse: collapse;表示相邻边框合并在一起。
table,td {
    
    
    border: 1px solid yellowgreen;
    border-collapse: collapse; /* 合并相邻的边框 */
}

加上后的效果:在这里插入图片描述

12.6、边框会影响盒子实际的大小

/* 我们需要一个200*200的盒子,但是这个盒子有10像素的红色边框 */
div {
    
    
    width: 200px;
    height: 200px;
    background: yellowgreen;
    border: 10px solid red;
}

效果图:
在这里插入图片描述
实际测量时,我们会发现盒子的大小会超过200*200.

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

  • 测量盒子大小的时候,不量边框。
  • 如果测量的时候包含了边框,则需要width/height减去边框的宽度。

12.7、Padding(内边距)

1、padding属性用于设置内边距,级边框与内容之间的距离。

属性 作用
padding-left 左内边距
padding-right 右内边距
padding-top 上内边距
padding-bottom 下内边距

实例:

默认情况
在这里插入图片描述
加上pdding

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>padding</title>
    <style>
        div {
     
     
            width: 200px;
            height: 200px;
            border: 1px solid red;
            padding-left: 20px;
            padding-top: 20px;
        }
    </style>
</head>
<body>
    <div>
        我是盒子内容
    </div>
</body>
</html>

效果:
在这里插入图片描述
2、内边距复合写法(简写)

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

值的个数 表达意思
padding: 5px; 1个值,代表上下左右都有5px内边距
padding: 5px 10px; 2个值,代表上下内边距是5px,左右内边距是10px
padding: 5px 10px 20px ; 3个值,代表上内边距是5px 左右内边距10px 下内边距20px
padding: 5px 10px 20px 30px; 4个值,上是5px 右10px 下20px 左是30px 顺时针

简单示例:

div {
    
    
    width: 200px;
    height: 200px;
    border: 1px solid red;
    /* padding复合写法(简写) */
    padding: 10px; /* 上下左右10px */
}

效果:
在这里插入图片描述
3、padding会影响盒子的实际大小

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

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

注意:如果盒子本身没有指定width/height属性,则此时padding不会撑开盒子大小。可自己试验一下。

div {
    
    
    width: 200px;
    height: 200px;
    border: 1px solid red;
    padding: 20px;
}

效果:
在这里插入图片描述
也就是说,如果盒子已经有了宽度和高度,此时再指定内边距,会撑大盒子。

解决方案:

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

 div {
    
    
    width: 158px; /* 减去了padding和border的多出来的像素,这样就得到了 200*200的盒子 */
    height: 158px;
    border: 1px solid red;
    padding: 20px;
}

效果一览:
在这里插入图片描述
padding的应用案例:新浪官网导航栏

在这里插入图片描述
代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>新浪导航栏</title>
    <style>
        .nav {
     
     
            width: 100%;
            height: 41px;
            border-top: 3px solid #ff8500;
            border-bottom: 1px solid #edeef0;
            background-color: #fcfcfc;
            line-height: 41px;
        }
        .nav a {
     
     
            display: inline-block;
            height: 100%;
            text-decoration: none;
            font-size: 12px;
            padding: 0 10px;
            color: #4c4c4c;
        }
        .nav a:hover {
     
     
            background-color: #eee;
            color: #ff8400;
        }
    </style>
</head>
<body>
    <div class="nav">
        <a href="#">新浪导航</a>
        <a href="#">手机新浪网</a>
        <a href="#">移动客户端</a>
        <a href="#">微博</a>
        <a href="#">三个字</a>
    </div>
</body>
</html>

12.8、Margin(外边距)

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

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

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
     
     
            width: 200px;
            height: 100px;
            background-color: yellowgreen;
            margin-top: 10px;
        }
    </style>
</head>
<body>
    <div>1</div>
    <div>2</div>
</body>
</html>

效果图:
在这里插入图片描述
margin简写方式代表的意义跟padding完全一致。

1、margin(外边距)的典型应用

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

  • 盒子必须指定了宽度(width)。
  • 盒子左右的外边距都设置为auto。
/* 块级盒子水平居中 */
.header {
    
    
	width: 960px;
	margin: 0 auto;
}

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

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

注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给父元素添加 text-align: center 即可。

2、外边距合并

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

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

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>外边距合并-嵌套块级元素垂直外边距塌陷</title>
    <style>
        .father {
     
     
            width: 400px;
            height: 400px;
            background-color: purple;
            margin-top: 50px;
        }
        .son {
     
     
            width: 200px;
            height: 200px;
            background-color: yellowgreen;
            margin-top: 100px;
        }
    </style>
</head>
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>
</html>

效果图:
在这里插入图片描述
解决方案:

  • 可以为父元素定义上边框。
  • 可以为父元素定义上内边距。
  • 可以为父元素添加overflow: hidden
.father {
    
    
    width: 400px;
    height: 400px;
    background-color: purple;
    margin-top: 50px;
    border: 1px solid transparent; /* 透明边框 */
}

效果图:
在这里插入图片描述
还有其他方法,比如浮动、固定、绝对定位的盒子不会有塌陷问题,后面咱们再总结。

3、清除内外边距

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

* {
    
    
	padding: 0; /* 清除内边距 */
	margin: 0; /* 清除外边距 */
}

例如:添加前与添加后可以做个对比!

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 这句代码也是我们 css 的第一行代码 */
        * {
     
     
            padding: 0;
            /* 清除内边距 */
            margin: 0;
            /* 清除外边距 */
        }
    </style>
</head>

<body>
    123
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
</body>

</html>

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

综合案例1:实现如下模块。
在这里插入图片描述
代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
     
     
            padding: 0;
            margin: 0;
        }
        body {
     
     
            background: #f5f5f5;
        }
        .box {
     
     
            width: 298px;
            height: 415px;
            background-color: #fff;
            margin: 100px auto;
        }
        .box img {
     
     
            width: 100%;
        }
        .review {
     
     
            height: 70px;
            font-size: 14px;
            /* 因为这个段落没有 width 属性,所有 padding不会撑开盒子的宽度 */
            padding: 0 28px;
            margin-top: 30px;
        }
        .appraise {
     
     
            color: #b0b0b0;
            font-size: 12px;
            margin-top: 20px;
            padding: 0 28px;
        }
        .info {
     
     
            font-size: 14px;
            margin-top: 15px;
            padding: 0 28px;
        }
        .info h4 {
     
     
            display: inline-block;
            font-weight: 400;
        }
        .info h4 a {
     
     
            text-decoration: none;
            color: black;
        }
        .info span {
     
     
            color: #ff6700;
        }
        .info em {
     
     
            font-style: normal; /* 正常显示 */
            color: #ebe4e0;
            margin: 0 10px;
        }
    </style>
</head>
<body>
    <div class="box">
        <img src="./images/img.jpg" alt="">
        <p class="review">快递牛,整体不错蓝牙可以说秒连。红米给力</p>
        <div class="appraise">来自于 117384232 的评价</div>
        <div class="info">
            <h4><a href="#">Redmi AirDots真无线蓝...</a></h4>
            <em>|</em>
            <span>99.9元</span>
        </div>
    </div>
</body>
</html>

综合案例2:实现如下图效果。
在这里插入图片描述
代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
     
     
            padding: 0;
            margin: 0;
        }

        .box {
     
     
            width: 248px;
            height: 163px;
            border: 1px solid #ccc;
            margin: 100px auto;
        }

        .title {
     
     
            height: 32px;
            border-bottom: 1px dotted #ccc;
        }
        .title h3 {
     
     
            display: inline-block;
            font-weight: 400;
            font-size: 14px;
            line-height: 32px;
        }
        .box ul li a {
     
     
            text-decoration: none;
            color: #666;
            font-size: 12px;
        }
        .box ul li {
     
     
            list-style: none; /* 去掉 li标签前的圆点 */
            height: 23px;
            line-height: 23px;
            padding-left: 20px;
        }
        .item {
     
     
            padding-top: 7px;
        }
        .box ul li a:hover {
     
     
            color: #f6a410;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="title">
            <h3 style="padding: 0 100px 0 15px;">品优购快报</h3>
            <h3><a style="text-decoration: none; color: gray;" href="#">更多 ></a></h3>
        </div>
        <ul class="item">
            <li><a href="#">[特惠]备战开学季全民半价购数码</a></li>
            <li><a href="#">[公告]品优稳占家电网购六成份额</a></li>
            <li><a href="#">[特惠]百元中秋全品类礼券限里领</a></li>
            <li><a href="#">[公告]上品优生鲜享阳澄胡大闸蟹</a></li>
            <li><a href="#">[特惠]每日享折扣品优品质游</a></li>
        </ul>
    </div>
</body>
</html>

13、PS基本操作

因为网页设计师大部分效果图都是利用PS(Photoshop)来做的,所以以后我们大部分切图工作都是在ps里面完成的。

1、文件->打开:可以打开我们要测量的图片。

2、Ctrl+R:可以打开标尺,或者视图 -> 标尺

3、右击标尺,把里面的单位改为像素。

4、Ctrl + 加号(+)可以放大视图,Ctrl + 减号(-)可以缩小视图。

5、按住空格键,鼠标可以变成小手,拖动PS视图。

6、用选区拖动,可以测量大小。

7、Ctrl + D 可以取消选区,或者在旁边空白处点击一下也可以取消选区。

在这里插入图片描述

14、圆角边框

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

语法:

border-radius: length; /*单位是像素 */
  • 参数值可以为数值百分比的形式。
  • border-radius属性用于设置元素的外边框圆角。
  • 如果是正方形,想要设置为一个圆,把数值修改为高度或者宽度的一半即可,或者直接写为50%
  • 如果是个矩形,设置为高度的一半就可以了。
  • 该属性是一个简写属性,可以跟四个值,分别代表左上角、右上角、右下角、左下角
  • 分开写:border-top-left-radius、border-top-right-radius、border-bottom-right-radius和border-bottom-left-radius

例如:

div {
    
    
    height: 200px;
    width: 300px;
    background-color: greenyellow;
    border-radius: 20px; /* 指定圆半径大小(像素/百分比) */
    /* border-radius: 50%; 高度和宽度的一半 */
}

效果图:
在这里插入图片描述
更多写法:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        #ro {
     
     
            height: 100px;
            width: 100px;
            background-color: greenyellow;
            /* border-radius: 50px; */
            border-radius: 50%; /* 宽和高的一半 */
        }
        #re {
     
     
            height: 100px;
            width: 200px;
            background-color: greenyellow;
            border-radius: 50px; /* 高度的一半 */
        }
        #other {
     
     
            width: 200px;
            height: 100px;
            background: greenyellow;
            border-radius: 10px 20px 30px 40px;
        }
    </style>
</head>
<body>
    1、圆形的做法
    <div id="ro"></div>
    2、圆角矩形的做法
    <div id="re"></div>
    3、设置不同的圆角
    <div id="other"></div>
</body>
</html>

radius半径 (圆的半径)原理:(椭)圆与边框的交集形成圆角效果。
在这里插入图片描述

15、盒子阴影(重点)

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

语法:

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

注意:

  • 默认的是外阴影(outset),但是不可以写这个单词,否则导致阴影无效。
  • 盒子阴影不占用空间,不会影响其他盒子排列。

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
     
     
            width: 200px;
            height: 200px;
            background: greenyellow;
            margin: 100px auto;
            box-shadow: 10px 10px 10px 10px black;
            /*
            我们一般实际设置时,会使用半透明的样式,这样更加像影子
            box-shadow: 10px 10px 10px 10px rgba(0,0,0,.3);
            */
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

我们去控制台调整参数即可明白阴影各个参数效果!

在这里插入图片描述
原先盒子没有阴影,当我们鼠标经过盒子就添加阴影效果:

div:hover {
    
    
    box-shadow: 10px 10px 10px 10px rgba(0,0,0,.3);
}

16、文字阴影

在css3中,我们可以使用text-shadow属性将阴影应用于文本。

语法:

text-shadow: h-shadow v-shadow blur color;
描述
h-shadow 必须。水平阴影的位置。允许负值。
v-shadow 必须。垂直阴影的位置。允许负值。
blur 可选。模糊距离。
color 可选。阴影的颜色。请参阅CSS颜色值。

17、CSS浮动

17.1、传统网页布局的三种方式

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

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

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

1、普通流(标准流/文档流)

所谓的标准流:就是标签按照规定好默认方式排列。

  • 块级元素独占一行,可设置宽高,从上向下顺序排列。常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
  • 行内元素按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。常用元素:span、a、i、em

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

这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。

注意:实际开发中,一个页面基本都包含了这三种布局方式(后面移动端学习新的布局方式)

2、浮动(float)

1、为什么需要浮动?

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

如何让多个块级盒子(div)水平排列成一行?display: inline-block; ???
在这里插入图片描述
比较难。虽然转换为行内块元素可以实现一行显示,但是他们之间会有很大的空白缝隙,很难控制。

提问2:如何实现两个盒子的作用对齐。
在这里插入图片描述
总结:有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。因为浮动可以改变元素标签默认的排列方式。

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

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

2、什么是浮动?

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

语法:

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

案例:体会左右浮动(边缘触及)
在这里插入图片描述
代码实现:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
     
     
            width: 600px;
            height: 400px;
            border: 1px solid black;
            margin: auto;
        }
        div #left,#right {
     
     
            width: 200px;
            height: 200px;
            background: greenyellow;
        }
        #left {
     
     
            float: left; /* 左浮动 */
        }
        #right {
     
     
            float: right; /* 右浮动 */
        }
    </style>
</head>

<body>
    <div>
        <div id="left">左青龙</div>
        <div id="right">右白虎</div>
    </div>
</body>

</html>

3、浮动特性(重点难点)

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

  • 浮动元素会脱离标准流(脱标)
  • 浮动的元素会一行内显示并且元素顶部对齐。
  • 浮动的元素会具有行内块元素的特性。

(1)关于脱离文档流的解释:脱离文档流是设置了浮动(float)的元素最重要特性,脱离标准普通流的控制(浮)移动到指定位置(动),俗称脱标。浮动的盒子不再保留原先的设置。也就是说原来的位置可以被其他的标准流占有。

(2)如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列
在这里插入图片描述
注意:浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。

(3)浮动元素会具有行内块元素特性。

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

例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        span,div {
     
     
            float: left;
            width: 100px;
            height: 100px;
            background: greenyellow;
            /* 如果行内元素有了浮动,则不需要转换块级或行内块元素就可以直接给高度和宽度 */
        }
    </style>
</head>
<body>
    <span>1</span>
    <div>2</div>
</body>
</html>

效果图:
在这里插入图片描述

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

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

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

ps:网页布局第二准则:先设置盒子大小,之后设置盒子的位置。

使用标准父盒子约束浮动的盒子:
在这里插入图片描述
案例:实现如下图效果。

在这里插入图片描述
代码实现:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
     
     
            margin: 0;
            padding: 0;
        }
        .box li {
     
     
            float: left;
            width: 296px;
            height: 100%;
            list-style: none;
            background-color: greenyellow;
            margin-right: 14px;
        }
        .box {
     
     
            width: 1226px;
            height: 285px;
            background-color: skyblue;
            margin: 10px auto;
        }
        #last {
     
     
            margin-right: 0;
        }
    </style>
</head>

<body>

    <ul class="box">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li id="last">4</li>
    </ul>

</body>

</html>

17.3、常见的网页布局

在这里插入图片描述
在这里插入图片描述
上图效果代码实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
     
     
            margin: 0;
            padding: 0;
        }
        li {
     
     
            list-style: none;
        }
        .top {
     
     
            height: 50px;
            background: gray;
            text-align: center;
            line-height: 50px;
        }
        .banner {
     
     
            width: 980px;
            height: 150px;
            background: grey;
            margin: 10px auto;
            text-align: center;
            line-height: 150px;
        }
        .box1 {
     
     
            width: 980px;
            height: 130px;
            margin: 0 auto;
            margin-bottom: 10px;
        }
        .box1 li {
     
     
            float: left;
            width: 237px;
            height: 130px;
            background: grey;
            margin-right: 10px;

        }
        .box1 ul .last {
     
     
            margin-right: 0;
        }
        .box2 {
     
     
            width: 980px;
            height: 300px;
            margin: 0 auto;
            /* background: skyblue; */
        }
        .box2 .main li {
     
     
            float: left;
            width: 237px;
            height: 300px;
            background: grey;
            margin-right: 10px;
        }
        .box2 .main .last_li {
     
     
            margin-right: 0;
        }
        .footer {
     
     
            height: 200px;
            text-align: center;
            line-height: 200px;
            background: grey;
            margin-top: 10px;
        } 
    </style>
</head>
<body>
    <div class="top">top</div>
    <div class="banner">banner</div>
    <div class="box1">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li class="last">4</li>
        </ul>
    </div>
    <div class="box2">
        <ul class="main">
            <li>1</li>
            <li>2</li>
            <li>3</li>
            <li class="last_li">4</li>
        </ul>
    </div>
    <div class="footer">footer</div>
</body>
</html>

17.4、浮动布局注意点

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

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

2、一个元素浮动了,理论上其余的兄弟元素也要浮动。

  • 一个盒子里面有多个盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题。
  • 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流。
    在这里插入图片描述

17.5、清除浮动

1、为什么要清除浮动?

由于父级盒子下有不确定个浮动起来的子元素(在不设置父级盒子高度且有浮动的子元素时,此时父级盒子高度会等于0),不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0时,就会影响下面 的标准流盒子。
在这里插入图片描述
由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响。在css中清除浮动就能解决此问题!

2、清除浮动的本质

清除浮动的本质是清除浮动元素造成的影响。如果父盒子本身有高度,则不需要清除浮动。

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

3、清除浮动

语法:

选择器 {
    
    
	clear: 属性值; /* 清除浮动 */
}

参数:

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

注意:

  • 在实际开发中,几乎只用clear: both;
  • 清除浮动的策略:通过某些方法闭合浮动!并不是删除浮动!!

4、清除浮动的方法

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

5、清除浮动 ------ 额外标签法

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

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

示例:

未清除浮动前
在这里插入图片描述
使用额外标签法清除浮动后

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
     
     
            width: 600px;
            margin: 10px auto;
            background: skyblue;
            border: 2px solid red;
        }
        .left {
     
     
            height: 100px;
            width: 100px;
            background: greenyellow;
            float: left;
        }
        .right {
     
     
            height: 200px;
            width: 200px;
            background: greenyellow;
            float: left;
        }
        .banner {
     
     
            height: 200px;
            background: gray;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="left">left,浮动</div>
        <div class="right">right,浮动</div>
        <!-- 这个新增的盒子要求必须是块级元素不能是行内元素 -->
        <div style="clear: both;"></div>
    </div>
    <div class="banner">
        banner,我是标准流
    </div>
</body>
</html>

效果图:
在这里插入图片描述
特点:

  • 优点:通俗易懂,书写方便。
  • 缺点:添加许多无意义的标签。结构比较差!

注意:要求这个新的空标签必须是块级元素

6、清除浮动 ------ 父级添加 overflow属性

可以给父级添加overflow属性,将其属性设置为hidden、auto、scroll等其中一个都可以实现闭合浮动!

注意:此属性是给父级元素添加的。

示例:

.box {
    
    
    width: 600px;
    margin: 10px auto;
    background: skyblue;
    border: 2px solid red;
    overflow: auto; /* 我们最常用的是 hidden属性值 */
}

特点:

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

7、清除浮动 ------ :after 伪元素法

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

示例:

.clearfix:after {
    
    
	content: "";
	display: block;
	height: 0;
	clear: both;
	visibility: hidden;
}
.clearfix {
    
    
	/* IE6 IE7 专有 */
	*zoom: 1;
}

使用时只需给需要闭合的父级盒子添加上clearfix类名即可。

特点:

  • 优点:没有增加标签,结构更简单。
  • 缺点:照顾低版本浏览器。

8、清除浮动 ------ 双伪元素清除浮动

也是给父元素添加

示例:

.clearfix:before,.clearfix:after {
    
    
	content: "";
	display: table;
}

.clearfix:after {
    
    
	clear: both;
}
.clearfix {
    
    
	*zoom: 1;
}

特点:

  • 优点:代码更简洁
  • 缺点:照顾低版本浏览器

9、清除浮动总结

为什么要清除浮动?

  • 父级没有高度
  • 子盒子浮动了
  • 影响下面布局了,我们就应该清除浮动了

在这里插入图片描述

18、ps切图

18.1、常见的图片格式

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

18.2、ps切图方式

ps有很多的切图方式:图层切图、切片切图、ps插件切图等。

1、图层切图

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

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

  • 选中需要的图层:图层菜单 -> 合并图层(ctrl+e)
  • 右击 -> 快速导出为PNG

选中图层:
在这里插入图片描述
导出图层:
在这里插入图片描述
2、切片切图

  1. 利用切片选中图片 (利用切片工具手动划出)
  2. 导出选中的图片(文件菜单 -> 导出 -> 存储为 web 设备所用格式 -> 选择我们要的图片格式 -> 存储)

在这里插入图片描述
使用切片工具选中素材后:

在这里插入图片描述
注意点:
在这里插入图片描述
3、ps插件切图

  1. Cutterman是一款运行在Thotoshop中的插件,能够自动将我们需要的图层进行输出,以代替传统的手工导出web所用格式以及使用切片工具进行切图挨个切图的繁琐流程。
  2. 官网:http://www.cutterman.cn/zh/cutterman
  3. Cutterman插件要求ps必须是完整版,不能是绿色版,所以需要安装完整版的PS!

End

Thank you for watching

End

猜你喜欢

转载自blog.csdn.net/m0_46357847/article/details/113270567