【CSS简介、基础选择器、字体属性、文本属性、引入方式】
本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处!
一、CSS简介 CSS 的主要使用场景就是布局网页,美化页面的。
1.1 HTML的局限性 HTML 只关注内容的语义,虽然 HTML 可以做简单的样式,但是带来的是无尽的臃肿、繁琐和低维护性……
1.2 CSS网页的美容师 CSS 是 层叠样式表
的简称。
有时我们也会称之为 CSS样式表
或 级联样式表
。
CSS 也是一种 标记语言
。
CSS 主要用于设置 HTML 页面中的文本样式(字体、大小、颜色、对齐方式……)、图片样式(宽高、边框样式、边距……)以及版面的布局和外观显示样式。
CSS 让我们的网页更加丰富多彩,布局更加灵活自如,简单理解:CSS 可以美化 HTML,让 HTML 更漂亮,同时让页面布局更简单。
总结:
HTML 搭建结构,填入元素内容
CSS 美化 HTML,布局网页元素
CSS 最大价值:由 HTML 专注去做结构呈现,样式交给 CSS,即:结构 与 样式 分离
1.3 CSS语法规范 使用 HTML 时,需要遵从一定的规范,CSS 也是如此,要想熟练地使用 CSS 对网页进行修饰,首先需要了解 CSS 样式规则。
CSS 规则由两个主要的部分构成:选择器
以及 一条或多条声明
。
选择器
是用于选出需要设置 CSS 样式的 HTML 标签,花括号 内是对该对象设置的具体样式
属性
和 属性值
以 “键值对”
的形式出现 属性: 属性值;
属性是对指定的对象设置的样式属性,例如:字体大小、文本颜色等
属性和属性值之间用英文 :
分开
多个 “键值对” 之间用英文 ;
进行区分(末尾的键值对可以不加 ;
)
所有的样式,都包含在 <style>
标签内,表示是样式表。
<style>
一般写到 </head>
里。
1 2 3 4 5 6 7 8 <head > <style type ="text/css" > h4 { color : bule; font-size : 100px ; } </style > </head >
注意:<style>
标签可以写到其他标签内部并作用与该标签区域内,但是强烈不推荐这种写法!
type="text/css"
可以省略。
1.4 CSS代码风格 1.4.1 样式格式书写
1 h3 { color : deeppink; font-size : 20px ; }
1 2 3 4 h3 { color : deeppink; font-size : 20px ; }
强烈推荐第二种格式,因为更直观!不用担心占用空间,因为后期可以通过代码压缩工具来压缩代码。
1.4.2 样式大小书写
强烈推荐样式选择器,属性名,属性值关键字全部使用小写字母 ,特殊情况除外。
凡是你不确定是否用大写的都一律用小写就对了!
1.4.3 空格规范
属性值前面 ,冒号后面 ,保留一个空格
选择器(标签)和前花括号中间 ,保留一个空格
二、CSS基础选择器 2.1 CSS选择器的作用 选择器就是根据不同的需求把不同的标签选出来,这就是选择器的作用,简单来说,就是:选择标签用的。
1 2 3 4 h1 { color : red; font-size : 25px ; }
以上 CSS 做了两件事:
找到所有的 h1 标签。(选对人)
设置这些标签的样式:颜色为红色、字体大小为 25 像素。(做对事)
2.2 选择器的分类 选择器分为 基础选择器
和 复合选择器
两个大类,本文首先介绍一下基础选择器。
基础选择器是由 单个
选择器组成的
基础选择器又包括:标签选择器
、类选择器
、id 选择器
、通配符选择器
2.3 标签选择器 标签选择器
(元素选择器)是指用 HTML 标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的 CSS 样式。
语法:
1 2 3 4 5 6 标签名 { 属性1 : 属性值1 ; 属性2 : 属性值2 ; 属性3 : 属性值3 ; ... }
作用:
标签选择器可以把某一类标签全部选择出来,比如所有的 <div>
标签和所有的 <span>
标签。
优点:
能快速为页面中同类型的标签统一设置样式。
缺点:
不能设计差异化样式,只能选择全部的当前标签。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!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 type ="text/css" > p { color : green; } div { color : pink; } </style > </head > <body > <p > 男</p > <p > 男</p > <p > 男</p > <div > 女生</div > <div > 女生</div > <div > 女生</div > </body > </html >
2.4 类选择器 如果想要差异化选择不同的标签,单独选一个或者某几个标签,可以使用 类选择器
。
CSS 语法:
1 2 3 4 .类名 { 属性1 : 属性值1 ; ... }
例如:将所有拥有 red 类的 HTML 元素均设置为红色。
HTML 语法:
1 <div class ="red" > 变红色</div >
类选择器在 HTML 中以 class 属性表示,在 CSS 中,类选择器以一个 .
号显示。
注意:
类选择器使用 .
(英文点号)进行标识,后面紧跟类名(自定义,我们自己命名的)
可以理解为给这个标签起了一个别名来表示
长名称或词组可以使用中横线 -
来为类命名
不能使用已有的关键字作为类名
不要使用纯数字、中文等命名,尽量使用英文字母来表示
命名要有意义,尽量使别人一眼就知道这个类名的目的(可读性第一,长度第二,推荐使用英语,如果是使用拼音请使用全拼 )
命名规范:见附件(Web前端开发规范手册.pdf)
记忆口诀:样式点定义 ,结构类调用 ,一个或多个 ,开发最常用 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <!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 type ="text/css" > .red { width : 100px ; height : 100px ; background-color : red; } .green { width : 100px ; height : 100px ; background-color : green; } </style > </head > <body > <div class ="red" > </div > <div class ="green" > </div > <div class ="red" > </div > </body > </html >
类选择器——多类名
我们可以给一个标签指定多个类名,从而达到更多的选择目的,这些类名都可以选出这个标签,简单理解就是一个标签有多个名字。
在标签 class 属性中写多个类名
多个类名中间必须用 空格
分开
这个标签就可以分别具有这些类名的样式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!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 type ="text/css" > .red { color : red; } .font35 { font-size : 35px ; } </style > </head > <body > <div class ="red font35" > zhoujirui</div > </body > </html >
多类名开发中使用场景
可以把一些标签元素相同的样式(共同的部分)放到一个类里面
这些标签都可以调用这个公共的类,然后再调用自己独有的类
从而节省 CSS 代码,统一修改也非常方便(模块化、可重用化 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <!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 type ="text/css" > .box { width : 100px ; height : 100px ; } .red { background-color : red; } .green { background-color : green; } </style > </head > <body > <div class ="box red" > </div > <div class ="box green" > </div > <div class ="box red" > </div > </body > </html >
多类名选择器在后期布局比较复杂的情况下,是使用得较多的。
2.5 id选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。
HTML 元素以 id 属性来设置 id 选择器,CSS 中 id 选择器以 #
来定义。
语法:
1 2 3 4 #id 名 { 属性1 : 属性值1 ; ... }
例如: 将 id 为 nav 元素中的内容设置为红色。
注意: id 属性只能在每个 HTML 文档中出现一次。
口诀: 样式 #
定义,结构 id
调用,只能调用一次,别人切勿使用。
id 选择器和类选择器的区别:
类选择器 (class) 好比人的名字,一个人可以有多个名字,同时一个名字也可以被多个人使用
id 选择器好比人的身份证号码,全中国是唯一的,不可重复(同一个 id 选择器只能调用一次)
id 选择器和类选择器最大的不同在于使用次数上
类选择器在修改样式中用的最多,id 选择器一般用于页面唯一性的元素上,经常和 JavaScript 搭配使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <!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 > 基础选择器之id选择器</title > <style type ="text/css" > #pink { color : pink; } </style > </head > <body > <div id ="pink" > zhoujirui</div > </body > </html >
再次强调:同一 id 只能定义一次,同一 id 选择器也只能调用一次! (对于 CSS 修改样式来说,最好使用类选择器,id 选择器主要与后面的 JS 搭配使用)。
2.6 通配符选择器 在 CSS 中,通配符选择器使用 *
定义,它表示选取页面中所有元素 (标签)。
语法:
通配符选择器不需要调用,自动就给所有的元素使用样式
特殊情况才使用,后面讲解使用场景
1 2 3 4 5 // 利用通配符选择器清除所有的元素标签的内外边距,后期讲 * { margin : 0 ; padding : 0 ; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!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 type ="text/css" > * { color : red; } </style > </head > <body > <div > 我的</div > <span > 我的</span > <ul > <li > 还是我的</li > </ul > </body > </html >
2.7 基础选择器总结
基础选择器
作用
特点
使用情况
用法
标签选择器
可以选出所有相同的标签,比如:p
不能差异化选择
较多
p {color: red;}
类选择器
可以选出 1 个或者 多个 标签
可以根据需求选择
非常多
.nav {color: red;}
id 选择器
一次只能选择 1 个标签
ID 属性只能在每个 HTML 文档中出现一次,也只能调用一次
一般和 js 搭配
#nav {color: red;}
通配符选择器
选择所有的标签
选择的太多,有部分不需要
特殊情况使用
* {color: red;}
每个基础选择器都有使用场景,都需要掌握
如果是修改样式,类选择器是使用最多的
三、CSS字体属性 CSS Fonts(字体)属性用于定义:字体系列
、大小
、粗细
、和 文字样式
(如:斜体)。
3.1 字体系列 CSS 使用 font-family 属性定义文本的字体系列。
1 2 3 4 5 6 7 p { font-family : "Microsoft YaHei" ; } div { font-family : Arial, "Microsoft YaHei" ; }
各种字体之间必须使用英文状态下的逗号隔开
一般情况下,如果有空格隔开的多个单词组成的字体,加引号
尽量使用系统默认自带字体,保证在任何用户的浏览器中都能正确显示
最常用的字体:body {font-family: "Microsoft YaHei", tahoma, arial, sans-serif, "Hiragino Sans GB";}
Apple 官网字体:
1 2 3 body { font-family : "SF Pro SC" , "SF Pro Text" , "SF Pro Icons" , "PingFang SC" , "Helvetica Neue" , "Helvetica" , "Arial" , sans-serif }
Instagram 官网字体:
1 2 3 body { font-family : -apple-system, BlinkMacSystemFont,"Segoe UI" , Roboto, Helvetica, Arial, sans-serif }
知乎官网字体:
1 2 3 >body { font-family : -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, WenQuanYi Micro Hei, sans-serif>}
爱奇艺官网字体:
1 2 3 body {font-family : PingFangSC-Regular, Helvetica, Arial, Microsoft Yahei, sans-serif}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <!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 type ="text/css" > h2 { font-family : "Microsoft YaHei" , Arial, sans-serif; } p { font-family : "Times New Roman" , Times, serif; } </style > </head > <body > <h2 > JERRY的秘密</h2 > <p > 姓名:周吉瑞</p > <p > 生日:2000年5月4日</p > <p > 性别:男</p > <p > 婚姻状况:单身</p > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!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 type ="text/css" > body { font-family : "Microsoft YaHei" , Arial, sans-serif; } </style > </head > <body > <h2 > JERRY的秘密</h2 > <p > 姓名:周吉瑞</p > <p > 生日:2000年5月4日</p > <p > 性别:男</p > <p > 婚姻状况:单身</p > </body > </html >
注意:浏览器字体是依据用户操作系统来调用的,所以这里介绍一种 Windows 系统安装字体的方法。
当然实际开发中通常浏览器请求时,会把字体文件随 HTML CSS JS 等一同传送到客服端。
![](D:\桌面\HTML5+CSS3 笔记\01【HTML基础】\mark-img\2021041511462678.png)
3.2 字体大小 CSS 使用 font-size 属性定义字体大小。
px(像素)大小是我们网页的最常用的单位
谷歌浏览器默认的文字大小为:16px
不同浏览器可能默认显示的字号大小不一致,我们尽量给一个明确值大小,不要默认大小
可以给 body 指定整个页面文字的大小
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <!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 type ="text/css" > body { font-size : 24px ; } h2 { font-size : 54px ; } </style > </head > <body > <h2 > JERRY的秘密</h2 > <p > 姓名:周吉瑞</p > <p > 生日:2000年5月4日</p > <p > 性别:男</p > <p > 婚姻状况:单身</p > </body > </html >
3.3 字体粗细 CSS 使用 font-weight 属性设置文本字体的粗细。
1 2 3 p { font-weight : bold; }
属性值
描述
normal
默认值(不加粗的)
bold
定义粗体(加粗的)
100-900
400 等同于 normal,而 700 等同于 bold,其它值一般不使用,注意这个数字后面不跟单位
学会让加粗标签(比如 h 和 strong 等)变为不加粗,或者让其他标签加粗
实际开发时,我们更喜欢用数字表示粗细
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <!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 type ="text/css" > .bold { font-weight : 700 ; } h2 { font-weight : 400 ; } </style > </head > <body > <h2 > JERRY的秘密</h2 > <p > 姓名:周吉瑞</p > <p > 生日:2000年5月4日</p > <p > 性别:男</p > <p class ="bold" > 婚姻状况:单身</p > </body > </html >
3.4 文字样式 CSS 使用 font-style 属性设置文本的风格。
1 2 3 p { font-style : normal; }
属性值
作用
normal
默认值,浏览器会显示标准的字体样式 font-style: normal;
italic
浏览器会显示斜体的字体样式
注意: 平时我们很少给文字加斜体,反而要给斜体标签 (em、i) 改为不倾斜字体。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!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 type ="text/css" > p { font-style : italic; } em { font-style : normal; } </style > </head > <body > <p > 上课时候的你</p > <em > 下课时候的你</em > </body > </html >
3.5 字体复合属性 字体属性可以把以上文字样式综合来写,这样可以更节约代码。
1 2 3 4 5 6 7 body { font : font-style font-weight font-size/line-height font-family; } body { font : normal 400 font-size/line-height "Microsoft YaHei" , Arial, sans-serif; }
使用 font 属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开
不需要设置的属性可以省略(取默认值),但必须保留 font-size 和 font-family 属性,否则 font 属性将不起作用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!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 type ="text/css" > div { font : italic 700 16px 'Microsoft YaHei' ; } </style > </head > <body > <div > 三生三世十里桃花,一心一意百行代码</div > </body > </html >
3.6 字体属性总结
属性
表示
注意点
font-size
字号
我们通常用的单位是 px 像素,一定要跟上单位
font-family
字体
实际工作中按照团队约定来写字体
font-weight
字体属性
记住加粗是 700 或者 bold 不加粗 是 normal 或者 400 记住数字不要跟单位
font-style
字体样式
记住倾斜是 italic 不倾斜是 normal 工作中我们最常用 normal
font
字体连写
1、字体连写是有顺序的不能随意换位置,2、其中字号和字体必须同时出现
四、CSS文本属性 CSS Text(文本)属性可定义文本的 外观
,比如:文本颜色
、文本对齐
、文本装饰
、文本缩进
、行间距
等。
4.1 文本颜色 color
属性用于定义文本的颜色。
表示方式
属性值
预定义的颜色值
red,green,blue,black,white,gray
十六进制
#FF0000,#FF6600,#29D794(每两位对应:#红R绿G蓝B)
RGB 代码
rgb(255, 0, 0) 或 rgb(100%, 0%, 0%)
注意: 开发中最常用的是十六进制。
熟记开发常用色:
黑色:black
、#000000
、rgb(0, 0, 0)
(三原色啥也没有混合就为黑)
白色:white
、#FFFFFF
、rgb(255, 255, 255)
(三原色全满混合就为白)
灰色:gray
、#808080
、rgb(128, 128, 128)
(三原色全半混合就为灰)
红色:red
、#FF0000
、rgb(255, 0, 0)
绿色:green
、#008000
、rgb(0, 128, 0)
(绿色较为特殊,green 对应的是 #008000)
蓝色:blue
、#0000FF
、rgb(0, 0, 255)
黄色:yellow
、#FFFF00
、rgb(255, 255, 0)
青色:#00FFFF
、rgb(0, 255, 255)
洋红:#FF00FF
、rgb(255, 0, 255)
橙色:orange
粉色:pink
烈粉色:hotpink
(浓度低)、deeppink
(浓度高)
天蓝色:skyblue
深色系:dark颜色
如:darkgreen
浅色系:light颜色
如:lightgreen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!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 type ="text/css" > div { color : rgb (255 , 20 , 147 ); } </style > </head > <body > <div > pink</div > </body > </html >
4.2 文本对齐 text-align
属性用于设置元素内文本内容的水平对齐方式。
1 2 3 div { text-align : center; }
属性值
解释
left
左对齐(默认值)
rigth
右对齐
center
居中对齐
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!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 type ="text/css" > h1 { text-align : right; } </style > </head > <body > <h1 > 右对齐的标题</h1 > </body > </html >
注意:
text-align
属性只能作用于 块级元素
,并让该块级元素内的 行内元素
实现居中(不一定是文字)。
上述例子中:h1 为块级元素,所以给 h1 设置 text-align,便会作用于里面的文本(如果里面还有行内元素的话,也会一同作用)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!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 type ="text/css" > div { text-align : center; } </style > </head > <body > <div > <p > zhoujiruizhoujirui</p > </div > </body > </html >
上述例子中:为 div 设置 text-align 之所以能够使其内部的块级元素 p 里的文字居中,原因是 p 会继承父元素 div 的 text-align 属性,所以相当于对 p 设置了 text-align。
4.3 文本装饰 text-decoration
属性规定添加到文本的修饰,可以给文本添加 下划线
、删除线
、上划线
等。
1 2 3 div { text-decoration : underline; }
属性值
描述
none
默认,没有装饰线(最常用 )
underline
下划线,链接 a 自带下划线(常用)
overline
上划线(几乎不用)
line-through
删除线(不常用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <!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 type ="text/css" > div { text-decoration : underline; } a { text-decoration : none; color : #333333 ; } </style > </head > <body > <div > 粉红色的回忆</div > <a href ="http://jerry-z-j-r.github.io" > JERRY</a > </body > </html >
4.4 文本缩进 text-indent
属性用来指定文本的第一行的缩进,通常是将段落的首行缩进。
1 2 3 div { text-indent : 10px ; }
通过设置该属性,所有元素的第一行都可以缩进一个给定的长度,甚至该长度可以是负值。
1 2 3 p { text-indent : 2em ; }
em 是一个相对单位,就是当前元素 (font-size) 1 个文字的大小,如果当前元素没有设置大小,则会按照父元素的 1 个文字大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!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 type ="text/css" > p { font-size : 24px ; text-indent : 2em ; } </style > </head > <body > <p > 打开北京、上海与广州的地铁地图,你会看见三张纵横交错的线路网络, 这代表了中国最成熟的三套城市轨道交通系统</p > <p > 可即使是这样,在北上广生活的人依然少不了对地铁的抱怨,其中谈及最多的问题便是拥挤, 对很多人而言,每次挤地铁的过程,都像是一场硬仗。更何况,还都是败仗居多。</p > <p > 那么,当越来越多的二线甚至三线城市迎接来了自己的地铁,中国哪里的地铁是最拥挤的呢?</p > </body > </html >
4.5 行间距(行高) line-height
属性用于设置行间的距离(行高),可以控制文字行与行之间的距离。
1 2 3 p { line-height : 26px ; }
行间距 = 上间距 + 文本高度 + 下间距
上下间距 = (行间距 - 文本高度)/ 2
文本高度 = font-size
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!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 type ="text/css" > p { line-height : 25px ; } </style > </head > <body > <p > 打开北京、上海与广州的地铁地图,你会看见三张纵横交错的线路网络, 这代表了中国最成熟的三套城市轨道交通系统</p > <p > 可即使是这样,在北上广生活的人依然少不了对地铁的抱怨,其中谈及最多的问题便是拥挤, 对很多人而言,每次挤地铁的过程,都像是一场硬仗。更何况,还都是败仗居多。</p > <p > 那么,当越来越多的二线甚至三线城市迎接来了自己的地铁,中国哪里的地铁是最拥挤的呢?</p > </body > </html >
补充:行间距测量技巧:上一行文字的底部与本行文字的底部之间的距离就是行间距。
![](D:\桌面\HTML5+CSS3 笔记\01【HTML基础】\mark-img\20210405144715962.jpg)
4.6 文本属性总结
属性
表示
注意点
color
文本颜色
我们通常用 十六进制 而且通常是简写形式 #fff(6 个一样可以简写)
text-align
文本对齐
可以设定文字水平的对齐方式
text-indent
文本缩进
通常我们用于段落首行缩进2个字的距离 text-indent: 2em;
text-decoration
文本修饰
牢记 添加下划线 underline 取消下划线 none
line-height
行高
控制行与行之间的距离
五、CSS引入方式 5.1 CSS的三种引入方式 按照 CSS 样式书写的位置(或者引入的方式),CSS 样式表可以分为三大类:
行内样式表(行内式)
内部样式表(嵌入式)
外部样式表(外链式)
5.2 行内样式表 行内样式表(内联样式表)是在元素标签内部的 style 属性中设定 CSS 样式,适合于修改简单样式。
1 2 3 <div style ="color: red; font-size: 12px;" > 青春不常在,抓紧谈恋爱 </div >
style
其实就是标签的属性
在双引号中间,写法要符合 CSS 规范
可以控制当前的标签设置样式
由于书写繁琐,并且没有体现出结构与样式相分离的思想,所以不推荐大量使用,只有对当前元素添加简单样式的时候,可以考虑使用
使用行内样式表设定 CSS,通常也被称为 行内式引入
5.3 内部样式表 内部样式表(嵌入样式表)时写到 HTML 页面内部,是将所有的 CSS 代码抽取出来,单独放到一个 <style>
标签中。
1 2 3 4 5 6 <style type ="text/css" > div { color : red; font-size : 12px ; } </style >
<style>
标签理论上可以放在 HTML 文档的任何地方,但一般会放到文档的 <head>
标签中
目前的浏览器已经支持省略 type
属性
通过此种方式,可以方便控制当前整个页面中的元素样式设置
代码结构清晰,但是并没有实现结构与样式完全分离
使用内部样式表设定 CSS,通常也被称为 嵌入式引入
,这种方式是我们练习时常用的方式
5.4 外部样式表 实际开发都是外部样式表,适合于样式比较多的情况,核心是:样式单独写到 CSS 文件中,之后把 CSS 文件引入到 HTML 页面中使用。
引入外部样式表分为两步:
新建一个后缀名为:.css
的样式文件,把所有的 CSS 代码都放入此文件中
在 HTML 页面中,使用 <link>
标签引入这个文件
1 <link rel ="stylesheet" type ="text/css" href ="css文件路径" >
属性
作用
rel
定义当前文档与被链接文档之间的关系,在这里**需要指定为 “stylesheet”**,表示被链接的文档是一个样式表文件
type
定被链接文档的 MIME 类型,该属性最常见的 MIME 类型是 “text/css”,该类型描述样式表,目前的浏览器已经支持省略 “type” 属性
href
定义所链接外部样式表文件的 URL,可以是相对路径,也可以是绝对路径
注意: 使用外部样式表设定 CSS,通常也被称为 外链式
或 链接式引入
,这种方式是开发中常用的方式。
5.5 CSS引入方式总结
样式表
优点
缺点
使用情况
控制范围
行内样式表(行内式)
书写方便,权重高
结构样式混写
较少
控制一个标签
内部样式表(嵌入式)
部分结构和样式分离
没有彻底分离
较多
控制一个页面
外部样式表(外链式)
完全实现结构和样式相分离
需要引入
最多,吐血推荐
控制多个页面
【CSS复合选择器、元素显示模式、背景】
本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处!
一、CSS的复合选择器 1.1 什么是复合选择器 在 CSS 中,可以根据选择器的类型把选择器分为:基础选择器
和 复合选择器
,复合选择器是建立在基础选择器之上,对基础选择器进行组合形成 的。
复合选择器可以更准确、更高效的选择目标元素(标签)
复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的
常用的复合选择器包括:后代选择器 、子选择器 、并集选择器 、伪类选择器 等
1.2 后代选择器 后代选择器
又称为 包含选择器
,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。
语法:
上述语法表示选择 元素 1 里面的所有 元素 2 (后代元素)。
例如:
元素1 和 元素2 中间用 空格 隔开
元素1 是父级,元素2 是子级,最终选择的是 元素2,即:元素1 是不会生效样式的
元素2 可以是儿子,也可以是孙子等,只要是 元素1 的后代即可
元素1 和 元素2 可以是任意基础选择器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 <!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 > ol li { color : pink; } ol a { color : red; } ul li { color : green; } .nav li a { color : yellow; } </style > </head > <body > <ol > <li > 我是 ol 的孩子</li > <li > 我是 ol 的孩子</li > <li > 我是 ol 的孩子</li > <li > <a href ="#" > 我是 ol 的孙子</a > </li > </ol > <ul > <li > 我是 ul 的孩子</li > <li > 我是 ul 的孩子</li > <li > 我是 ul 的孩子</li > <li > <a href ="#" > 我是 ul 的孙子,但是我不会变化</a > </li > </ul > <ul class ="nav" > <li > <a href ="#" > 我偏要变色!并且只能我一个人色……</a > </li > </ul > </body > </html >
1.3 子选择器 子元素选择器(子选择器)只能选择作为某元素的最近一级子元素 ,简单理解就是选亲儿子元素。
注意:是最近一级而并非最近一个 !
语法:
上述语法表示选择元素1 里面的所有直接后代(子元素)元素2。
例如:
元素1 和 元素2 中间用 大于号 隔开
元素1 是父级,元素2 是子级,最终选择的是元素2,即元素1 是不会生效样式的
元素2 必须是亲儿子,其孙子、重孙之类都不归他管 ,你也可以叫:亲儿子选择器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <!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 > .nav >a { color : red; } </style > </head > <body > <div class ="nav" > <a href ="#" > 我是儿子1</a > <p > <a href ="#" > 我是孙子1</a > <a href ="#" > 我是孙子2</a > </p > <a href ="#" > 我是儿子2</a > </div > </body > </html >
1.4 并集选择器 并集选择器
可以选择多组标签,同时为他们定义相同的样式,通常用于集体声明 。并集选择器
是各选择器通过英文逗号 ,
连接而成,任何形式的选择器都可以作为并集选择器的一部分。
语法:
1 2 3 4 5 6 元素1 , 元素2 , 元素3 { 样式声明 }
上述语法表示选择元素1、元素2 和 元素3。
例如:
元素1 和 元素2 中间用逗号隔开(最后一个不加逗号)
逗号可以理解为和的意思
并集选择器通常用于集体声明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <!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 , p , .pig li { color : pink; } </style > </head > <body > <div > 熊大</div > <p > 熊二</p > <span > 光头强</span > <ul class ="pig" > <li > 小猪佩奇</li > <li > 猪爸爸</li > <li > 猪妈妈</li > </ul > </body > </html >
1.5 伪类选择器 伪类选择器
用于向某些选择器添加特殊的效果 ,比如:给链接添加特殊效果(链接伪类),或选择第 n 个元素(结构伪类)。伪类选择器
书写最大的特点是用冒号 :
表示,比如::hover
、:first-child
。 因为伪类选择器很多,比如:链接伪类
、结构伪类
等,所以这里先讲解常用的链接伪类选择器。
伪类的由来:因为在页面中并没有这个真实存在的类,所以称为 “伪类”。
1.6 链接伪类选择器 链接伪类选择器注意事项:
为了确保生效且不冲突,请按照 LVHA
的顺序声明 :link
:visited
:hover
:active
记忆法:love hate 或者 lv 包包 hao
因为 a 链接在浏览器中具有默认样式,所以我们实际工作中都需要给链接单独指定样式
链接伪类选择器实际工作开发中的写法:
1 2 3 4 5 6 7 8 9 a { color : gray; } a :hover { color : red; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <!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 > a :link { color : #333 ; text-decoration : none; } a :visited { color : orange; } a :hover { color : skyblue; } a :active { color : green; } </style > </head > <body > <a href ="#" > 小猪佩奇</a > </body > </html >
注意::hover
:active
也适用于其他标签元素。
1.7 :focus伪类选择器 :focus
伪类选择器用于选取获得焦点的表单元素。
焦点就是光标,一般情况 <input>
类表单元素才能获取,因此这个选择器也主要针对于表单元素来说。
1 2 3 input :focus { background-color : yellow; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!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 > 复合选择器之focus伪类选择器</title > <style > input :focus { background-color : pink; color : red; } </style > </head > <body > <input type ="text" > <input type ="text" > <input type ="text" > </body > </html >
1.8 复合选择器总结
选择器
作用
特征
使用情况
隔开符号及用法
后代选择器
用来选择后代元素
可以是子孙后代
较多
符号是空格 .nav a
子代选择器
选择最近一级元素
只选亲儿子
较少
符号是大于 .nav>p
并集选择器
选择某些相同样式的元素
可以用于集体声明
较多
符号是逗号 .nav
, .header
链接伪类选择器
选择不同状态的链接
跟链接相关
较多
重点记住 a{}
和 a:hover
实际开发的写法
:focus
选择器
选择获得光标的表单
跟表单相关
较少
input:focus
记住这个写法
强调:复合选择器的层级写得越细越好(可读性,可维护性,安全性),同时将复合选择器的层级写得越细,可以提前避免大部分的选择器优先级混乱!
二、CSS 的元素显示模式 2.1 什么是元素显示模式 作用: 网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页。
元素显示模式
就是元素(标签)以什么方式进行显示,比如 <div>
自己占一行,比如一行可以放多个 <span>
。
HTML 元素一般分为 块元素
和 行内元素
两种类型。
2.2 块元素 常见的块元素有 <h1> ~ <h6>
、<p>
、<div>
、<ul>
、<ol>
、<li>
、<dl>
、<dt>
、<dd>
、<table>
、<tr>
、<form>
等,其中 <div>
标签是最典型的块元素。
块级元素的特点:
比较霸道,自己独占一行
高度,宽度、外边距以及内边距都可以控制
宽度默认是容器(父级宽度)的 100%
是一个容器及盒子,里面可以放行内或者块级元素
注意:
文字类的块级元素内不能放置块级元素,会发生语法错误
<p>
标签主要用于存放文字,因此 <p>
里面不能放块级元素,特别是不能放 <div>
同理, <h1> ~ <h6>
等都是文字类块级标签,里面也不能放其他块级元素
2.3 行内元素 常见的行内元素有 <a>
、<span>
、<em>
、<strong>
等,其中 <span>
标签是最典型的行内元素,有的地方也将行内元素称为内联元素。
行内元素的特点:
相邻行内元素在一行上,一行可以显示多个
高、宽直接设置是无效的
默认宽度就是它本身内容的宽度
行内元素只能容纳文本或其他行内元素(a 除外)
注意:
链接里面不能再放链接
特殊情况链接 <a>
里面可以放块级元素,但是给 <a>
转换一下块级模式最安全
2.4 行内块元素 在行内元素中有几个特殊的标签:<img>
、<input>
、<th>
、<td>
,它们同时具有 块元素
和 行内元素
的特点,有些资料称它们为 行内块元素
。
行内块元素的特点:
和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙。一行可以显示多个(行内元素特点)
默认宽度就是它本身内容的宽度(行内元素特点)
高度,行高、外边距以及内边距都可以控制(块级元素特点)
2.5 元素显示模式总结
元素模式
元素排列
设置样式
默认宽度
包含
块级元素
一行只能放一个块级元素
可以设置宽度和高度
容器的 100%
容量级可以包含任何标签
行内元素
一行可以放多个行内元素
不可以直接设置宽度和高度
它本身内容的宽度
容纳文本或其他行内元素
行内块元素
一行放多个行内块元素
可以设置宽度和高度
它本身内容的宽度
学习元素显示模式的主要目的是分清它们各自的特点,当我们网页布局的时候,在合适的地方用合适的标签元素。
2.6 元素显示模式转换 特殊情况下,我们需要元素模式的转换,简单理解: 一个模式的元素需要另外一种模式的特性 比如:想要增加链接 <a>
的触发范围。
转换为块元素:display: block;
(由于经常需要设置宽高,所以通常会将行内元素转换为块元素)
转换为行内元素:display: inline;
转换为行内块:display: inline-block;
(常用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 <!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 > a { width : 150px ; height : 50px ; background-color : orange; display : block; } div { width : 300px ; height : 100px ; background-color : black; color : white; display : inline; } span { width : 300px ; height : 30px ; background-color : skyblue; display : inline-block; } </style > </head > <body > <a href ="#" > 我是行内元素</a > <a href ="#" > 我是行内元素</a > <div > 我是块级元素</div > <div > 我是块级元素</div > <span > 行内元素转化为行内块元素</span > <span > 行内元素转化为行内块元素</span > </body > </html >
2.7 简洁版小米侧边栏案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 <!doctype html > <html lang ="zh-CN" > <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 > a { display : block; width : 230px ; height : 40px ; background-color : #55585a ; font-size : 14px ; color : #fff ; text-decoration : none; text-indent : 2em ; line-height : 40px ; } a :hover { background-color : #ff6700 ; } </style > </head > <body > <a href ="#" > 手机 电话卡</a > <a href ="#" > 电视 盒子</a > <a href ="#" > 笔记本 平板</a > <a href ="#" > 出行 穿戴</a > <a href ="#" > 智能 路由器</a > <a href ="#" > 健康 儿童</a > <a href ="#" > 耳机 音响</a > </body > </html >
2.8 小技巧:单行文字垂直居中 CSS 没有给我们提供文字垂直居中的代码,这里我们可以使用一个小技巧来实现。
解决方案: 让 文字的行高
等于 盒子的高度
就可以让文字在当前盒子内垂直居中。
简单理解: 行高的上空隙和下空隙把文字挤到中间了,如果行高小于盒子高度,文字会偏上,如果行高大于盒子高度,则文字偏下。
2.9 一个注意点:块级元素不会自动换行 当块级元素的宽度超过其父元素宽度时,其不会发生换行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta content ="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" name ="viewport" > <meta content ="ie=edge" http-equiv ="X-UA-Compatible" > <title > 块级元素不会自动换行</title > <style > .clearfix :before, .clearfix:after { content: "" ; display : table; } .clearfix :after { clear: both; } .clearfix { *zoom: 1 ; } div { background-color : #FFFF00 ; width : 600px ; height : 300px ; color : #FFFFFF ; font-size : 24px ; } .div { background-color : #000 ; width : 730px ; height : 100px ; margin : 20px 0 ; } span { background-color : #000 ; width : 700px ; height : 100px ; margin : 20px 0 ; } </style > </head > <body > <div class ="clearfix" > <div class ="div" > 块级元素 块级元素 块级元素 块级元素 块级元素 块级元素 块级元素 块级元素 块级元素 块级元素 块级元素 块级元素</div > <span > 行内元素 行内元素 行内元素 行内元素 行内元素 行内元素 行内元素 行内元素</span > </div > </body > </html >
三、CSS 的背景 通过 CSS 背景属性,可以给页面元素添加背景样式。 背景属性可以设置 背景颜色
、背景图片
、背景平铺
、背景图片位置
、背景图像固定
等。
3.1 背景颜色 background-color
属性定义了元素的背景颜色。
一般情况下元素背景颜色默认值是 transparent
(透明),我们也可以手动指定背景颜色为透明色。
1 background-color : transparent;
目前 CSS 还支持丰富的渐变色,但是某些浏览器不支持,这里了解即可,具体内容请查阅资料。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <!doctype html > <html lang ="zh-CN" > <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 > #grad1 { height : 200px ; background-color : red; background-image : linear-gradient (#e66465 , #9198e5 ); } </style > </head > <body > <h3 > 线性渐变 - 从上到下</h3 > <p > 从顶部开始的线性渐变。起点是红色,慢慢过渡到蓝色:</p > <div id ="grad1" > </div > <p > <strong > 注意:</strong > Internet Explorer 9 及之前的版本不支持渐变。</p > </body > </html >
3.2 背景图片 background-image
属性描述了元素的背景图像,实际开发常用于 logo 或者一些装饰性的小图片 或者是超大的背景图片 , 优点是非常便于控制位置(精灵图也是一种运用场景)。
1 background-image : none | url (url )
参数值
作用
none
无背景图(默认的)
url
使用绝对或相对地址指定背景图像
注意:背景图片后面的地址,千万不要忘记加 URL, 同时里面的路径不要加引号。
1 2 3 4 5 6 background-color : pink;background-image : url (../images/logo.png );
3.3 背景平铺 如果需要在 HTML 页面上对背景图像进行平铺,可以使用 background-repeat
属性。
注:平铺可以简单的理解为“重复”。
1 background-repeat : repeat | no-repeat | repeat-x | repeat-y
参数值
作用
repeat
背景图像在纵向和横向上平铺(默认的)
no-repeat
背景图像不平铺
repeat-x
背景图像在横向上平铺
repeat-y
背景图像在纵向上平铺
3.4 背景图片位置 利用 background-position
属性可以改变图片在背景中的位置。
1 background-position : x y;
参数代表的意思是:x 坐标 和 y 坐标,可以使用 方位名词
或者 精确单位
。
参数值
说明
length
百分数 | 由浮点数字和单位标识符组成的长度值
position
top | center | bottom | left | rigth 方位名词
参数是方位名词
如果指定的两个值都是方位名词,则两个值前后顺序无关,比如 left top 和 top left 效果一致
如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐
参数是精确单位
如果参数值是精确坐标,那么第一个肯定是 x 坐标,第二个一定是 y 坐标
如果只指定一个数值,那该数值一定是 x 坐标,另一个默认垂直居中
参数是混合单位
如果指定的两个值是精确单位和方位名词混合使用,则第一个值是 x 坐标,第二个值是 y 坐标
3.5 背景图像固定(背景附着) background-attachment
属性设置背景图像是否固定或者随着页面的其余部分滚动。
background-attachment
后期可以制作 视差滚动
的效果。
1 background-attachment : scroll | fixed
参数
作用
scroll
背景图像是随对象内容滚动的(可见区域取决于背景图像的高度)
fixed
背景图像固定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 <!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 > body { background-image : url (images/bg.jpg ); background-repeat : no-repeat; background-position : center top; background-attachment : fixed; color : #fff ; font-size : 20px ; } </style > </head > <body > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > <p > 天王盖地虎, pink老师一米五</p > </body > </html >
3.6 背景复合写法 为了简化背景属性的代码,我们可以将这些属性合并简写在同一个属性 background
中,从而节约代码量。 当使用简写属性时,没有特定的书写顺序,一般习惯约定顺序为:background
: 背景颜色
背景图片地址
背景平铺
背景图像滚动
背景图片位置
1 background : transparent url (image.jpg ) no-repeat fixed top;
这是实际开发中,我们更提倡的写法。
3.7 背景色半透明 CSS3 为我们提供了背景颜色半透明的效果。
1 background : rgba (0 , 0 , 0 , 0.3 );
最后一个参数是 alpha
透明度,取值范围在 0~1
之间
习惯把 0.3 的 0 省略掉,写为 background: rgba(0, 0, 0, .3);
注意:背景半透明是指盒子背景半透明,盒子里面的内容不受影响
CSS3 新增属性,是 IE9+ 版本浏览器才支持的
但是现在实际开发,我们不太关注兼容性写法了,可以放心使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!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 : 300px ; height : 300px ; background : rgba (0 , 0 , 0 , .3 ); } </style > </head > <body > <div > zhoujirui</div > </body > </html >
3.8 背景总结
属性
作用
值
backgroud-color
背景颜色
预定义的颜色值 / 十六进制 / RGB代码
backgroud-image
背景图片
url(图片路径)
backgroud-repeat
是否平铺
repeat / no-repeat / repeat-x / repeat-y
backgroud-position
背景位置
length / position 分别是 x 和 y 坐标
backgroud-attachment
背景附着
scroll(背景滚动)/ fixed(背景固定)
背景简写
书写更简单
背景颜色 背景图片地址 背景平铺 背景滚动 背景位置
背景色半透明
背景颜色半透明
background: rgba(0, 0, 0, 0.3); 后面必须是4个值
背景图片:实际开发常见于 logo 或者一些装饰性的小图片或者是超大的背景图片,优点是非常便于控制位置(精灵图也是一种运用场景)。
3.9 王者荣耀案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <!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 > h3 { width : 118px ; height : 40px ; font-size : 14px ; font-weight : 400 ; line-height : 40px ; background-image : url (../image/icon.png ); background-repeat : no-repeat; background-position : left center; text-indent : 2em ; } h3 a { color : #000 ; text-decoration : none; } </style > </head > <body > <h3 > <a href ="#" > 成长守护平台</a > </h3 > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!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 > body { background-image : url (../image/b.jpg ); background-repeat : no-repeat; background-position : center top; } </style > </head > <body > </body > </html >
【Emmet语法】
本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处!
Emmet
语法的前身是 Zen coding
,它使用缩写,来提高 html/css
的编写速度,,VSCode
内部已经集成该语法。
快速生成 HTML 结构语法
快速生成 CSS 样式语法
快速生成HTML结构语法
生成标签直接输入标签名按 tab 键即可,比如 div
然后 tab 键, 就可以生成 <div></div>
如果想要生成多个相同标签加上 *
就可以了,比如 div*3
就可以快速生成 3 个 div
如果有父子级关系的标签,可以用 >
比如 ul>li
就可以了
如果有兄弟关系的标签,用 +
就可以了 比如 div+p
如果生成带有 类名
或者 id
名字的标签, 直接写 标签.demo
或者 标签#demo
再按下 tab 键就可以了
如果生成的事物有顺序,可以用自增符号 $
如果想要在生成的标签内部写内容可以用 {}
表示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 <!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 > Emmet语法之快速生成HTML结构语法</title > </head > <body > <div > </div > <table > </table > <div > </div > <div > </div > <div > </div > <div > </div > <div > </div > <div > </div > <p > </p > <p > </p > <p > </p > <p > </p > <ul > <li > </li > </ul > <div > <span > </span > </div > <div > </div > <p > </p > <div class ="nav" > </div > <div id ="banner" > </div > <p class ="one" > </p > <span class ="gray" > </span > <ul > <li id ="two" > </li > </ul > <div class ="demo" > </div > <div class ="demo" > </div > <div class ="demo" > </div > <div class ="demo" > </div > <div class ="demo" > </div > <div class ="demo1" > </div > <div class ="demo2" > </div > <div class ="demo3" > </div > <div class ="demo4" > </div > <div class ="demo5" > </div > <div > pink老师不是gay</div > <div > 他不喜欢男人</div > <div > 他不喜欢男人</div > <div > 他不喜欢男人</div > <div > 他不喜欢男人</div > <div > 他不喜欢男人</div > <div > 他不喜欢男人</div > <div > 1</div > <div > 2</div > <div > 3</div > <div > 4</div > <div > 5</div > <div > 6</div > </body > </html >
快速生成CSS样式语法 CSS 基本采取简写形式即可。
比如 w200
按 tab 可以 生成 width: 200px;
比如 lh26px
按 tab 可以生成 line-height: 26px;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Emmet语法之快速生成CSS样式语法</title > <style > .one { text-align : center; text-indent : 2em ; width : 24px ; height : 24px ; text-decoration : none; } </style > </head > <body > </body > </html >
快速格式化代码 VSCode
快速格式化代码:Shift + Alt + F 。
WebStorm
快速格式化代码:Ctrl + Alt + L 。
【CSS三大特性】
本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处!
CSS 有三个非常重要的特性:层叠性
、继承性
、优先级
。
层叠性 给同一个选择器设置相同的样式,此时一个样式就会覆盖 (层叠)另一个冲突的样式,层叠性主要解决样式冲突的问题 。
层叠性原则:
样式冲突,遵循的原则是 就近原则
,哪个样式距离结构近,就执行哪个样式
样式不冲突,不会层叠
注:就近的标准是:后 > 前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!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 { color : red; } div { color : pink; } </style > </head > <body > <div > 周吉瑞</div > </body > </html >
继承性 现实中的继承:我们继承了父亲的姓。
CSS 中的继承:子标签会继承父标签的某些样式 ,如:文本颜色和字号,简单的理解就是:子承父业。
恰当地使用继承可以简化代码,降低 CSS 样式的复杂性
子元素可以继承父元素的样式( text-
、font-
、line-
、color
) 文本、字体、段落、颜色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <!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 { color : pink; font-size : 14px ; } </style > </head > <body > <div > <p > 周吉瑞</p > </div > </body > </html >
行高的继承
1 2 3 body { font : 12px /1.5 'Microsoft YaHei' ; }
行高可以跟单位也可以不跟单位
如果子元素没有设置行高,则会继承父元素的行高为 1.5
此时子元素的行高是:当前元素 的文字大小 * 1.5
body 行高 1.5 这样写法最大的优势就是里面的子元素可以根据自己文字的大小自动调整行高
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 <!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 > body { color : pink; font : 12px /1.5 ; } div { font-size : 14px ; } p { font-size : 16px ; } </style > </head > <body > <div > 周吉瑞</div > <p > JERRY</p > <ul > <li > 没有指定文字大小</li > </ul > </body > </html >
优先级
选择器相同,则执行层叠性
选择器不同,则根据选择器权重执行
选择器权重如下表所示:
选择器
选择器权重
继承 或 *
0,0,0,0
元素选择器
0,0,0,1
类选择器、伪类选择器
0,0,1,0
ID 选择器
0,1,0,0
行内样式 style=””
1,0,0,0
!important 重要的
∞
无穷大
规则: 比较位级别,位级别相同时比较位大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 <!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 { color : pink; } .test { color : red; } #demo { color : green; } </style > </head > <body > <div class ="test" > 你笑起来真好看</div > <div class ="test" id ="demo" > 你笑起来真好看</div > <div class ="test" id ="demo" style ="color: blue;" > 你笑起来真好看</div > </body > </html >
优先级注意问题:
权重是由 4 组数字组成的,但是不会有进位!
可以理解为:类选择器
永远大于 元素选择器
,ID 选择器
永远大于 类选择器
,以此类推!
等级判断 从左到右
,如果某一位数值相同,则判断下一位数值
可以简单的记忆:通配符
和 继承
权重为 0,标签选择器
为 1,类
(伪类
)选择器为 10,ID
选择器为 100,行内样式表
为 1000,!important
无穷大
继承的权重是 0,不管父元素权重多高,子元素得到的权重都是 0 !
a
链接浏览器默认指定了一个样式,所以它不参与继承,所以设置样式需要选中单独设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <!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 > #father { color : red !important ; } p { color : pink; } </style > </head > <body > <div id ="father" > <p > 你还是很好看</p > </div > <a href ="#" > 我是单独的样式</a > </body > </html >
权重的叠加:
如果是复合选择器,则会有权重叠加,需要计算权重。
注意:再次强调!权重虽然会叠加,但一定不会进位!(1万个元素选择器也比不过一个类选择器)。
从左到右逐位比较,只有左一位同样大,才比较右边一位!
例如:
div ul li
——> 0,0,0,3
.nav ul li
——> 0,0,1,2
a:hover
——> 0,0,1,1
.nav a
——> 0,0,1,1
如果要对某一元素设置样式,那么就必须给它足够高的权重(注意:是给他,而不是他的父亲!)。
提高选择器权重的技巧之一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <!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 > ul li { color : green; } li { color : red; } .nav li { color : pink; } </style > </head > <body > <ul class ="nav" > <li > 大猪蹄子</li > <li > 大肘子</li > <li > 猪尾巴</li > </ul > </body > </html >
【CSS盒子模型】
本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处!
页面布局要学习三大核心 :盒子模型 、浮动 和定位 。
学习好盒子模型能非常好的帮助我们布局页面。
一、看透网页布局的本质 网页布局过程:
先准备好相关的网页元素,网页元素基本都是盒子
利用 CSS 设置好盒子样式,然后摆放到相应位置
往盒子里面装内容
网页布局的核心 本质: 就是利用 CSS 摆盒子!
二、盒子模型(Box Model)组成 所谓盒子模型:就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器 。 CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框
、外边距
、内边距
、和 内容
。
三、边框(border) border
可以设置元素的边框。
边框有三部分组成:边框宽度(粗细)
、边框样式
、边框颜色
。
语法:
1 border : border-width || border-style || border-color
属性
作用
border-width
定义边框粗细,单位是 px
border-style
边框的样式
border-color
边框颜色
边框样式 border-style 可以设置如下值:
none
:没有边框,即忽略所有边框的宽度(默认值)
solid
:边框为单实线(最为常用的)
dashed
:边框为虚线
dotted
:边框为点线
边框简写:
边框分开写法:
1 border-top : 1px solid red;
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <!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 : 300px ; height : 200px ; border : 10px dotted skyblue; border-top : 10px dotted pink; background-color : black; } </style > </head > <body > <div > </div > </body > </html >
3.1 表格的细线边框 表格中两个单元格相邻的边框会重叠在一起,呈现出加粗的效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 <!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 > table { width : 500px ; height : 249px ; } th { height : 35px ; } table , td , th { border : 1px solid black; font-size : 14px ; text-align : center; } </style > </head > <body > <table align ="center" cellspacing ="0" > <thead > <tr > <th > 排名</th > <th > 关键词</th > <th > 趋势</th > <th > 进入搜索</th > <th > 最近七日</th > <th > 相关链接</th > </tr > </thead > <tbody > <tr > <td > 1</td > <td > 鬼吹灯</td > <td > <img src ="down.jpg" > </td > <td > 456</td > <td > 123</td > <td > <a href ="#" > 贴吧</a > <a href ="#" > 图片</a > <a href ="#" > 百科</a > </td > </tr > <tr > <td > 1</td > <td > 鬼吹灯</td > <td > <img src ="down.jpg" > </td > <td > 456</td > <td > 123</td > <td > <a href ="#" > 贴吧</a > <a href ="#" > 图片</a > <a href ="#" > 百科</a > </td > </tr > <tr > <td > 3</td > <td > 西游记</td > <td > <img src ="up.jpg" > </td > <td > 456</td > <td > 123</td > <td > <a href ="#" > 贴吧</a > <a href ="#" > 图片</a > <a href ="#" > 百科</a > </td > </tr > <tr > <td > 1</td > <td > 鬼吹灯</td > <td > <img src ="down.jpg" > </td > <td > 456</td > <td > 123</td > <td > <a href ="#" > 贴吧</a > <a href ="#" > 图片</a > <a href ="#" > 百科</a > </td > </tr > <tr > <td > 1</td > <td > 鬼吹灯</td > <td > <img src ="down.jpg" > </td > <td > 456</td > <td > 123</td > <td > <a href ="#" > 贴吧</a > <a href ="#" > 图片</a > <a href ="#" > 百科</a > </td > </tr > <tr > <td > 1</td > <td > 鬼吹灯</td > <td > <img src ="down.jpg" > </td > <td > 456</td > <td > 123</td > <td > <a href ="#" > 贴吧</a > <a href ="#" > 图片</a > <a href ="#" > 百科</a > </td > </tr > </tbody > </table > </body > </html >
border-collapse
属性控制浏览器绘制表格边框的方式。
它控制相邻单元格的边框。
语法:
1 border-collapse : collapse;
collapse
单词是合并的意思
border-collapse: collapse;
表示相邻边框合并在一起
1 2 3 4 5 6 7 8 9 table ,td ,th { border : 1px solid black; border-collapse : collapse; font-size : 14px ; text-align : center; }
3.2 边框会影响盒子实际大小 边框会额外增加盒子的实际区域大小。因此我们有两种方案解决:
测量盒子大小的时候,不量边框
如果测量的时候包含了边框,则需要 width、height 减去边框宽度(注意减单边还是双边)
注意:盒子实际区域大小 = 内容区大小 + 内边距大小 + 边框大小 + 外边距大小
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!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 : 180px ; height : 180px ; background-color : pink; border : 10px solid black; } </style > </head > <body > <div > </div > </body > </html >
四、内边距(padding) padding 属性用于设置内边距 ,即边框与内容之间的距离 。
属性
作用
padding-left
左内边距
padding-rigth
右内边距
padding-top
上内边距
padding-bottom
下内边距
padding 属性(简写属性)可以有一到四个值。
值的个数
表达意思
padding: 5px;
1 个值,代表上下左右都有 5 像素内边距
padding: 5px 10px;
2 个值,代表上下内边距是 5 像素,左右内边距是 10 像素
padding: 5px 10px 20px;
3 个值,代码上内边距 5 像素,左右内边距 10 像素,下内边距 20 像素
padding: 5px 10px 20px 30px;
4 个值,上是 5 像素,右 10 像素,下 20 像素,左是 30 像素(顺时针)
以上 4 种情况,我们实际开发都会遇到。
当我们给盒子指定 padding
值之后,发生了 2 件事情:
内容和边框有了距离,添加了内边距
padding
影响了盒子实际区域大小
也就是说,如果盒子已经有了宽度和高度,此时再指定内边距,会撑大盒子区域!
解决方案:
如果保证盒子跟效果图大小保持一致,则让 width、height 减去多出来的内边距大小即可
如果盒子本身没有指定 width、height 属性,则此时 padding 不会撑开盒子区域大小
【padding 撑大盒子】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <!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 > padding 撑大盒子</title > <style > div { background-color : #000 ; width : 100px ; height : 100px ; } </style > </head > <body > <div > </div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <!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 > padding 撑大盒子</title > <style > div { background-color : #000 ; width : 100px ; height : 100px ; padding : 30px ; } </style > </head > <body > <div > </div > </body > </html >
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <!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 ; background-color : pink; padding : 5px 10px 20px 30px ; } </style > </head > <body > <div > 盒子内容是 content,盒子内容是 content,盒子内容是 content </div > </body > </html >
padding 的使用技巧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 <!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 > 新浪导航案例-padding影响盒子的好处</title > <style > .nav { height : 41px ; border-top : 3px solid #ff8500 ; border-bottom : 1px solid #edeef0 ; background-color : #fcfcfc ; line-height : 41px ; } .nav a { display : inline-block; height : 41px ; padding : 0 20px ; font-size : 12px ; color : #4c4c4c ; text-decoration : none; } .nav a :hover { background-color : #eee ; color : #ff8500 ; } </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 > <a href ="#" > 网站导航</a > </div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 <!doctype html > <html lang ="zh-CN" > <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 > 简洁版小米侧边栏案例-padding影响盒子大小计算</title > <style > a { display : block; width : 200px ; height : 40px ; background-color : #55585a ; font-size : 14px ; color : #fff ; text-decoration : none; padding-left : 30px ; line-height : 40px ; } a :hover { background-color : #ff6700 ; } </style > </head > <body > <a href ="#" > 手机 电话卡</a > <a href ="#" > 电视 盒子</a > <a href ="#" > 笔记本 平板</a > <a href ="#" > 出行 穿戴</a > <a href ="#" > 智能 路由器</a > <a href ="#" > 健康 儿童</a > <a href ="#" > 耳机 音响</a > </body > </html >
五、外边距(margin) margin
属性用于设置外边距 ,即控制盒子和盒子之间的距离 。
属性
作用
margin-left
左外边距
margin-right
右外边距
margin-top
上外边距
margin-bottom
下外边距
margin
简写方式代表的意义跟 padding
完全一致。
外边距典型应用:
外边距可以让块级盒子水平居中 ,但是必须满足两个条件:
盒子必须指定了宽度 width
盒子左右的外边距都设置为 auto
1 .header { width : 960px ; margin : 0 auto;}
常见的写法,以下三种都可以:
margin-left: auto; margin-right: auto;
margin: auto;
margin: 0 auto;
注意:以上方法是让块级元素水平居中,行内元素或者行内块元素水平居中给其父元素添加 text-align: center
即可。
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <!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 > 盒子模型之外边距margin</title > <style > div { width : 200px ; height : 200px ; background-color : pink; } .two { margin-top : 20px ; } </style > </head > <body > <div class ="one" > 1</div > <div class ="two" > 2</div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!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 > .header { width : 900px ; height : 200px ; background-color : pink; margin : 100px auto; } </style > </head > <body > <div class ="header" > </div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <!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 > .header { width : 900px ; height : 200px ; background-color : pink; margin : 100px auto; text-align : center; } </style > </head > <body > <div class ="header" > <span > 里面的文字</span > </div > <div class ="header" > <img src ="../image/icon.png" alt ="" > </div > </body > </html >
5.1 外边距合并 使用 margin
定义块元素的垂直外边距时,可能会出现外边距的合并。
注意:内边距没有合并一说!浮动的盒子不会发生外边距合并!
主要有两种情况:
相邻块元素垂直外边距的合并
嵌套块元素垂直外边距的塌陷
5.1.1 相邻块元素垂直外边距的合并 当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom
,下面的元素有上外边距 margin-top
,则他们之间的垂直间距不是 margin-bottom
与 margin-top
之和。而是取两个值中的较大者 ,这种现象被称为相邻块元素垂直外边距的合并(准确的描述应该是:大的外边距覆盖小的 )。
解决方案:
尽量只给一个盒子添加 margin
值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <!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 > .one { width : 200px ; height : 200px ; background-color : hotpink; margin-bottom : 100px ; } .two { width : 200px ; height : 200px ; background-color : skyblue; margin-top : 100px ; } </style > </head > <body > <div class ="one" > one</div > <div class ="two" > two</div > </body > </html >
5.1.2 嵌套块元素垂直外边距的塌陷 对于两个嵌套关系(父子关系)的块元素,当子元素有上外边距,此时父元素会塌陷较大的外边距值(外边距效果显示在父元素之上 )。
解决方案:
可以为父元素定义上边框(比如:可以给一个透明 transparent 边框)
可以为父元素定义上内边距
可以为父元素添加 overflow: hidden
还有其他方法,比如浮动、固定,绝对定位的盒子不会有塌陷问题,后面咱们再总结。
案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <!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 > .father { width : 400px ; height : 400px ; background-color : black; margin-top : 50px ; } .son { width : 200px ; height : 200px ; background-color : pink; margin-top : 100px ; } </style > </head > <body > <div class ="father" > <div class ="son" > </div > </div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <!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 > .father { width : 400px ; height : 400px ; background-color : black; margin-top : 50px ; overflow : hidden; } .son { width : 200px ; height : 200px ; background-color : pink; margin-top : 100px ; } </style > </head > <body > <div class ="father" > <div class ="son" > </div > </div > </body > </html >
注意:外边距的合并在利用盒子布局页面的时候是经常发生的!
六、清除内外边距 网页元素很多都带有默认的内外边距,而且不同浏览器默认的也不一致。因此我们在布局前,首先要清除下网页元素的内外边距。
1 2 3 4 * { padding :0 ; margin :0 ; }
注意:行内元素为了照顾兼容性,尽量只设置左右内外边距,不要设置上下内外边距(某些时候,行内元素对上下内外边距不生效)。但是转换为块级和行内块元素就可以了。
七、案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 <!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 > 综合案例-MI产品模块</title > <style > * { margin : 0 ; padding : 0 ; } body { background-color : #f5f5f5 ; } a { color : #333 ; text-decoration : none; } .box { width : 298px ; height : 415px ; background-color : #fff ; margin : 100px auto; } .box img { width : 100% ; } .review { height : 70px ; font-size : 14px ; padding : 0 28px ; margin-top : 30px ; } .appraise { font-size : 12px ; color : #b0b0b0 ; padding : 0 28px ; margin-top : 20px ; } .info { font-size : 14px ; padding : 0 28px ; margin-top : 15px ; } .info h4 { display : inline-block; font-weight : 400 ; } .info span { color : #ff6700 ; } .info em { font-style : normal; color : #ebe4e0 ; margin : 0 6px 0 15px ; } </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 >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 <!doctype html > <html lang ="zh-CN" > <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 ; } li { list-style : none; } .box { width : 248px ; height : 163px ; border : 1px solid #ccc ; margin : 100px auto; } .box h3 { height : 32px ; border-bottom : 1px dotted #ccc ; font-size : 14px ; font-weight : 400 ; line-height : 32px ; padding-left : 15px ; } .box ul li a { font-size : 12px ; color : #666 ; text-decoration : none; } .box ul li a :hover { text-decoration : underline; } .box ul li { height : 23px ; line-height : 23px ; padding-left : 20px ; } .box ul { margin-top : 7px ; } </style > </head > <body > <div class ="box" > <h3 > 品优购快报</h3 > <ul > <li > <a href ="#" > 【特惠】爆款耳机5折秒!</a > </li > <li > <a href ="#" > 【特惠】母亲节,健康好礼低至5折!</a > </li > <li > <a href ="#" > 【特惠】语音折叠台灯99元!</a > </li > <li > <a href ="#" > 【特惠】9.9元3D打印!</a > </li > <li > <a href ="#" > 【特惠】格力智能空调立省1000元!</a > </li > </ul > </div > </body > </html >
八、总结 a、布局为啥用不同盒子,我只想用 div? 标签都是有语义的,合理的地方用合理的标签。比如产品标题就用 h
,大量文字段落就用 p
。
b、为啥用辣么多类名? 类名就是给每个盒子起了一个名字,可以更好的找到这个盒子,选取盒子更容易,后期维护也更方便。
c、到底用 margin 还是 padding? 大部分情况两个可以混用,两者各有优缺点,但是根据实际情况,总是有更简单的方法实现。
一般来说,盒子与盒子之间统一用 margin,内容与边框之间用 padding。
d、自己做没有思路? 布局有很多种实现方式,可以开始先模仿大牛的写法,然后再做出自己的风格。
最后一定多运用辅助工具,比如屏幕画笔,PS 等等。
【圆角边框、盒子阴影、文字阴影】
本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处!
一、圆角边框 CSS 3 新增了圆角边框样式。
border-radius 属性用于设置元素的外边框圆角。
语法:
原理:
border-radius 顾名思义:边框半径。
(椭)圆与边框的交集形成圆角效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 圆角边框</title > <style > div { width : 300px ; height : 150px ; background-color : pink; border-radius : 24px ; } </style > </head > <body > <div > </div > </body > </html >
注意:
参数值可以为数值或百分比的形式
如果是正方形,想要设置为圆形,那么只需要把数值修改为高度或者宽度的一半即可,或者直接写为 50%
如果是个矩形,设置为高度的一半就可以做 “胶囊” 效果了
该属性是一个简写属性,可以跟多个值
四个值:左上角、右上角、右下角、左下角(从左上开始顺时针)
三个值:左上、右上+左下、右下(对角为一组)
两个值:左上+右下、右上+左下(对角为一组)
同时可以对特定角单独设置
左上角:border-top-left-radius
右上角:border-top-right-radius
右下角:border-bottom-right-radius
左下角:border-bottom-left-radius
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 圆角边框常用写法</title > <style > .yuanxing { width : 200px ; height : 200px ; background-color : pink; border-radius : 50% ; } .juxing { width : 300px ; height : 100px ; background-color : pink; border-radius : 50px ; } .radius { width : 200px ; height : 200px ; border-top-left-radius : 20px ; background-color : pink; } </style > </head > <body > 1. 圆形的做法: <div class ="yuanxing" > </div > 2. 圆角矩形的做法: <div class ="juxing" > </div > 3. 可以设置不同的圆角: <div class ="radius" > </div > </body > </html >
二、盒子阴影 CSS 3 新增了盒子阴影。
box-shadow 属性用于为盒子添加阴影。
语法:
1 box-shadow : h-shadow v-shadow blur spread color inset;
值
描述
h-shadow
必须。水平阴影的位置,允许负值。
v-shadow
必须。垂直阴影的位置,允许负值。
blur
可选。模糊距离(虚实程度)。
spread
可选。阴影的尺寸(大小)。
color
可选。阴影的颜色,请参阅 CSS 颜色值(阴影多为半透明颜色)。
inset
可选。将外部阴影(outset)改为内部阴影(outset 不能指定,默认为空即可)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 盒子阴影</title > <style > div { width : 200px ; height : 200px ; background-color : salmon; margin : 100px auto; } div :hover { box-shadow : 10px 10px 10px -4px rgba (0 , 0 , 0 , .3 ); } </style > </head > <body > <div > </div > </body > </html >
三边阴影、双边阴影、单边阴影的设置方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 <!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 : 100px ; height : 100px ; background-color : #000 ; margin : 25px auto; color : white; } .a { box-shadow : 0 0 25px 5px red; } .b { box-shadow : 0 6px 10px 0 red; } .c1 { box-shadow : 0 10px 10px -5px red; } .c2 { width : 100% ; box-shadow : 0 -10px 10px -5px red; } .d { box-shadow : 0 10px 10px -5px red; } </style > </head > <body > <div class ="a" > 四边阴影</div > <div class ="b" > 三边阴影</div > <div class ="c1" > <div class ="c2" > 两边阴影</div > </div > <div class ="d" > 一边阴影</div > </body > </html >
三、文字阴影 CSS 3 新增了文字阴影。
text-shadow 属性用于为文本添加阴影。
语法:
1 text-shadow : h-shadow v-shadow blur color;
值
描述
h-shadow
必须。水平阴影的位置。允许负值。
v-shadow
必须。垂直阴影的位置。允许负值。
blur
可选。模糊的距离(虚实程度)。
color
可选。阴影的颜色。参阅 CSS 颜色值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 文字阴影</title > <style > div { font-size : 50px ; color : salmon; font-weight : 700 ; text-shadow : 5px 5px 6px rgba (0 , 0 , 0 , .3 ); } </style > </head > <body > <div > 你是阴影,我是火影 </div > </body > </html >
【CSS浮动】
本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处!
一、浮动(float) 1.1 传统网页布局的三种方式 网页布局的本质:用 CSS 来摆放盒子,把盒子摆放到相应位置。
CSS 提供了三种传统布局方式(简单说就是盒子如何进行排列)。
这里指的只是传统布局,其实还有一些特殊高级的布局方式。
1.2 标准流(普通流/文档流) 所谓的标准流:就是标签按照规定好的默认方式排列。
块级元素会独占一行,从上向下顺序排列。
行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。
以上都是标准流布局,我们前面学习的就是标准流,标准流是最基本的布局方式。
这三种布局方式都是用来摆放盒子的,盒子摆放到合适位置,布局自然就完成了。
注意: 实际开发中,一个页面基本都包含了这三种布局方式(后面移动端学习新的布局方式) 。
1.3 为什么需要浮动? 提问:我们用标准流能很方便的实现如下效果吗?
如何让多个块级盒子(div)水平排列成一行?
比较难,虽然转换为行内块元素可以实现一行显示,但是他们之间会有大的空白缝隙 ,很难控制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!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 : 150px ; height : 200px ; background-color : #d87093 ; display : inline-block; } </style > </head > <body > <div > 1</div > <div > 2</div > <div > 3</div > </body > </html >
如何实现两个盒子的左右对齐?
总结: 有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。 因为浮动可以改变元素标签默认的排列方式。
浮动最典型的应用:可以让多个块级元素一行内排列显示。
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!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 { float : left; width : 150px ; height : 200px ; background-color : #d87093 ; } </style > </head > <body > <div > 1</div > <div > 2</div > <div > 3</div > </body > </html >
拓展: 浮动的盒子不会发生外边距合并!
1.4 什么是浮动? float
属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
语法:
属性
描述
none
元素不浮动(默认值)
left
元素向左浮动
right
元素向右浮动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 什么是浮动</title > <style > .left , .right { float : left; width : 200px ; height : 200px ; background-color : pink; } </style > </head > <body > <div class ="left" > 左青龙</div > <div class ="right" > 右白虎</div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 什么是浮动</title > <style > .left , .right { float : left; width : 200px ; height : 200px ; background-color : pink; } .right { float : right; } </style > </head > <body > <div class ="left" > 左青龙</div > <div class ="right" > 右白虎</div > </body > </html >
1.5 浮动特性(重难点) 加了浮动之后的元素,会具有很多特性,需要我们掌握。
浮动元素会脱离标准流(脱标)
浮动的元素会一行内显示并且元素顶部对齐
浮动的元素会具有行内块元素的特性
下面分别解释:
(1)浮动元素会脱离标准流(脱标)
脱离标准普通流的控制(浮) 移动到指定位置(动),(俗称脱标)
浮动的盒子不再保留原先的位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动特性1</title > <style > .box1 { float : left; width : 200px ; height : 200px ; background-color : pink; } .box2 { width : 300px ; height : 300px ; background-color : gray; } </style > </head > <body > <div class ="box1" > 浮动的盒子</div > <div class ="box2" > 标准流的盒子</div > </body > </html >
(2)浮动的元素会一行内显示并且元素顶部对齐
如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列。
浮动的元素是互相贴靠在一起的(不会有缝隙),如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动元素特性-浮动元素一行显示</title > <style > div { float : left; width : 200px ; height : 200px ; background-color : pink; } .two { background-color : skyblue; height : 249px ; } .four { background-color : skyblue; } </style > </head > <body > <div > 1</div > <div class ="two" > 2</div > <div > 3</div > <div class ="four" > 4</div > </body > </html >
(3)浮动的元素会具有行内块元素的特性
任何元素都可以浮动。不管原先是什么模式的元素,添加浮动之后具有行内块元素相似的特性。
块级盒子:没有设置宽度时默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
行内盒子:宽度默认和内容一样宽,直接设置高宽无效,但是添加浮动后,它的大小可以直接设置
浮动的盒子中间是没有缝隙的,是紧挨着一起的
即:默认宽度由内容决定,同时支持指定高宽,盒子之间无空隙
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动的元素具有行内块元素特点</title > <style > span , div { float : left; width : 200px ; height : 100px ; background-color : pink; } p { float : right; height : 200px ; background-color : skyblue; } </style > </head > <body > <span > span1</span > <span > span2</span > <div > div</div > <p > pppppppppppppp</p > </body > </html >
注意:之所以顶部没有对齐,原因是 p 标签自带的外边距 > span div 自带的外边距。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动的元素具有行内块元素特点</title > <style > * { margin : 0px ; } span , div { float : left; width : 200px ; height : 100px ; background-color : pink; } p { float : right; height : 200px ; background-color : skyblue; } </style > </head > <body > <span > span1</span > <span > span2</span > <div > div</div > <p > pppppppppppppp</p > </body > </html >
1.6 浮动元素经常和标准流父级搭配使用 为了约束浮动元素位置,我们网页布局一般采取的策略是:
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。符合网页布局第一准侧。
应用举例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动元素搭配标准流父盒子1</title > <style > .box { width : 1200px ; height : 460px ; background-color : black; margin : 0 auto; } .left { float : left; width : 230px ; height : 460px ; background-color : pink; } .right { float : left; width : 970px ; height : 460px ; background-color : skyblue; } </style > </head > <body > <div class ="box" > <div class ="left" > 左侧</div > <div class ="right" > 右侧</div > </div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动元素搭配标准流父盒子2</title > <style > * { margin : 0 ; padding : 0 ; } li { list-style : none; } .box { width : 1226px ; height : 285px ; background-color : pink; margin : 0 auto; } .box li { width : 296px ; height : 285px ; background-color : gray; float : left; margin-right : 14px ; } .box .last { margin-right : 0 ; } </style > </head > <body > <ul class ="box" > <li > 1</li > <li > 2</li > <li > 3</li > <li class ="last" > 4</li > </ul > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动布局练习3</title > <style > .box { width : 1226px ; height : 615px ; background-color : pink; margin : 0 auto; } .left { float : left; width : 234px ; height : 615px ; background-color : gray; } .right { float : left; width : 992px ; height : 615px ; background-color : skyblue; } .right >div { float : left; width : 234px ; height : 300px ; background-color : pink; margin-left : 14px ; margin-bottom : 14px ; } </style > </head > <body > <div class ="box" > <div class ="left" > 左青龙</div > <div class ="right" > <div > 1</div > <div > 2</div > <div > 3</div > <div > 4</div > <div > 5</div > <div > 6</div > <div > 7</div > <div > 8</div > </div > </div > </body > </html >
二、常见网页布局 2.1 初识常见网页布局
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 常见网页布局</title > <style > * { margin : 0 ; padding : 0 ; } li { list-style : none; } .top { height : 50px ; background-color : gray; } .banner { width : 980px ; height : 150px ; background-color : gray; margin : 10px auto; } .box { width : 980px ; margin : 0 auto; height : 300px ; background-color : pink; } .box li { float : left; width : 237px ; height : 300px ; background-color : gray; margin-right : 10px ; } .box .last { margin-right : 0 ; } .footer { height : 200px ; background-color : gray; margin-top : 10px ; } </style > </head > <body > <div class ="top" > top</div > <div class ="banner" > banner</div > <div class ="box" > <ul > <li > 1</li > <li > 2</li > <li > 3</li > <li class ="last" > 4</li > </ul > </div > <div class ="footer" > footer</div > </body > </html >
2.2 浮动布局注意点 (1)浮动和标准流的父盒子搭配
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。
(2)一个元素浮动了,理论上其余的兄弟元素也要浮动
一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题。
浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动注意点</title > <style > .box { width : 900px ; height : 300px ; background-color : black; margin : 0 auto; } .damao { float : left; width : 200px ; height : 200px ; background-color : palevioletred; } .ermao { float : left; width : 200px ; height : 150px ; background-color : palegreen; } .sanmao { float : left; width : 300px ; height : 240px ; background-color : skyblue; } </style > </head > <body > <div class ="box" > <div class ="damao" > 大毛</div > <div class ="ermao" > 二毛</div > <div class ="sanmao" > 三毛</div > </div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动注意点</title > <style > .box { width : 900px ; height : 300px ; background-color : black; margin : 0 auto; } .damao { width : 200px ; height : 200px ; background-color : palevioletred; } .ermao { float : left; width : 200px ; height : 150px ; background-color : palegreen; } .sanmao { float : left; width : 300px ; height : 240px ; background-color : skyblue; } </style > </head > <body > <div class ="box" > <div class ="damao" > 大毛</div > <div class ="ermao" > 二毛</div > <div class ="sanmao" > 三毛</div > </div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 浮动注意点</title > <style > .box { width : 900px ; height : 300px ; background-color : black; margin : 0 auto; } .damao { float : left; width : 200px ; height : 200px ; background-color : palevioletred; } .ermao { width : 200px ; height : 150px ; background-color : palegreen; } .sanmao { float : left; width : 300px ; height : 240px ; background-color : skyblue; } </style > </head > <body > <div class ="box" > <div class ="damao" > 大毛</div > <div class ="ermao" > 二毛</div > <div class ="sanmao" > 三毛</div > </div > </body > </html >
由于大毛是浮动的,所以原来大毛的位置会空出来,此时二毛就会向上补齐空位,由于二毛高度小于大毛,所以二毛被大毛挡住了,又因为二毛是标准流,所以二毛会占据所在的一行,所以后面浮动的三毛就只能在二毛的底部之下,又由于大毛也是浮动的,所以三毛就会紧贴在大毛右侧。
三、清除浮动 3.1 思考题 我们前面浮动元素有一个标准流的父元素,他们有一个共同的特点,都是有高度的。
但是,所有的父盒子都必须有高度吗?
答案:不一定!比如,一个产品列表,随着时期的不同,产品数量也不同,所需的盒子大小也会随之改变,那么直接固定盒子高度的形式显然就是不行的。再比如,文章之类的盒子,不同的文章字数是不相同的,那么显然盒子也不能直接固定高度。
理想中的状态,让子盒子撑开父亲。有多少孩子,我父盒子就有多高。
但是不给父盒子高度会有问题吗?
答案:会!但有方法解决(清除浮动)。
3.2 为什么需要清除浮动? 由于父级盒子很多情况下不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。
3.3 清除浮动本质
清除浮动的本质是清除浮动元素造成的影响
如果父盒子本身有高度,则不需要清除浮动
清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了
3.4 清除浮动 语法:
属性值
描述
left
不允许左侧有浮动元素(清除左侧浮动的影响)
right
不允许右侧有浮动元素(清除右侧浮动的影响)
both
同时清除左右两侧浮动的影响
我们实际工作中,几乎只用 clear: both;
清除浮动的策略是:闭合浮动。
3.5 清除浮动方法
额外标签法也称为隔墙法,是 W3C 推荐的做法。(实际开发不推荐)
父级添加 overflow 属性
父级添加 after 伪元素
父级添加 双伪元素
3.6 清除浮动 —— 额外标签法 额外标签法也称为隔墙法,是 W3C 推荐的做法。
额外标签法会在浮动元素末尾添加一个空的标签。例如 <div style="clear: both"></div>
,或者其他标签(如 <br>
等)。
优点: 通俗易懂,书写方便
缺点: 添加许多无意义的标签,结构化较差
注意: 要求这个新的空标签必须是块级元素 。
总结:
清除浮动的本质是清除浮动元素脱离标准流造成的影响。
闭合浮动。只让浮动在父盒子内部影响,不影响父盒子外面的其他盒子。
隔墙法,就是在最后一个浮动的子元素后面添加一个额外空标签(块级标签),添加清除浮动样式。
实际工作可能会遇到,但是不常用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 清除浮动之额外标签法</title > <style > .box { width : 800px ; border : 3px solid black; margin : 0 auto; } .damao { float : left; width : 300px ; height : 200px ; background-color : salmon; } .ermao { float : left; width : 200px ; height : 200px ; background-color : skyblue; } .footer { height : 200px ; background-color : gray; } .clear { clear : both; } </style > </head > <body > <div class ="box" > <div class ="damao" > 大毛</div > <div class ="ermao" > 二毛</div > <div class ="ermao" > 二毛</div > <div class ="ermao" > 二毛</div > <div class ="ermao" > 二毛</div > <div class ="clear" > </div > </div > <div class ="footer" > </div > </body > </html >
3.7 清除浮动 —— 父级添加 overflow 可以给父级添加 overflow
属性,将其属性值设置为 hidden
、 auto
或 scroll
。
子不教,父之过,注意是给父元素添加代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > overflow清除浮动</title > <style > .box { overflow : hidden; width : 800px ; border : 1px solid blue; margin : 0 auto; } .damao { float : left; width : 300px ; height : 200px ; background-color : purple; } .ermao { float : left; width : 200px ; height : 200px ; background-color : pink; } .footer { height : 200px ; background-color : black; } </style > </head > <body > <div class ="box" > <div class ="damao" > 大毛</div > <div class ="ermao" > 二毛</div > </div > <div class ="footer" > </div > </body > </html >
3.8 清除浮动 —— :after 伪元素法 :after
方式是额外标签法的升级版,也是给父元素添加代码。
原理:自动在父盒子里的末尾添加一个 行内盒子,我们将它转换为 块级盒子,就间接实现了额外标签法。
1 2 3 4 5 6 7 8 9 10 11 12 .clearfix :after { content: "" ; display : block; height : 0 ; clear : both; visibility : hidden; } .clearfix { *zoom: 1 ; }
注意:类名不一定非要是 clearfix,但是还是推荐这么写以提高可读性。
优点:没有增加标签,结构更简单
缺点:需要单独照顾低版本浏览器
代表网站: 百度、淘宝网、网易等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 伪元素清除浮动</title > <style > .clearfix :after { content: "" ; display : block; height : 0 ; clear : both; visibility : hidden; } .clearfix { *zoom: 1 ; } .box { width : 800px ; border : 1px solid blue; margin : 0 auto; } .damao { float : left; width : 300px ; height : 200px ; background-color : purple; } .ermao { float : left; width : 200px ; height : 200px ; background-color : pink; } .footer { height : 200px ; background-color : black; } </style > </head > <body > <div class ="box clearfix" > <div class ="damao" > 大毛</div > <div class ="ermao" > 二毛</div > </div > <div class ="footer" > </div > </body > </html >
3.9 清除浮动 —— 双伪元素清除浮动 额外标签法的升级版,也是给给父元素添加代码。
原理:自动在父盒子里的两端添加两个行内盒子,并把它们转换为 表格,间接实现了额外标签法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 .clearfix :before,.clearfix:after { content: "" ; display : table; } .clearfix :after { clear: both; } .clearfix { *zoom:1 ; }
注意:类名不一定非要是 clearfix,但是还是推荐这么写以提高可读性。
优点:代码更简洁
缺点:需要单独照顾低版本浏览器
代表网站:小米、腾讯等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 双伪元素清除浮动</title > <style > .clearfix :before, .clearfix:after { content: "" ; display : table; } .clearfix :after { clear: both; } .clearfix { *zoom: 1 ; } .box { width : 800px ; border : 1px solid blue; margin : 0 auto; } .damao { float : left; width : 300px ; height : 200px ; background-color : purple; } .ermao { float : left; width : 200px ; height : 200px ; background-color : pink; } .footer { height : 200px ; background-color : black; } </style > </head > <body > <div class ="box clearfix" > <div class ="damao" > 大毛</div > <div class ="ermao" > 二毛</div > </div > <div class ="footer" > </div > </body > </html >
3.10 清除浮动总结 为什么需要清除浮动?
父级没高度
子盒子浮动了
影响下面布局了,我们就应该清除浮动了
清除浮动的方式
优点
缺点
额外标签法(隔墙法)
通俗易懂,书写方便
添加许多无意义的标签,结构化较差
父级 overflow: hidden;
书写简单
溢出隐藏
父级 after 伪元素
结构语义化正确
由于 IE6~7 不支持 :after,兼容性问题
父级双伪元素
结构语义化正确
由于 IE6~7 不支持 :after,兼容性问题
after 伪元素、双伪元素 清除浮动的原理将在后面的 CSS3 中解释。
【学成在线案例】
本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处!
一、准备素材和工具
二、案例准备工作 我们本次采取结构与样式相分离思想:
创建 study
目录文件夹(用于存放我们这个页面的相关内容)
study
目录内新建 images
文件夹,用于保存图片
新建首页文件 index.html
(以后我们网站首页统一规定为 index.html
)
新建 style.css
样式文件作为我们本次采用的外链样式表
将样式引入到我们的 HTML
页面文件中
样式表写入清除内外边距的样式,来检测样式表是否引入成功
三、CSS属性书写顺序 建议遵循以下顺序:
布局定位属性:display / position / float / clear / visibility / overflow
(建议 display
第一个写,毕竟关系到模式)
自身属性:width / height / margin / padding / border / background
文本属性:color / font / text-decoration / text-align / vertical-align / white- space / break-word
其他属性(CSS3):content / cursor / border-radius / box-shadow / text-shadow / background:linear-gradient …
1 2 3 4 5 6 7 8 9 10 11 12 13 .jdc { display : block; position : relative; float : left; width : 100px ; height : 100px ; margin : 0 10px ; padding : 20px 0 ; font-family : Arial, 'Helvetica Neue' , Helvetica, sans-serif; color : #333 ; background : rgba (0 ,0 ,0 ,.5 ); border-radius : 10px ; }
四、页面布局分析 为了提高网页制作的效率,布局时通常有以下的布局流程:
必须确定页面的版心(可视区),我们测量可得知
分析页面中的行模块,以及每个行模块中的列模块。其实页面布局,就是一行行罗列而成的
制作 HTML
结构。我们还是遵循,先有结构,后有样式的原则。结构永远最重要
开始运用盒子模型的原理,通过 div
+ CSS
布局来控制网页的各个模块
五、确定版心 这个页面的版心是 1200 像素,每个版心都要水平居中对齐,可以定义版心为公共类:
1 2 3 4 .w { width : 1200px ; margin : auto; }
六、头部制作
1 号是版心盒子 header
1200 * 42
的盒子水平居中对齐,上下给一个 margin
值就可以
版心盒子里面包含 2 号盒子 logo
版心盒子里面包含 3 号盒子 nav
导航栏
版心盒子里面包含 4 号盒子 search
搜索框
版心盒子里面包含 5 号盒子 user
个人信息
注意:要求里面的 4 个盒子必须都是浮动
导航栏注意点:
实际开发中,我们不会直接用链接 a 而是用 li 包含链接(li + a)的做法。
li + a 语义更清晰,一看这就是有条理的列表型内容
如果直接用 a,搜索引擎容易辨别为有堆砌关键字嫌疑(故意堆砌关键字有被搜索引擎降权的风险),从而影响网站排名
七、banner 制作
1 号盒子是通栏的大盒子 banner
,不给宽度,给高度,给一个蓝色背景
2 号盒子是版心,要水平居中对齐
3 号盒子版心内,左对齐 subnav
侧导航栏
4 号盒子版心内,右对齐 course
课程
八、精品推荐小模块
大盒子水平居中 goods
精品,注意此处有个盒子阴影
1 号盒子是标题 h3
左侧浮动
2 号盒子里面放链接左侧浮动, goods-item
距离可以控制链接的左右外边距(注意行内元素只给左右内外边距)
3 号盒子右浮动 mod
修改
九、精品推荐大模块
1 号盒子为最大的盒子, box
版心水平居中对齐
2 号盒子为上面部分,box-hd
里面左侧标题 h3
左浮动,右侧链接 a
右浮动
3 号盒子为底下部分,box-bd
里面是无序列表,有 10 个小 li
组成
小 li
最右侧外边距的问题,这里有个小技巧:给 box-bd
里的 ul
宽度为 1215
就可以一行装开 5
个 li
,因为 ul
为块级元素,当块级元素宽度大于父元素宽度时,块级元素不会自动换行。
复习点:我们用到清除浮动,因为 box-hd
里面的盒子个数不一定是多少,所以我们就不给高度了,但是里面的盒子浮动会影响下面的布局,因此需要清除浮动。
十、底部模块
1 号盒子是通栏大盒子,底部 footer
给高度,底色是白色
2 号盒子版心水平居中
3 号盒子版权 copyright
左对齐
4 号盒子链接组 links
右对齐
十一、代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <meta http-equiv ="X-UA-Compatible" content ="ie=edge" > <title > 学成在线首页</title > <link rel ="stylesheet" href ="style.css" > </head > <body > <div class ="header w" > <div class ="logo" > <img src ="images/logo.png" alt ="" > </div > <div class ="nav" > <ul > <li > <a href ="#" > 首页</a > </li > <li > <a href ="#" > 课程</a > </li > <li > <a href ="#" > 职业规划</a > </li > </ul > </div > <div class ="search" > <input type ="text" value ="输入关键词" > <button > </button > </div > <div class ="user" > <img src ="images/user.png" alt ="" style ="vertical-align: middle;" > qq-lilei </div > </div > <div class ="banner" > <div class ="w" > <div class ="subnav" > <ul > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > <li > <a href ="#" > 前端开发 <span > > </span > </a > </li > </ul > </div > <div class ="course" > <h2 > 我的课程表</h2 > <div class ="bd" > <ul > <li > <h4 > 继续学习 程序语言设计</h4 > <p > 正在学习-使用对象</p > </li > <li > <h4 > 继续学习 程序语言设计</h4 > <p > 正在学习-使用对象</p > </li > <li > <h4 > 继续学习 程序语言设计</h4 > <p > 正在学习-使用对象</p > </li > </ul > <a href ="#" class ="more" > 全部课程</a > </div > </div > </div > </div > <div class ="goods w" > <h3 > 精品推荐</h3 > <ul > <li > <a href ="#" > jQuery</a > </li > <li > <a href ="#" > jQuery</a > </li > <li > <a href ="#" > jQuery</a > </li > <li > <a href ="#" > jQuery</a > </li > <li > <a href ="#" > jQuery</a > </li > </ul > <a href ="#" class ="mod" > 修改兴趣</a > </div > <div class ="box w" > <div class ="box-hd" > <h3 > 精品推荐</h3 > <a href ="#" > 查看全部</a > </div > <div class ="box-bd" > <ul class ="clearfix" > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > <li > <img src ="images/pic.png" alt ="" > <h4 > Think PHP 5.0 博客系统实战项目演练 </h4 > <div class ="info" > <span > 高级</span > • 1125人在学习 </div > </li > </ul > </div > </div > <div class ="footer" > <div class ="w clearfix" > <div class ="copyright" > <img src ="images/logo.png" alt ="" > <p > 学成在线致力于普及中国最好的教育它与中国一流大学和机构合作提供在线课程。<br > © 2017年XTCG Inc.保留所有权利。-沪ICP备15025210号</p > <a href ="#" class ="app" > 下载APP</a > </div > <div class ="links" > <dl > <dt > 关于学成网</dt > <dd > <a href ="#" > 关于</a > </dd > <dd > <a href ="#" > 管理团队</a > </dd > <dd > <a href ="#" > 工作机会</a > </dd > <dd > <a href ="#" > 客户服务</a > </dd > <dd > <a href ="#" > 帮助</a > </dd > </dl > <dl > <dt > 关于学成网</dt > <dd > <a href ="#" > 关于</a > </dd > <dd > <a href ="#" > 管理团队</a > </dd > <dd > <a href ="#" > 工作机会</a > </dd > <dd > <a href ="#" > 客户服务</a > </dd > <dd > <a href ="#" > 帮助</a > </dd > </dl > <dl > <dt > 关于学成网</dt > <dd > <a href ="#" > 关于</a > </dd > <dd > <a href ="#" > 管理团队</a > </dd > <dd > <a href ="#" > 工作机会</a > </dd > <dd > <a href ="#" > 客户服务</a > </dd > <dd > <a href ="#" > 帮助</a > </dd > </dl > </div > </div > </div > </body > </html >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 * { margin : 0 ; padding : 0 ; } .w { width : 1200px ; margin : auto; } body { background-color : #f3f5f7 ; } li { list-style : none; } a { text-decoration : none; } .clearfix :before,.clearfix:after { content: "" ; display : table; } .clearfix :after { clear: both; } .clearfix { *zoom: 1 ; } .header { height : 42px ; margin : 30px auto; } .logo { float : left; width : 198px ; height : 42px ; } .nav { float : left; margin-left : 60px ; } .nav ul li { float : left; margin : 0 15px ; } .nav ul li a { display : block; height : 42px ; padding : 0 10px ; line-height : 42px ; font-size : 18px ; color : #050505 ; } .nav ul li a :hover { border-bottom : 2px solid #00a4ff ; color : #00a4ff ; } .search { float : left; width : 412px ; height : 42px ; margin-left : 70px ; } .search input { float : left; width : 345px ; height : 40px ; border : 1px solid #00a4ff ; border-right : 0 ; color : #bfbfbf ; font-size : 14px ; padding-left : 15px ; } .search button { float : left; width : 50px ; height : 42px ; border : 0 ; background : url (images/btn.png ); } .user { float : right; line-height : 42px ; margin-right : 30px ; font-size : 14px ; color : #666 ; } .banner { height : 421px ; background-color : #1c036c ; } .banner .w { height : 421px ; background : url (images/banner2.png ) no-repeat top center; } .subnav { float : left; width : 190px ; height : 421px ; background : rgba (0 , 0 , 0 , 0.3 ); } .subnav ul li { height : 45px ; line-height : 45px ; padding : 0 20px ; } .subnav ul li a { font-size : 14px ; color : #fff ; } .subnav ul li a span { float : right; } .subnav ul li a :hover { color : #00a4ff ; } .course { float : right; width : 230px ; height : 300px ; background-color : #fff ; margin-top : 50px ; } .course h2 { height : 48px ; background-color : #9bceea ; text-align : center; line-height : 48px ; font-size : 18px ; color : #fff ; } .bd { padding : 0 20px ; } .bd ul li { padding : 14px 0 ; border-bottom : 1px solid #ccc ; } .bd ul li h4 { font-size : 16px ; color : #4e4e4e ; } .bd ul li p { font-size : 12px ; color : #a5a5a5 ; } .bd .more { display : block; height : 38px ; border : 1px solid #00a4ff ; margin-top : 5px ; text-align : center; line-height : 38px ; color : #00a4ff ; font-size : 16px ; font-weight : 700 ; } .goods { height : 60px ; background-color : #fff ; margin-top : 10px ; box-shadow : 0px 20px 20px -15px rgba (0 , 0 , 0 , 0.1 ); line-height : 60px ; } .goods h3 { float : left; margin-left : 30px ; font-size : 16px ; color : #00a4ff ; } .goods ul { float : left; margin-left : 30px ; } .goods ul li { float : left; } .goods ul li a { padding : 0 30px ; font-size : 16px ; color : #050505 ; border-left : 1px solid #ccc ; } .mod { float : right; margin-right : 30px ; font-size : 14px ; color : #00a4ff ; } .box { margin-top : 30px ; } .box-hd { height : 45px ; } .box-hd h3 { float : left; font-size : 20px ; color : #494949 ; } .box-hd a { float : right; font-size : 12px ; color : #a5a5a5 ; margin-top : 10px ; margin-right : 30px ; } .box-bd ul { width : 1225px ; } .box-bd ul li { float : left; width : 228px ; height : 270px ; background-color : #fff ; margin-right : 15px ; margin-bottom : 15px ; } .box-bd ul li img { width : 100% ; } .box-bd ul li h4 { margin : 20px 20px 20px 25px ; font-size : 14px ; color : #050505 ; font-weight : 400 ; } .box-bd .info { margin : 0 20px 0 25px ; font-size : 12px ; color : #999 ; } .box-bd .info span { color : #ff7c2d ; } .footer { height : 415px ; background-color : #fff ; } .footer .w { padding-top : 35px ; } .copyright { float : left; } .copyright p { font-size : 12px ; color : #666 ; margin : 20px 0 15px 0 ; } .copyright .app { display : block; width : 118px ; height : 33px ; border : 1px solid #00a4ff ; text-align : center; line-height : 33px ; color : #00a4ff ; font-size : 16px ; } .links { float : right; } .links dl { float : left; margin-left : 100px ; } .links dl dt { font-size : 16px ; color : #333 ; margin-bottom : 5px ; } .links dl dd a { color : #333 ; font-size : 12px ; }