type
status
date
slug
summary
tags
category
icon
学习进度
认识两位先驱
图灵
- 二战时期,破译德军编码——英格玛。
- 加快了二战的结束。
- 设立图灵奖,人工智能之父 。
冯诺依曼
- 制订了现代计算机标准——冯诺依曼体系结构。
- 提出计算机要采用二进制,明确计算机组成部分。
- 现代计算机之父。
计算机基础
计算机由硬件和软件组成。
冯诺依曼结构:运算器、控制器、存储器、输入设备、输出设备。
软件分为系统软件和应用软件。
系统软件:Windows、linux、Mac、Harmony等等
应用软件:微信、哔哩哔哩、QQ、爱奇艺等等。
C/S架构与B/S架构
应用软件主要有两种架构模式:C/S架构和B/S架构。
前端工程师主要开发B/S架构的应用——写网页。
C/S架构
- 需要安装
- 偶尔更新
- 不跨平台
B/S架构
- 无需安装
- 无需更新
- 可跨平台
浏览器相关知识
五大浏览器四大内核
- Chrome 👉早期webkit现在Blink
- Safari👉webkit
- IE👉Trident
- Firefox👉Gecko
- Opera👉Blink
开发人员一般使用Chrome浏览器。
网页相关概念
- 一个网页由HTML(结构),CSS(表现), JavaScript(行为)三部分组成。
HTML简介
- 全称:HyperText Markup Language(超文本标记语言)
- 超文本:和普通文本相比,内容更丰富。
- 标记:文本变成超文本就需要用到各种标记符号。
- 语言:每个标记的写法、读音、使用规则、构成标记语言。
HTML最开始由IETF正式发布,后来给了W3C接管,HTML只能打开网页,由于当时的对游戏影音的需求比较大,就出现了Flash,直到WHATWG和W3C合作在2014年的时候由W3C发布了HTML5。
准备工作
- 选择图片的打开方式。
- 更改图片默认的打开方式。
下载Chrome谷歌浏览器。
HTML初体验
- 第一步:鼠标右键→新建→文本文档→输入以下内容并保存。
- 第二步:修改后缀为
.html
也可以是.htm
,然后双击打开即可。
- 程序员写的代码叫源代码,要交给浏览器进行渲染。
- 借助浏览器查看源代码:网页空白处右键→查看网页源代码。
HTML标签
- 标签又称元素,是HTML基本组成单位。
- 标签分为:单标签和双标签(绝大多数都是双标签)
- 标签不分大小写,建议使用规范的小写。
- 双标签
- 单标签
- 标签之间的关系:并列关系、嵌套关系,可以使用tab键进行缩进。看如下例子。
HTML标签属性
- 用于给标签提供附加信息。
- 可以写在:起始标签或单标签中,形式如下:
- 有些特殊的属性,没有属性名,只有属性值,例如:
- 不同的标签,有不同的属性;也有一些通用属性(在任何标签都能写)
- 属性名、属性值不能乱写,都是W3C规定好的。
- 属性名、属性值,都不区分大小写,建议小写。
- 双引号也可以写成单引号,甚至不写都行,但还是建议写双引号。
- 标签中不要出现同名属性,否则后写的会失效,例如:
HTML基本结构
检查和查看网页源代码的区别
- 查看网页源代码是:程序员编写的源代码。
- 检查是:经过浏览器“处理”后的源代码。
- 日常开发中,检查用得最多。
网页的基本结构如下
- 想要呈现在网页中的内容写在body标签中。
- head标签中的内容不会出现在网页中。
- head标签中的title标签可以指定网页的标题。
安装VSCode
- 安装中文语言包。
- 使用VSCode打开文件夹的两种方式。
- 调整字体大小。
- 设置主题。
- 安装图标主题:bscod-icons。
安装Live Server插件
- 可以更加方便的打开网页。
- 打开网页的方式更贴近项目上线。
- 代码出现改动后,可以自动刷新。
- 根据自己的情况,配置一下VSCode的自动保存。
- 使用Live Server之前,务必VSCode打开的是文件夹。
- 打开的网页必须是标准的HTML结构,否则无法刷新。
HTML注释
- 特点:注释的内容会被浏览器忽略,不呈现在页面中,但源代码依然可见。
- 作用:对代码进行解释和说明。对某段代码临时不参与运行。
- 注释不可以嵌套。
HTML文档说明
- 作用:告诉浏览器当前网页的版本。
- 新写法:W3C推荐使用HTML5写法。
- 文档声明必须写在网页第一行,且在html标签的外侧。
字符编码
- 计算机对数据的操作:存储:对数据编码。读取:对数据解码。
- 编码解码会遵循一点的规范叫字符集。
- 编码出错不可以挽回数据,解码出错可以挽回数据。
- 平时编写代码时,统一才有UTF-8编码(最稳妥)。
HTML设置语言
- 虽然浏览器默认是UTF-8,防止出错我们最好通过meta标签配合charset属性指定字符编码。
- 让浏览器显示对应的翻译提示。
- 有利于搜索引擎优化。
- zh代表中文-CN代表中国大陆。还有一种写法zh-Hans,zh代表中文,Hant代表简体。
HTML标准结构
- HTML标准结构如下:
- 输入!回车快速生成标准结构。
- 可在VSCode内置插件emmet中配置生成结构的属性定制。
- 在存放代码的文件中(VSCdoe打开的文件夹),存放一个favicon.ico图片,可以配置网站图标。
开发者文档
- 标签的使用,标签文档等等的学习可以通过下面三个网站学习到。
- W3C官网:www.w3c.org
- W3Sshool:www.W3school.com.cn(大陆网站)
- MDN:developer.mozilla.org(平时用最多)
排版标签
h1
是标题最好只写一个,h2
-h6
能适当多写。
h1
-h6
不能互相嵌套。
- p标签比较特殊,它里面不能有:
h1
-h6
、p
、div
标签。
语义化标签
- 概念:用特定的标签,去表达特定的含义。
- 原则:标签默认的效果不重要(后期可以通过css控制),语义最重要。
- 语义化标签的意义是:代码结构清晰可读性强,有利于SEO,方便设备解析。
块级元素与行内元素
- 块级元素:独占一行。(排版标签都是块级元素)。
- 行内元素:不占一行。
文本标签
- 用于包裹:词汇、短语等等。
- 通常写在排版标签里。
- 排版标签更宏观(一段文字),文本标签更微观(词汇、短语)。
- 文本标签通常都是行内元素。
不常用的文本标签
- 这些不常用的标签,编码时不用过于纠结,酌情而定。
- 下面举例的不常用标签中
blockquote
与address
是块级元素,其他的文本标签都是行内元素。
- 有些语义感不强的标签,一般很少用,例如:small、b、u、q、blokquote。
- HTML标签太多了,记住重要的,语义感强的标签即可,例如:
h1
-h6
、p
、div
、strong
、span
。
图片标签
基本使用
- 标签:
img
- 标签语义:图片
属性 | 作用 |
src | 图片路径(地址),图片的具体位置 |
alt | 图片描述 |
width | 图片宽度(单位:像素)例如:200px或200 |
height | 图片高度(单位:像素)例如:200px或200 |
- 尽量不要同时修改图片的宽和高,可能会造成比例失调。
- 暂时认为
img
是行内元素。(css后面会学到它具体属于什么元素)。
- alt的属性作用:
- 浏览器可以通过alt得知图片内容(主要作用)
- 但图片无法显示时,浏览器会显示
alt
属性值来告知图片的大概内容 - 盲人阅读器会朗读alt属性的值
图片相对路径和绝对路径
./ | 同级 | 引入【怪兽.jpg】:<ing src=”./怪兽。jpg”> |
/ | 下一级 | 引入【喜羊羊.jpg】:<img src=”./a/喜羊羊.jpg”> |
../ | 上一集 | 引入【奥特曼.jpg】:<ing src=”../奥特曼.jpg”> |
- 相对路径注意事项:
- 相对路径的
./
可以省略不写。 - 相对路径依赖的是当前位置,后期若调整了文件位置,那么文件中的路径也要修改。
- 上面说完相对路径,下面来看看绝对路径吧。
- 绝对路径以根位置作为参考点,去建立路径。
- 绝对路径分为两种,一种是磁盘路径,另一种是网络路径。
- 本地绝对路径:
E:/a/b/c/奥特曼.jpg
(磁盘路径)(很少使用)。 - 网络绝对路径:
http://www.atguigu.com/images/index_new/logo.png
。 - 使用本地绝对路径,一旦更换设备,路径处理起来就比较麻烦,所以很少使用。
- 使用网络绝对路径,确实方便,但要注意的是若服务器开启了防盗链就会造成图片引入失败。
常见图片格式
图片的格式非常多,下面介绍的这些只是常见的,我们前端人员经常接触到的。
jpg
格式- 概述:扩展名为
.jpg
或者.jpeg
,是一种有损的压缩格式(把肉眼看不出的细节抛弃了)。 - 主要特点:支持的颜色丰富、占用空间较小,不支持透明背景,不支持动图。
- 使用场景:对图片细节没有极高要求的场景,例如:网站的产品宣传图等(该格式网页中很常见)。
png
格式- 概述:扩展名为
.png
,是一种无损的压缩格式,能够更高质量的保存图片。 - 主要特点:支持的颜色丰富、占用空间略大、 、不支持动态图。
- 使用场景:想让图片有透明背景,想要高质量的呈现图片,例如:公司logo图、重要的配图等。
bmp
格式- 概述:扩展名为
.bmp
,不进行压缩的一种格式,在最大程度上保留图片更多的细节。 - 主要特点:支持的颜色丰富,保留的细节更多,占用空间极大,不支持透明背景,不支持动态图。
- 使用场景:对图片细节要求极高的场景,例如:一些大型游戏中的图片。(网页中很少使用)
gif
格式- 概述:扩展名为
.gif
,仅支持256种颜色,色彩呈现不是很完整。 - 主要特点:支持的颜色较少,支持简单透明背景,支持动态图。
- 使用场景:网页中的动态图片。
webp
格式- 概述:扩展名为
.webp
,谷歌推出的一种格式,专门用来在网页中呈现图片。 - 主要特点:具备上述几种格式的优点,但兼容性不太好,一旦使用务必要解决兼容性问题。
- 使用场景:网页中的各种图片。
base64
格式- 本质:一串特殊的文本,要通过浏览器打开,传统看图应用通常无法打开。
- 原理:把图片进行
bsse64
编码,形成一串文本。 - 如何生产:借助一些工具或网站。
- 如何使用:直接作为
img
标签的src
属性的值即可,并且不受文件位置的影响。 - 使用场景:一些较小的图片,或者需要和网页一起加载的图片。
超链接
- 标签:a
- 标签语义:超链接
- 主要作用:从当前页面进行跳转。
属性 | 作用 |
href | 要跳转的具体位置 |
target | 跳转时如何打开页面,通常值如下: _self :在本页签中打开。_blank :在新页签中打开。 |
- 跳转页面举例子:
- 注意点:
- 代码中的多个空格,多个回车,都会被浏览器解析成一个空格。
- 虽然
a
是行内元素,但a元素可以包裹除它自身外的任何元素。
跳转到文件
- 若浏览器无法打开文件,则会引导用户下载。
- 也可以通过通过
download
属性触发强制下载,属性值既为下载文件的名称。
跳转到锚点
设置锚点
- 锚点是网页中的一个标记点。
- 设置锚点有两种方式:
- 设置锚点需要注意:
- 具有href属性的a标签是超链接,具有
name
属性的a
标签是锚点。 name
和id
都是区分大小写的,且id
最好别是数字开头。
跳转锚点
唤起指定应用
- 通过a标签,可以唤起设备应用程序。
超文本的真正含义
- 超文本:是一种组织信息的方式,通过超链接将不同空间的文字、图片等各种信息组织在一起,能从当前阅读的内容,跳转到超链接所指向的内容(页面、文件、锚点、应用)。
列表
有序列表:ol
- 概念:有顺序或侧重顺序的列表。
无序列表:ul
- 概念:无顺序或不侧重顺序的列表。
列表嵌套
- 概念:列表中的某个项内容,又包含一个列表(注意:嵌套时务必吧结构写完整)
- 注意:
li
标签组好写在ul
或ol
中,不要单独使用。
自定义列表:dl
- 概念:所谓的自定义列表,就是一个包含术语名称以及术语描述的列表。
- 一个
dl
就是一个自定义列表,一个dt
就是通过术语名称,一个dd
就是术语描述(可以有多个)
表格
基本结构
- 一个完整的表格由:表格标题、表格头部、表格主体、表格脚注,四部分组成。
- 表格涉及到的标签:
table
:表格caption
:表格标题thead
:表格头部tbody
:表格主体tfoot
:表格脚注tr
:每一行th
、td
:每个单元格(备注:表格头部中用th
,表格主体和脚注用:td
)- 表格:
teble
(双标签) width
:设置表格宽度height
:设置表格最小高度,表格最终高度可能比设置的值大。border
:设置表格边框宽度cellspacing
:设置单元格之间的间距。- 表格头部:
thead
(双标签) height
:设置表格头部高度。align
:设置单元格的水平对齐方式,可选值如下:left
:左对齐center
:中间对齐right
:右对齐- valign; 设置单元格的垂直对齐方式,可选值如下:
top
:顶部对齐middle
:中间对齐bottom
:底部对齐- 表格主体:
tbody
(双标签) - 常用属性与
thead
相同 - 行:
tr
(双标签) - 常用属性与
thead
相同 - 表格脚注:
tfoot
(双标签) - 常用属性与
thead
相同 - 普通单元格:
td
(双标签) width
:设置单元格的宽度,同列所有单元格都受影响heigth
:设置单元格的高度,同列所有单元格都受影响align
:设置单元格的水平对齐方式valign
:设置单元格的垂直对齐方式rowspan
:指定要跨的行数colspan
:指定要跨的列数- 表头单元格:
th
(双标签) - 常用属性与
td
相同 - <table>元素的border属性可以控制表格边框,但border值的大小,并不控制单元格边框的宽度,只能控制表格最外侧的宽度,这个问题要靠后期CSS控制解决。
- 给某个th或td设置了宽度之后,它们所在的那一列的宽度就确定了。
- 给某个th或td设置了高度之后,它们所在的那一行的高度就确定了。
常用属性
注意:
跨行与跨列
- 跨行:rowspan“需要跨的行数”
- rowspan是td标签的属性
- 跨列:colspan“需要跨的列数”
- colspan是td标签的属性
常用标签补充
标签名 | 标签含义 | 单/双 标签 |
br | 换行 | 单 |
hr | 分隔 | 单 |
pre | 按原文显示(一般用于在页面中嵌入大段代码) | 双 |
注意:
- 不要在<br>来增加文本之间的行间隔,应使后面即将学到的 CSS margin属性。
- <hr>的语义是分隔,如果不想要语义,只是想画一条水平线,那么应当使用CSS完成。
表单
基本结构
标签:
form
标签语义:表单
常用属性:
action
:用于指定表单的提交地址(需要于后端人员沟通后确定)
target
:用于控制表单提交后,如何打开页面,常用值如下:_self
:在本窗口打开_blank
:在新窗口打开
- method:用于控制表单的提交方式,暂时只需了解
标签:
input
标签语义:输入框
常用属性:
type
:设置输入框的类型,目前用到的值是text,表示普通文本
name
:用于指定提交数据的名字(需要与后端人员沟通后确定)
标签:
button
标签语义:按钮
常用属性:
表单_文本框与密码框
常用的表单控件
- 文本输入框
name
属性:数据的名称value
属性:输入框的默认输入值maxlength
属性:输入框最大可输入长度
常用属性如下:
- 密码输入框
name
属性:数据名称value
属性:输入框的默认输入值(一般不用,无意义)maxlength
属性:输入框最大可输入长度
常用属性如下:
- 单选框
name
属性:数据的名称,注意:想要单选效果,多个radio
的name
属性值保持一致value
属性:提交数据值checked
属性:让该当单选按钮默认选中
常用属性如下:
- 复选框
name
属性:数据的名称value
属性:提交数据值checked
属性:让该复选框默认选中
常用属性如下:
- 隐藏域
- 隐藏域需要把
input
的type
属性填写为hedden
name
属性:指定数据的名称value
属性:指定的真正提交的数据
作用:用户不可见的一个输入区域,作用是:提交表单的时候,携带一些固定的数据。
常用的属性如下:
- 提交按钮
button
标签type
属性的默认值是submit
(默认提交)button
不要指定name
属性input
标签编写的按钮,使用value
属性指定按钮文字
注意:
- 重置按钮
button
不要指定name
属性input
标签编写的按钮,使用value
属性指定按钮的文字
注意:
- 普通按钮
- 不同按钮的
type
值为button
,若不写type
值则默认值是submit
会引起表单的提交
注意:
- 文本域
rows
属性:指定默认显示的行数,会影响文本域的高度cols
属性:指定默认显示的列数,会影响文本域的宽度- 不能编写type属性,其他属性,与普通文本输入框一致
常用属性如下:
- 下拉框
name
属性:指定数据的名称option
标签设置value
属性,如果没有value
属性,提交的数据是option
中间的文字;如果设置了value
属性,提交的数据就是value
的值(建议设置value
属性)option
标签设置了selected
属性,表示默认选中
常用的属性:
注意事项:
- 禁用表单控件
作用:给表单控件的标签设置
disabled
既可禁用表单控件使用访问:
input
、textarea
、button
、select
、option
都可以设置disabled
属性label
标签- 第一种是让
label
标签的for
属性的值等于表单控件的id - 第二种是把表单控件套在
label
标签里面
作用:
label
标签可与表单控件相关联,关联之后点击文字,与只对应的表控件就会获取焦点两种与label关联方式如下:
fieldset
与legend
的使用
作用:
fieldset
可以为表单控件分组、legend
标签是分组的标签- 框架标签
- name:框架名字,可以与target属性配合
- width:框架的宽度
- height:框架的高度
- frameborder:是否显示边框,值:0或1
- 在页面中嵌入广告
- 与超链接或表单的target配合,展示不同的内容
- 属性:
id
- 属性:
class
- 属性:
style
- 属性:
dir
- 属性:
title
- 属性:
lang
- CSS的全称为:层叠样式表(Cascading Style Sheets)
- CSS也是一种标记语言,用于给HTML结果设置样式,例如:文字大小、颜色、元素宽高等等。
- 简单理解:CSS可以美化HTML,让HTML更漂亮
- 核心思想:HTML搭建结构,CSS添加样式,实现了结构与样式的分离
style
属性的值不能随便写,写要符合CSS语法规范,是名:值;
的形式- 行内样式表,只能控制当前标签的样式,对其他标签无效
- 书写繁琐、样式不能复用、并且没有体现:出结构与样式分离的思想,不推荐大量使用,只有对当前元素添加简单样式时才偶尔使用。
<style>
标签理论上可以放在HTML文档的任何地方,但一般放在<head>
标签中- 这种写法:样式可以复用,代码结构也更清晰
- 并没有实现:结构与样式完全分离
- 多个HTML页面无法复用样式
- 步骤1
- 步骤2
<link>
标签要写在<head>
标签中<link>
标签属性说明:rel
:(relation
:关系)说明引入的文档与当前文档之间的关系href
:引入的文档来自于哪里- 外部样式的优势:样式可以复用,结构清晰,可触发浏览器的缓存机制,提高访问速度,实现了机构与样式的完全分离。
- 实际开发中,几乎都使用外部样式,这是最推荐的使用方式
- 内部样式、外部样式,这二者的优先级相同,且:后面的会覆盖前面的(简记:后来者居上)
- 同一个样式表中,优先级也和编写顺序有关,且:后面的会覆盖前面的(简记:后来者居上)
- 选择器:找到添加样式的元素
- 声明块:设置具体的样式(声明块是由一个或多个声明组成的),声明的格式为:
属性名:属性值;
- 最后一个声明后的分号理论上可以省略,但最好还是写上
- 选择器与声明块之间,属性名与属性值之间,均有一个空格,理论上能省略,但最好还是写上
- 展开风格——开发是推荐,便于维护和调试
- 紧凑风格——项目上线是推荐,可减少文件体积
- 通配选择器
- 元素选择器
- 类选择器
id
选择器- 元素的
class
属性值不带.,但CSS的类选择器要带.
class
值,是我们自定义的,按照标准:不要使用纯数字、不要使用中文、尽量使用英文与数字的组合,若由多个单词组成,使用-
做连接,例如:left-menu
,且命名要有意义,做到“见名知意”- 一个元素不能写多个
class
属性,下面是错误示例: - 一个元素的
class
属性,能写多个值,要用空格隔开,例如: - id属性值:尽量由字母、数字、下划线(_)、短杠(-)组成,最好以字母开头,不要包含空格、区分大小写
- 一个元素只能拥有一个id属性,多个元素的id属性值不能相同
- 一个元素可以同时拥有id和class属性
标签:iframe
标签语义:框架(功能:在网页中嵌入其他文件)
属性:
应用场景:
常见字符实体
符号 | 描述 | 实体名称 | 实体编号 |
空格 | |   | |
< | 小于号 | < | < |
> | 大于号 | > | > |
& | 和号 | & | & |
“ | 引号 | " | " |
‘ | 反引号 | ´ | ´ |
¥ | 元 | ¥ | ¥ |
© | 版权 | © | © |
® | 注册商标 | ® | ® |
™ | 商标 | ™ | ™ |
× | 乘号 | × | × |
÷ | 除号 | ÷ | ÷ |
完整实体列表请参考:HTML Standard(whatwg.org)
HTML全局属性
含义:给标签指定唯一标识,注意:id不能在同一个文件中重复
作用:可以让
label
标签与表单控件相关联;也可以与CSS,JavaScript配合使用。注意:不能在一下HTML元素中使用:
<head>
、<html>
、<meta>
、<script>
、<style>
、<title>
作用:给标签指定类名,随后通过CSS就可以给标签设置样式
作用:给标签设置CSS样式
作用:内容的方向,值:
ltr
、rtl
注意:不能在一下HTML元素中使用:
<head>
、<html>
、<meta>
、<script>
、<style>
、<title>
作用:给标签设置一个文字提示,一般超链接和图片用得比较多
作用:给标签指定语言
注意:不能在一下HTML元素中使用:
<head>
、<html>
、<meta>
、<script>
、<style>
、<title>
完整的全局列表,请参考 :全局属性-HTML(超文本标记语言)| MDN
meta元信息
CSS简介
CSS的编写位置
行内样式
语法:写在标签
style
属性中(又称:内联样式)注意:
存在的问题:
内部样式
语法:写在
html
页面内部,将所有的CSS代码取出来,单独放在<style>
标签中注意点:
存在的问题:
外部样式
语法:写一个单独的
.css
文件,随后在HTML文件中引入使用注意点:
样式表的优先级
优先级规则:行内样式>内部样式=外部样式
分类 | 优点 | 缺点 | 使用频率 | 作用范围 |
行内样式 | 1.优先级最高 | 1.结构与样式未分离 2.代码结构混乱 3.样式不能复用 | 很低 | 当前标签 |
内部样式 | 1.样式可复用 2.代码结构清晰 | 1.结构与样式未彻底分离 2.样式不能多页面复用 | 一般 | 当前页面 |
外部样式 | 1.样式可多页面复用 2.代码结构清晰 3.可触发浏览器的缓存机制 4.结构与样式彻底分离 | 1.需要引入才能使用 | 最高 | 多个页面 |
CSS语法规范
CSS语法由两部分构成:
注意:
CSS内注释的写法:
注释符号是
/* *
/
,*
号与文本之间均要一个空格(非强制性)。CSS代码风格
注意:
项目上线时,我们会通过工具(webpack)将【展开风格】的代码,变成【紧凑风格】,这样可以减少文件体积,节约网络流量,同时也能让用户打开网页时速度更快
CSS基本选择器
基本选择器包括:
通配选择器
作用:可以选中所有的
HTML
元素语法:
举例:
注意:目前来看通配选择器貌似有点鸡肋,但后面清除样式时,会对我们有很大帮助
元素选择器
作用:为页面中某种元素统一设置样式
语法:
举例;
注意:元素选择器无法实现差异化设置,例如上面的代码中吗,所有的p元素效果都一样
类选择器
作用:根据元素的
class
值,来选中某些元素语法:
举例:
注意:
ID选择器
作用:根据元素的id属性值,来准确的选中某个元素
语法:
举例:
注意:
基本选择器总结
基本选择器 | 特定 | 用法 |
通配选择器 | 选中所有标签,一般用于清除样式 | * {color:red} |
元素选择器 | 选中所有同种标签,但是不能差异化选择 | h1 {color:red} |
类选择器 | 选中所有特定类名( class 值)的元素——使用频率高 | .say {color:red} |
ID选择器 | 选中特定 id 值的那个元素(唯一的) | #earthy {color:red} |
交集选择器
作用:选中同时符合多个条件的元素
交集有并且的含义(通俗理解:既……又……)的意思,例如:年轻且长得帅
语法:
选择器1选择器2选择器3…选择器n {}
举例:
注意:
- 有标签名,标签名必须写在前面
id
选择器、理论上可以作为交集的条件,但实际应用中几乎不用——因为没有意义
- 交集选择器中不可能出现两个元素选择器,因为一个元素,不可能即是
p
元素又是span
元素
- 用的最多的交集选择器是:元素选择器配合类名选择器,例如:
p.beauty
并集选择器
作用:选中多个选择器对应的元素,又称:分组选择器
所谓并集就是或者的含义(通俗理解:要么……要么……)的意思,例如:给我转10万块钱或者我报警。
语法:
选择器1,选择器2,选择器3,…选择器n {}
多个选择器通过,连接,此处,的含义就是:或。
举例:
注意:
- 并集选择器,一般竖着写(清晰)
- 任何形式的选择器,都可以作为并集选择器的一部分
- 并集选择器,通常用于集体声明,可以缩小样式表体积
HTML元素间的关系
- 父元素:直接包裹某个元素的元素,就是该元素的父元素
- 子元素:被父元素直接包含的元素(简洁:儿子元素)
- 祖先元素:父亲的父亲……,一直往外找,都是祖先(父元素也算是祖先元素的一种)
- 后代元素:儿子的儿子……,一直往里找,都是后代(子元素也算是后代元素的一种)
- 兄弟元素:具有相同父元素的元素,互为兄弟元素
子代选择器
作用:选中指定元素中,符合要求的子元素(儿子元素)
子代选择器又称:子元素选择器、子选择器
语法:
选择器1>选择器2>选择器3>……选择器n {}
(先写父再写子)选择器之间,用>
隔开,>
可以理解为:“xxx的子代”,其实就是儿子的意思;选择器1234…n
,可以是我们之前的任何一种选择器
举例:
注意:
- 子代选择器、最终选择的是子代,不是父级
- 子、孙子、重孙子、重重孙子……统称后代!,子代选择器的子是指儿子。
兄弟选择器
相邻兄弟选择器:
作用:选中指定元素后,符合条件的相邻兄弟元素
所谓的相邻,就是紧挨着他的下一个,简记:睡我下铺的兄弟
语法:
选择器1+选择器2 {}
实例:
通用兄弟选择器:
作用:选中指定元素后,符合条件的所有兄弟元素(简记:睡在我下铺的所有兄弟)
语法:
选择器1~选择器2 {}
实例:
注意:两种兄弟选择器,选择的是下面的兄弟
属性选择器
作用:选中属性值符合一定要求的元素
语法:
- [属性名]选中属性值符合一定要求的元素
- [属性名=“值”]选中包含某个属性,且属性值等于指定值的元素
- [属性名^=”值”]选中包含某个属性,且属性值以指定的值开头的元素
- [属性名$=“值”]选中包含某个属性,且属性值以指定的值结尾的元素
- [属性名*=“值”]选中包含某个属性,属性值包含指定值的元素
举例:
伪类选择器
作用:选中特殊状态的元素
如何理解“伪”?假的,不是真的。伪类它像类但不是类,是元素的一种特殊状态。
例子:
常用的伪类选择器
动态伪类:
- :link超链接未被访问的状态
- :visited超链接访问过的状态
- :hover鼠标悬停在元素上的状态
- :active元素激活的状态 (按下鼠标不松开的状态)
注意:要遵循LVHA的顺序,既:link、visited、hover、active
- :focus获取焦点的元素(表单类元素才能使用:focus伪类)
注意:当用户点击元素、触摸元素、或通过键盘的“tab”键等方式,选择元素时(输入状态),就是获得焦点
常用的伪类选择器
:first-child
所以兄弟元素中的第一个
:last-child
所有兄弟元素的最后一个
:nth-child(n)
所有兄弟元素的第n个
:first-of-type
所有同类型兄弟元素中的第一个
:last-of-type
所有同类型兄弟元素中的最后一个
:nth-of-type(n)
所有同类型兄弟元素中的第n个
关于n的值:
0
或不写:什么都选不中(几乎不用)
n
:选中所有子元素(几乎不用)
1~
正无穷的整数:选中对应序号的子元素
2n
或even
:选中序号为偶数的子元素
2n+1
或odd
:选中序号为奇数的子元素
-n+3
:选中的是前3个
不常用的伪类选择器
:nth-last-child(n)
所有兄弟元素中的倒数第n个
:nth-last-of-type(n)
所有同类型兄弟元素中的倒数第n个
:only-child
选中没有兄弟的元素
:only-of-type
选择没有同类型兄弟的元素
:root
根元素
:empty
内容为空元素(空格也算内容)
否定伪类
:not(选择器)
排除满足括号中条件的元素UI伪类
:checked
被选中的复选框或单选按钮
:enable
可用的表单元素(没有disabled
属性的)
:disabled
不可用的表单元素(有disabled
属性才可用)
目标伪类
:target
选中锚点指向的元素
语言伪类
:lang()
根据指定的语言选择元素(本质是看lang
属性的值)
伪元素选择器
作用:选中元素中的一些特殊位置
常用伪元素:
::first-letter
选中元素中的第一个文字
::first-line
选中元素中的第一行文字
::selection
选中被鼠标选中的内容
::placeholder
选中输入框的提示文字
::before
在元素最开始的位置,创建一个字元素(必须用content
属性指定内容)
::after
在元素最后的位置,创建一个子元素(必须用content
属性指定内容 )
选择器的优先级
- 通过不同的选择器,选中相同的元素,并且为相同的样式名设置不同的值时,就发了样式冲突,此时就需要看优先级了
- 简单描述优先级:行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器
权重详细计算
- 计算方式:每个选择器都可以计算出一组权重,格式为:(a,b,c)
- a:IP选择器的个数
- b:类、伪类、属性选择器的个数
- c:元素、伪元素选择器的个数
例如:
选择器 | 权重 |
ul>li | (0,0,2) |
div ul>li p a span | (0,0,6) |
#atguigu .slogan | (1,1,0) |
#atguigu .slogan a | (1,1,1) |
#atguigu .slogan a:hover | (1,2,1) |
- 比较规则:按照从左到右的顺序,依次比较大小,当前位胜出后,后面的不再对比,例如:
- (1,0,0) > (0,2,2)
- (1,1,0) > (1,0,3)
- (1,1,3) > (1,1,2)
- 特殊规则:
- 行内样式权重大于所有选择器
!important
的权重大于行内样式,大于所有选择器,权重最高
CSS三大特征
- 层叠性
- 概念:如果发生了样式冲突,那就会根据一定的规则(选择器优先级),进行样式的层叠(覆盖)
- 冲突是指元素的同一个样式名,被设置了不同的值,这就是冲突
- 继承性
- 概念:元素会自动拥有其父元素或其祖先元素上所设置的某些样式
- 规则:优先继承离得近的
- 常见的可继承属性:
text-??, font-??, line-??, color……
(参考MDN网站,可查询属性是否可被继承)
- 优先级
- 简单描述优先级:
!important
> 行内样式 > ID选择器 > 类选择器 > 元素选择器 > 通配选择器(*) >继承的样式
颜色的表示
表示方式一:颜色名
- 编写的方式:直接使用颜色对应的英文单词,编写比较简单,例如:
- 红色:
red
- 绿色:
green
- 蓝色:
blue
- 紫色:
purple
- 橙色:
orange
- 灰色:
gray
注意:颜色名这种方式,表达的颜色比较单一,所以用的并不多。具体颜色可以仓库MDN官方文档:
https://developer.mozille.org/en-US/docs/Web/CSS/named-color
表示方式二:rgb或rgba
- 编写方式:使用红、黄、蓝这三种光的三原色进行组合
r
表示红色g
表示绿色b
表示蓝色a
表示透明度
举例:
规律:
- 若三种颜色值相同,呈现的是灰色,值越大,灰色越浅
- rgb(0, 0, 0)是黑色,rgb(255, 255, 255)是白色
- 对于rgba来说,前三位的rgb形式要保持一致,要么都是0-255的数字,要么都是百分比
表示方式三:HEX或HEXA(十六进制的RBG)
- HEX的原理同与RGB一样,依然是通过:红、绿。蓝色进行组合,只不过要用6个数字,分成3组来表达
- 每一位数字的取值范围是:0~f,即:(0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f)
- 所以每一种光的最小值是:00,最大值是:ff
格式:#rrggbb
注意:IE浏览器不支持HEXA,但支持HEX
表达方式四:HSL或HSLA
HSL
是通过:色相、饱和度、亮度,来表示一个颜色的,格式为:hsl(色相,饱和度,亮度)
- 色相:取值范围是
0-360
度,具体度数对应的颜色如下图: - 饱和度:取值范围是
0%-100%
(向色相中对应颜色中添加灰色,0%
全灰,100%没有灰) - 亮度:取值范围是
0%-100%
(0%
亮度没了,所以是黑色;100%
亮度太强,所以就是白色了)
HSLA
其实就是在HSL
的基础上,添加了透明度
CSS字体属性
字体大小
- 属性名:
font-size
- 语法:
- 注意点:
- Chrome浏览器支持最小文字为12px,默认的文字大小为16px,并且0px自动消失
- 不同浏览器默认的字体大小可能不一致,所以最好给一个明确的值,不要用默认大小
- 通常以给body设置font-size属性,这样body中的其他元素就都可以继承了
- 借助控制台看样式
字体族
属性名:
font-family
语法:
注意:
- 使用字体的英文名字兼容性会更好,具体的英文名可以自行查询,或在电脑的设置去寻找
- 如果字体包含空格,必须使用引号包裹起来
- 可以设置多个字体,按照从左到右的顺序逐个查找,找到就用,没有找到就使用后面的,且通常在最后写上
serif
(衬线字体)或sans-serif
(非衬线字体)
- windows系统中,默认的字体就是微软雅黑(可以在电脑C盘搜索Fonts关键字查看已下载的字体)
字体风格
属性名:
font-style
常用值:
normal
:正常(默认值)
italic
:斜体(使用字体自带的斜体效果)(现实斜体时,更推荐使用tialic
)
oblique
:斜体(强制倾斜产生的斜体效果)
语法:
字体粗细
属性名:
font-weight
常用值:
- 关键词
lighter
:细normal
:正常bold
:粗bolder
:很粗(多数字体不支持)
- 数值
100-1000
且无单位,数值越大,字体越粗(或一样粗,具体得看字体设计的精确程度)100-300
等同于lighter
,400-500
等同于normal
,600
以上等同于bold
语法举例:
字体复合写法
属性名:
font
,可以把上述字体样式合并成一个属性编写规则:
- 字体大小,字体族必须都写上
- 字体族必须是最后一位,字体大小必须是倒数倒数第二位
- 各个属性间用空格隔开
建议:实际开发中更推荐复合写法,但这也不是绝对的,比如只想设置字体大小,那就直接用
font-size
属性文本颜色
属性名:
color
可选值:
- 颜色名
rgb
或rgba
HEX
或HEXA
(十六进制)
HSL
或HSLA
开发中常用的是:rgb
/rgba
或HEX
/HEXA
(十六进制)
举例:
文本间距
- 字母间距:letter-spacing
- 单词间距:word-spacing(通过空格识别词)
- 属性值为像素(px),正值让间距增大,负值让间距边小
文本修饰
属性名:
text-decoration
可选值:
none
:无装饰线(常用)
underline
:下划线(常用)
overline
:上划线
line
-through
;删除线
可以搭配如下值使用:
dotted
:虚线
wavy
:波浪线
- 也可以指定颜色
举例:
文本缩进
属性名:text-indent
属性值:CSS中的长度单位,例如:px(目前只学到px这个单位,后面会学习CSS中一些新的长度单位)
举例:
文本对齐_水平
属性名:text-align
常用值:
- left:左对齐(默认值)
- right:右对齐
- center:居中对齐
举例:
行高
属性名:line-height
可选值:
- normal:由浏览器根据文字大小决定的一个默认值
- 像素(px)
- 数字:参考自身font-size的倍数(很常用)
- 百分比:参考自身font-size的百分比
举例:
行高注意事项:
line-height
过小文字会产生重叠,且最小值是0
,不能为负数
line-height
是可以继承的,且为了能更好的呈现文字,最好写数值
line-height
和height
的关系是:- 设置了
height
,那么高度就是height
的值 - 不设置
height
的时候,会根据line-height
计算高度
应用场景:
- 对于多行文字:控制行与行之间的距离
- 对于单行文字:让
height
等于line-height
,可以实现文字垂直居中
注意:由于字体设计原因,文字在一行中,并不是绝对垂直居中,若一行中都是文字,不会太影响观感
文本对齐_垂直
- 顶部:无需任何属性,在垂直方向上,默认就是顶部对齐
- 居中:对于单行文字,让height=line-height即可(多行文字后面会讲到)
- 底部:对于单行文字,目前的一个临时的方式:让
line-height=(height×2)-font-size-x
(x是根据字体族动态决定的一个值)
vertical-align
属性名:
vertical-align
作用:用于指定同一行元素之间,或表格单元格内文字的垂直对齐方式
常用值:
baseline
(默认值):使元素的基线与父元素的基线对齐
top
:使元素的顶部与其所在行的顶部对齐
middle
:使元素的中部与父元素的基线加上父元素字母x的一半对齐
bottom
:使元素的底部与其所在行的底部对齐
注意:
vertical-align
不能控制块元素CSS列表属性
列表相关的属性,可以作用在ul、ol、li元素上
- CSS属性名:
list-style-type
none
:不显示前面的标识(很常用)square
:实心方块disc
:圆形decimal
:数字lower-roman
:小写罗马字upper-roman
:大写罗马字lower-alpha
:小写字母upper-alpha
:大写字母
功能:设置列表符号
属性值:
- CSS属性名:
list-style-position
inside
:在li的里面outside
:在li的外面
功能:设置列表符号的位置
属性值:
- CSS属性名:
list-style-image
功能:自定义列表符号
属性值:
url
(图片地址)- CSS属性名:
list-style
功能:复合属性
属性值:没有数量、顺序的要求
CSS表格属性
边框相关属性(其他元素也能用):
- CSS属性名:
border-width
功能:边框宽度
属性值:CSS中可用的长度值
- CSS属性名:
border-color
功能:边框颜色
属性值:CSS中可用的颜色值
- CSS属性名:
border-style
none
默认值solid
实线dashed
虚线dotted
点线double
双实线
功能:边框风格
属性值:
- CSS属性名:
border
功能:边框复合属性
属性值:没有数量、顺序的要求
注意:以上四个边框相关的属性,其他元素也可以用。
表格独有属性
表格独有属性(只有
table
标签才能使用):- CSS属性名:
table-layout
auto
:自动,列宽根据内容计算(默认值)fixed
:固定列宽,平均
功能:设置列宽度
属性值:
- CSS属性名:
broder-spacing
- CSS中可用的长度值
- 生效的前提是单元格边框不能合并
功能:单元格间距
属性值:
- CSS属性名:
border-collapse
collapse
:合并separate
:不合并
功能:合并单元格边框
属性值:
- CSS属性名:
empty-cells
show
:显示,默认hide
:隐藏- 生效的前提是单元格不能合并
功能:隐藏没有内容的单元格
属性值:
- CSS属性名:
caption-side
top
:上面(默认值)bottom
:在表格下面
功能:设置表格标题位置
属性值:
注意:以上五个属性只有表格才能使用,即:
<table>
标签CSS背景属性
- CSS属性名:
background-color
- 符号CSS中颜色规范的值
- 默认背景颜色是
transparent
功能:设置背景颜色
属性值:
- CSS属性名:
background-image
url
(图片的地址)
功能:设置背景图片
属性值:
- CSS属性名:
background-repeat
repeat
:重复,铺满整个元素,默认值repeat-x
:只在水平方向重复repeat
-y:只在垂直方向重复no-repeat
:不重复
功能:设置背景重复方式
属性值:
- CSS属性名:
background-position
- 通过关键字设置位置
- 写两个值,用空格隔开
- 水平:
left
、center
、right
- 垂直:
top
、center
、bottom
- 如果只写一个值,另一个方向的值取
center
- 通过长度指定坐标位置
- 以元素左上角为坐标原点,设置图片左上角的位置
- 两个值,分别是x坐标和y坐标
- 只写一个值 ,会被当做x坐标,y坐标取
center
功能:设置背景图位置
属性值:
- CSS属性名:
background
- 没有数量和顺序要求
功能:复合属性
属性值:
CSS鼠标属性
CSS属性名:
cursor
功能:设置鼠标光标的样式
属性值:
pointer
:小手
move
:移动图标
text
:文字选择器
crosshair
:十字架
wait
:等待
help
:帮助
拓展:自定义鼠标图标,引入文件
CSS盒子模型
CSS长度单位
px
:像素
em
:相对元素font-size
的倍数
rem
:相对根字体大小,html
标签就是根
%
:相对父元素计算
注意:CSS中设置长度,必须加单位,否则样式无效
元素的显示模式
块元素(block)
又称:块级元素
特定:
- 在页面中独占一行,不会与任何元素公用一行,是从上到下排列
- 默认宽度:撑满父元素
- 默认高度:由内容撑开
- 可以通过CSS设置宽高
行内元素(inline)
又称:内联元素
特定:
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左到右排列
- 默认宽度:由内容撑开
- 默认高度:由内容撑开
- 无法通过CSS设置宽高
行内块元素(inline-block)
特定:
- 在页面中不独占一行,一行中不能容纳下的行内元素,会在下一行继续从左往右排列
- 默认宽度:由内容撑开
- 默认高度:由内容撑开
- 可以通过CSS 设置宽高
注意:元素早期只分为:行内元素、块级元素,区分条件也只有一条:“是否独占一行”,如果按照这种分类方式,行内块元素应该算作行内元素
总结各元素的显示模式
块元素(block)
- 主体结构标签:
<html>
、<body>
- 排版标签:
<h1>-<h6>
、<hr>
、<p>
、<pre>
、<div>
- 列表标签:
<ul>
、<ol>
、<li>
、<dl>
、<dt>
、<dd>
- 表格相关标签:
<table>
、<tbody>
、<thead>
、<tfoot>
、<tr>
、<caption>
行内元素(inline)
- 文本标签:
<br>
、<em>
、<trong>
、<sup>
、<sub>
、<del>
、<ins>
<a>
与<label>
行内块元素(inline-block)
- 图片:
<img>
- 单元格:
<td>
、<th>
- 表单控件:
<input>
、<textarea>
、<select>
、<button>
- 框架标签:
<iframe>
修改元素显示模式
通过CSS中的display属性可以修改元素的默认显示模式,常用值如下:
值 | 描述 |
none | 元素会被隐藏 |
block | 元素将作为块级元素显示 |
inline | 元素将作为内联元素显示 |
inline-block | 元素将作为行内块元素显示 |
盒子模型的组成
CSS会把所有的HTML元素都看成一个盒子,所有的样式也都是基于这个盒子
盒子主要由以下四个部分组成:
margin
(外边距):盒子与外界的距离
border
(边框):盒子的边框
padding
(内边距):紧贴内容的补白区域
content
(内容):元素中的文本或后代元素都是它的内容
如下图:
盒子的大小=
content
+左右padding
+左右border
注意:外边距margin不会影响盒子的大小,但会影响盒子的位置
盒子内容区(content)
CSS属性名 | 功能 | 属性值 |
width | 设置内容区域宽度 | 长度 |
max-width | 设置内容区域的最大宽度 | 长度 |
min-width | 设置内容区域的最小宽度 | 长度 |
height | 设置内容区域的高度 | 长度 |
max-height | 设置内容区域的最大高度 | 长度 |
min-height | 设置內容区域的最小高度 | 长度 |
注意:
max-width
、min-width
一般不与width一起使用
max-height
、min-height
一般不与height一起使用
关于默认宽度
- 所谓的默认宽度,就是不设置width属性时,元素所呈现出来的宽度
- 总宽度 = 父的
content
- 自身的左右margin
- 内容区的宽度 = 父的
content
- 自身的左右margin
- 自身的左右border
- 自身的左右padding
盒子内边距(padding)
CSS属性名 | 功能 | 属性值 |
padding-top | 上内边距 | 长度 |
padding-right | 右内边距 | 长度 |
padding-bottom | 下内边距 | 长度 |
padding-left | 左内边距 | 长度 |
padding | 复合属性 | 长度可以设置1-4个值 |
padding复合属性的使用规则:
padding
:10px
;四个方向内边距都是10px
padding
:10px 20px
;上10px
,左右20px
(上下、左右)
padding
:10px 20px 30px
;上10px
,左右20px
,下30px
(上,左右、下)
pedding
:10px 20px 30px 40px
;上10px
,右20px
,下30px
,左40px
(上、右、下、左)
注意:
padding
的值不能为负数
- 行内元素的左右内边距是没问题的,上下内边距不能完美的设置
- 块级元素、行内块元素,四个方向内边距都可以完美设置
盒子边框(border)
CSS属性名:
border-style
功能:边框线风格,复合了四个方向的边框风格
属性值 :
none
:默认值
solid
:实线
dashed
:虚线
dotted
:点线
double
:双实线……
CSS属性名:
border-width
功能:边框线宽度,复合了四个方向的边框宽度
属性值:长度,默认
3px
CSS属性名:
border-color
功能:边框线颜色,复合了四个方向的边框颜色
属性值:颜色,默认黑色
CSS属性名:
border
功能:复合属性
属性值:值没有顺序和数量要求
CSS属性名:
border-left
border-left-style
border-left-width
border-letf-color
border-ridht
border-ridht-style
border-ridht-width
border-ridht-color
border-top
border-top-style
border-top-width
border-top-color
border-bottom
border-bottom-style
border-bottom-width
border-bottom-color
功能:分别设置各个方向的边框
属性值:同上
盒子外边距(margin)
CSS属性名 | 功能 | 属性值 |
margin-left | 左外边距 | CSS中的长度值 |
margin-right | 右外边距 | CSS中的长度值 |
margin-top | 上外边距 | CSS中的长度值 |
margin-bottom | 下外边距 | CSS中的长度值 |
margin | 复合属性,可以写1-4个值,规律同 padding (顺时针) | CSS中的长度值 |
margin注意事项
- 子元素的margin,是参考父元素的content计算的(因为是父亲的content中承装着子元素)
- 上margin、左margin:影响自己的位置;下margin、右margin:影响后面兄弟元素的位置
- 块级元素、行内块元素,均可以完美的设置四个方向的margin;但行内元素,左右margin可以完美设置,上下margin设置无效
- margin的值也可以是auto,如果给一个块级元素设置左右margin都为auto,该块级元素会在父元素中水平居中
- margin的值可以是负值
margin塌陷问题
margin
塌陷:第一个元素的上margin
会作用在父元素上,最后一个子元素的下margin
会作用在父元素上解决
margin
塌陷方案:- 给父元素设置不为
0
的padding
- 给父元素设置宽度不为
0
的border
- 给父元素设置CSS样式
overflow:hidden
margin合并问题
margin合并:上面兄弟元素的下外边距和下面兄弟上外边距会合并,取一个最大的值,而不是相加
解决margin合并问题:无需解决,布局的时候上下的兄弟元素,只给一个设置上下外边距就可以了
处理内容溢出
CSS属性名 | 功能 | 属性值 |
overflow | 溢出内容的处理方式 | visible :显示,默认值
hidden :隐藏
scroll :显示滚动条,不论内容是否溢出
auto :自动显示滚动条,内容不溢出不显示 |
overflow-x | 水平方向溢出内容的处理方式 | 同 overflow |
overflow-y | 垂直方向溢出内容的处理方式 | 同 overflow |
注意:
overflow-x
、overflow-y
不能一个是hidden
,一个是visible
,目前是实验性属性,不建议使用
overflow
常用的值是hidden
和auto
,除了能处理溢出的显示方式,还可以解决很多疑难杂症
隐藏元素的方式
visibility
属性:visibility
属性默认值是show
,如果设置为hidden
,元素会隐藏(元素看不见了,还占有原来的位置,元素的大小依然保持)
display
属性:设置display:none
,就可以让元素隐藏(彻底地隐藏,不但看不见,也不占用任何位置,没有大小宽高)
样式的继承
有些样式会继承,元素如果本身设置了某个样式,就使用本身设置的样式;但如果本身没有设置某个样式,会从父元素一级一级继承(优先继承离得近的祖先元素)
会继承的CSS属性:字体属性、文本属性(除了
vertical-align
)、文字颜色等不会继承的CSS属性:边框、背景、内边距、外边距、宽高、溢出方式等
规律:能继承的属性,都是不影响布局的(和盒子模型没关系的)
默认样式
元素一般都有些默认的样式,例如:
<a>
元素:下划线、文字颜色、鼠标小手
<h1>-<h6>
元素:文字加粗、文字大小、上下外边距
<p>
元素:上下外边距
<ul>
、ol
元素:内外边距
body
元素:8px
外边距(4个方向)
优先级:元素的默认样式 > 继承的样式,所以如果要重置元素的默认样式,选择器一定要直接选择器到该元素
布局小技巧
- 行内元素、行内块元素,可以被父元素当做文本处理
- 即:可以像处理文本对齐一样,去处理:行内、行内块在父元素中的对齐
- 例如:
text-aling
、line-height
、text-indent
等
- 如何让子元素,在父元素中水平居中:
- 若子元素为块元素,给父元素加上:
margin:0 auto
; - 若子元素为行内元素、行内块元素,给父元素加上:
text-align:center
- 如何让子元素,在父元素中垂直居中:
- 若子元素为块元素,给子元素加上:
margin-top
,值为:(父元素content
- 子元素盒子总高)/ 2 - 若子元素为行内元素、行内块元素:
- 让父元素的
height
=line-height
,每个子元素都加上:vertical-align:middle;
- 若想绝对垂直居中,父元素
font-size
设置为0
元素之间的空白问题
产生原因:行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符
解决方案:
- 方案一:去掉换行和空格(不推荐)
- 方案二:给父元素设置
font-size:0
,再给需要显示文字的元素,单独设置字体大小(推荐)
行内块的幽灵空白问题
产生原因 :行内块元素与文本的基线对齐,而文本的基线与文本属性底端之间是有一定距离的
解决方案:
- 方案一:给行行内块设置
vertical
,值不为baseline
即可,设置为middel
、bottom
、top
均可
- 方案二:若父元素中只有一张图片,设置图片为
display:block
- 方案三:给父元素设置
font-size:0
;如果该行内块内部还有文本,则需要单独设置font-size
浮动
浮动的简介
在最初,浮动是用来实现文字环绕图片效果的 ,现在浮动是主流的页面部件方式之一
元素浮动后的特点
- 脱离文档流
- 不管浮动前是什么元素,浮动后:默认宽与高都是被内容撑开(尽可能小),而且可以设置宽高
- 不会独占一行,可以与其他元素共用一行
- 不会
margin
合并,也不会margin
塌陷,能够完美的设置四个方向的margin
和padding
- 不会像行内块一样被当做文本处理(没有行内块的空白问题)
浮动后的影响
- 对兄弟元素的影响:后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟元素没影响
- 对父元素的影响:不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元素
解决浮动后产生的影响(清除浮动)
- 方案一:给父元素指定高度
- 方案二:给父元素也设置浮动,带来其他影响
- 方案三:给父元素设置
overflow:hidden
- 方案四:在所有浮动元素的最后,添加一个块级元素,并给该块级元素设置
clear:both
- 方案五:给浮动元素的父元素,设置为伪元素,通过伪元素清除浮动,原理与方案四相同。(推荐使用)举例代码如下:
布局中的一个原则:设置浮动的时候,兄弟元素要么全部浮动,要么全都不浮动
定位
相对定位
- 设置相对定位
- 给元素设置
position:relative
即可实现相对定位 - 可以使用
left
、right
、top
、bottom
四个属性调整位置
- 相对定位的参考点
- 相对自己原来的位置
- 相对定位的特点
- 不会脱离文档流,元素位置的变化只是视觉效果上的变化,不会对其他元素产生任何影响
- 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的
- 默认规则:定位的元素会盖在普通元素之上
- 都发生定位的两个元素,后写的元素会盖在先写的元素之上
left
不能和right
一起设置,top
和bottom
不能一起设置- 相对定位的元素,也能继续浮动,但不推荐这样做
- 相对行为的元素,也能通过
margin
调整位置,但不推荐这样做
注意:绝大多数情况下,相对定位,会与绝对定位配合使用
绝对定位
- 设置绝对定位
- 给元素设置
position:absolute
即可实现绝对定位 - 可以使用
left
、right
、top
、bottom
四个属性调整位置
- 绝对定位的参考点
- 参考它的包含块
- 什么是包含块?
- 对于没有脱离文档流的元素:包含块就是父元素
- 对于脱离文档流的元素:包含块是第一个拥有定位属性的祖先元素(如果所有祖先都没定位,那包含块就是整个页面)
- 绝对定位的特点
- 脱离文档流,会对后面的兄弟元素、父元素影响
left
不能和right
一起设置(left
生效),top
和bottom
不能一起设置(top
生效)- 绝对定位、浮动不能同时设置,如果同时设置,浮动失效,以定位为主
- 绝对定位的元素,也能通过
margin
调整位置,但不推荐这样做;还有如果设置了定位top
值那就不能使用margin-top
值,四个方向都同理 - 无论是什么元素就(行内、行内块、块级)设置为绝对定位之后,都变成了定位元素
- 定位元素:默认宽高都被内容所撑开,且能自由设置宽高
固定定位
- 设置固定定位
- 给元素设置
position:fixed
即可实现固定定位 - 可以使用
left
、right
、top
、bottom
四个属性调整位置
- 固定定位的参考点
- 参考它的视口
- 对于浏览器来说,视口就是我们看到网页的那扇窗户
- 固定定位元素的特点
- 脱离文档流,会对后面的兄弟元素、父元素有影响
left
不能和right
一起设置,top
和bottom
不能一起设置- 固定定位和浮动不能同时设置,如果同时设置,浮动失效,以固定定位为主
- 固定定位的元素,也能通过
margin
调整位置,但不推荐就这样做 - 无论是什么元素(行内、行内块、块级)设置为固定定位后,都变成了定位元素
粘性定位
- 设置粘性定位
- 给元素设置
position:sticky
即可实现粘性定位 - 可以使用
left
、right
、top
、bottom
四个属性调整位置,不过最常用的是top值
- 粘性定位的参考点
- 离他最近的一个拥有“滚动机制”的祖先元素,即便这个祖先不是最近的真实可滚动祖先
- 粘性定位元素的特点
- 不会脱离文档流,它是一种专门用于窗口滚动时的新的定位方式
- 最常用的值是
top
值 - 粘性定位和浮动可以同时设置,但不推荐这样做
- 粘性定位的元素,也能通过
margin
调整位置,但不推荐这样做
注意:粘性定位和相对定位的特点基本一致,不同的是:粘性定位可以在元素到达某个位置时将其固定
定位层级
- 定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的
- 如果位置发生重叠,默认情况是:后面的元素,会显示在前面元素之上
- 可以通过CSS属性
z-index
调整元素的显示层级
z-index
的属性值是数字,没有单位,值越大显示层级越高
- 只有定位元素设置
z-index
才有效
- 如果
z-index
值大的元素,依然没有覆盖掉z-index
值小的元素,那么请检查其包含块的层级
定位的特殊应用
注意:
- 发生固定定位、绝对定位后,元素都变成了定位元素,默认宽高被内容撑开,且依然可以设置宽高
- 发生相对定位后,元素依然是之前的显示模式
- 以下所说的特殊应用,只针对绝对定位和固定定位的元素,不包括相对定位的元素
让定位元素的宽充满包含块
- 块宽想与包含块一致,可以给定位元素同时设置
left
和right
为0
- 高度想与包含块一致,
top
和bottom
设置为0
让定位元素在包含块中居中
- 方案一:
- 方案二:
版心
- 在pc端网页中,一般都会有一个固定宽度且水平居中的盒子,来显示网页的主要内容,这是网页的版心
- 版心的宽度一般是960-1200(目前主流)像素之间
- 版心可以是一个,也可以是多个
常用布局名词
位置 | 名词 |
顶部导航条 | topbar |
页头 | header、page-header |
导航 | nav、navigator、navbar |
搜索框 | search、search-box |
横幅、广告、宣传图 | banner |
主要内容 | content、main |
侧边栏 | aside、sidebar |
页脚 | footer、page-footer |
重置默认样式
很多元素都有默认样式,比如:
p
元素有默认的上下margin
h1-h6
标题也有上下margin
,且字体加粗
body
元素有默认的8px外边距
- 超链接有默认的文字颜色和下划线
ul
元素有默认的左pading
- 等等的默认样式
在早期,元素默认样式,能够让我们快速的绘制网页,但如今网页的设计越来越复杂,内容越来越多,而且很精细,这些默认样式会给我们绘制网页带来麻烦;而且这些默认样式,在不同的浏览器上呈现出来的效果也不一样,所以我们需要重置这些默认样式
方案一:使用全局选择器
此种方法,在简单案例中可以用一下,但实际开发中不会使用,因为*选择的是所有元素,而并不是所有的元素都有默认样式;而且我们重置时,有时候是需要做特定处理的,比如:想让a元素的文字是灰色,其他元素文字是蓝色
方案二:reset.css
选择到具有默认样式的元素,清空其默认的样式
经过reset
后的网页,好似“一张白纸”,开发人员可以根据设计稿,精细的去添加具体的样式
方案三:Normalize.css
Normalize.css
是一种最新方案,它在清除默认样式的基础上,保留了一些有价值的默认样式- 官网地址:http://necolas.github.io/normalize.css
相对于
rest.css
,Normalize.css
有如下优点:- 保护了有价值的默认样式,而不是完全去掉它们
- 为大部分HTML元素提供一般化的样式
- 新增对HTML5元素的设置
- 对并集选择器的使用比较谨慎,有效避免调试工具杂乱
Normalize.css
的重置,和reset.css
相比,更加觉得温和,开发时可根据实际情况进行选择
HTML5新增内容
HTML5简介
- HTML5是新一代的HTML标准,2014年10月由万维网联盟(W3C)完成标准定制
- 官网地址:
- W3C提供:https://www.w3.org/TR/html/index.html
- WHATWG提供:https://whatwg-cn.github.io/html/multipage
- HTML5在侠义上是新一代的HTML标准,在广义上是指:整个前端
HTML5优势:
- 针对JavaScript,新增了很多可操作的接口
- 新增了一些语义化标签,全局属性
- 新增了很多媒体标签,可以很好的替代flash
- 更加侧重语义化,对于SEO更友好
- 可移植性好,可以大量应用在移动设备上
HTML5兼容性:
- 支持:Chrome、Safari、Opera、Firefox等主流浏览器(IE浏览器必须是9及以上版本才支持HTML5,且IE9仅支持部分HTML5新特性)
新增语义化标签
标签名 | 语义 | 单/双标签 |
header | 整个页面,或部分区域的头部 | 双 |
footer | 整个页面,或部分区域的底部 | 双 |
nav | 导航 | 双 |
article | 文章、帖子、杂志、新闻、博客、评论等 | 双 |
section | 页面中的某段文字,或文章中的某段文字(里面文字通常里面包含标题) | 双 |
aside | 侧边栏 | 双 |
main | 文档的主要内容(WHATWG没有语义,IE不支持),几乎不使用 | 双 |
hgroup | 包裹连续的标题,如文章主标题,副标题的组合(W3C将其删除) | 双 |
关于article和section:
artical
里面可以有多个section
section
强调的是分段或分块,如果你想将一块内容分成几段的时候,可使用section
元素
article
比section
更强调独立性,一块内容如果比较独立,比较完整,应该使用article
元素
新增状态标签
meter标签
- 语义:定义已知范围内的标量测量。也被称为gauge(尺度),双标签,例如:电量,磁盘用量等
- 常用属性如下:
属性 | 值 | 描述 |
high | 数值 | 规定高值 |
low | 数值 | 规定低值 |
max | 数值 | 规定最大值 |
min | 数值 | 规定最小值 |
optimum | 数值 | 规定最优值 |
value | 数值 | 规定当前值 |
progress标签
- 语义:显示某个任务完成的进度的指示器,一般用于表示进度条,双标签,例如:工作完成进度等
- 常用属性如下:
属性 | 值 | 描述 |
max | 数值 | 规定目标值 |
value | 数值 | 规定当前值 |
状态标签的应用:
新增列表标签
标签名 | 语义 | 单/双标签 |
datalist | 用于搜索框的关键字提示 | 双 |
details | 用于展示问题和答案,或对专有名词进行解释 | 双 |
summary | 写在details的里面,用于指向问题或专有名词 | 双 |
新增文本标签
文本注音
标签名 | 语义 | 单/双标签 |
ruby | 包裹需要注音的文字 | 双 |
rt | 写注音,rt标签写在ruby的里面 | 双 |
文本标记
标签名 | 语义 | 单/双标签 |
mark | 标记 | 双 |
注音:W3C只是建议mark用于标记搜索结果中的关键字
新增表单功能
表单控件新增属性:
属性名 | 功能 |
placeholder | 提示文字(注音:不是默认值, value 是默认值),适用于文字输入类的表单控件 |
required | 表示该输入项必填,适用于除按钮外其他表单控件 |
autofocus | 自动获取焦点,适用于所有表单控件 |
autocomplete | 自动完成,可以设置为 on 或off ,适用于文字输入类的表单控件
注意:密码输入框,多行输入框不可用 |
pattern | 填写正则表达式,适用于文本输入类表单控件
注意:多行输入不可用,且空的输入框不会验证,往往与 required 配合 |
表单控件的举例应用:
input新增属性值
属性名 | 功能 |
email | 邮箱类型的输入框,表单提交时会验证格式,输入为空则不验证格式 |
url | ulr类型的输入框,表单提交时会验证格式,输入为空则不验证格式 |
number | 数字类型的输入框,表单提交时会验证格式,输入为空则不验证格式 |
search | 搜索类型的输入框,表单提交时不会验证格式 |
tel | 电话类型的输入框,表单提交时不会验证格式,在移动端使用时,会唤起数字键盘 |
range | 范围选择框,默认值为50,表单提交时不会验证格式 |
color | 颜色选择框,默认值为黑色,表单提交时不会验证格式 |
date | 日期选择框,默认值为空,表单提交时不会验证格式 |
mont | 月份选择框,默认值为空,表单提交时不会验证格式 |
week | 周选择框,默认值为空,表单提交时不会验证格式 |
time | 日期选择框,默认值为空,表单提交时不会验证格式 |
datetime-local | 日期+时间选择框,默认值为空,表单提交时不会验证格式 |
form标签新增属性
属性名 | 功能 |
novalidate | 如果给form标签设置了该属性,表单提交的时候不再进行验证 |
视频标签
<video>
标签用来定义视频,它是双标签属性 | 值 | 描述 |
src | URL地址 | 视频地址 |
width | 像素值 | 设置视频播放器的宽度 |
height | 像素值 | 设置视频播放器的高度 |
controls | - | 向用户显示视频控件(比如播放/暂停按钮) |
muted | - | 视频静音 |
autoplay | - | 视频自动播放 |
loop | - | 循环播放 |
poster | URL地址 | 视频封面 |
preload | auto /metadata /nene | 视频预加载,如果使用 autoplay ,则忽略该属性
none :不预加载视频
metadata :仅预先获取视频的元数据(例如:时长)
auto :下载整个视频文件,即使用户不希望使用它 |
音频标签
<audio>
标签用来定义音频,它是双标签属性 | 值 | 描述 |
src | URL地址 | 音频地址 |
controls | - | 向用户显示音频控件(比如播放/暂停按钮) |
autoplay | - | 音频自动播放 |
muted | - | 音频静音 |
loop | - | 循环播放 |
preload | auto /metadata /none | 音频预加载,如果使用 autoplay ,则忽略该属性
none :不预加载音频
metadata :仅预先获取音频的元数据(例如时长)
auto :可以下载整个音频文件,既然用户不希望使用它 |
新增全局属性(了解)
属性名 | 功能 |
contenteditable | 表示元素是否可被用户编辑,可选值如下:
true :可编辑
false :不可编辑 |
draggable | 表示元素可以被拖动,可选值如下:
true :可拖动
false :不可拖动 |
hidden | 隐藏元素 |
spellcheck | 规定是否对元素进行拼写和语法检查,可选值如下:
true :检查
false :不检查 |
contextmenu | 规定元素的上下文菜单,在用户鼠标右键点击元素时显示 |
data-* | 用于存储页面的私有定制数据 |
HTML5兼容性处理
- 添加元信息,让浏览器处于最优渲染模式
- 使用html5shiv让低版本浏览器认识H5的语义化标签
- 扩展
lt小于、lte小于等于、gt大于、gte大于等于、!逻辑非
- 实例
CSS3简介
CSS3概述
- CSS3是CSS2的升级版本,它在CSS2的基础上,新增了很多强大的新功能,从而解决一些实际面临的问题
- CSS2在未来按照模块化的方式去发展:https://www.w3.org/Style/CSS/current-work.html
- CSS3的新特性如下:
- 新增了更加实用的选择器,例如:动态伪类选择器、目标伪类选择器、伪元素选择器等等
- 新增了更好的视觉效果,例如:圆角、阴影、渐变等
- 新增了丰富的背景效果,例如:支持多个背景图片,同时新增了若干个背景相关的属性
- 新增了全新的布局方案——弹性盒子
- 新增了Web字体,可以显示用户电脑上没有安装的字体
- 增强了颜色,例如:
HSL
、HSLA
、RGBA
几种新的颜色模式,新增opacity
属性来控制透明度 - 增加了2D和3D变换,例如:旋转、扭曲、缩放、位移等
- 增加动画与过渡效果,让效果的变换更具流线性、平滑性
- ……
CSS3私有前缀
如下代码中的
-webkit-
就是私有前缀为什么要有私有前缀
- W3C标准所有提出的某个CSS特性,在被浏览器正式支持之前,浏览器厂商会根据浏览器的内核,使用私有前缀了
- 举个例子:
- 查询CSS3兼容性的网站:https://caniuse.com
常见浏览器私有前缀
- Chrom浏览器:
-webkit-
- Safari浏览器:
-webkit-
- Firefox浏览器:
-moz-
- Edge浏览器:
-webkit-
- 旧Opera浏览器:
-o-
- 旧IE浏览器:
-ms-
注意:
我们在编码时,不用过于关注浏览器私有前缀,不用绞尽脑汁的去记忆,也不用每个都去查询,因为常用的CSS3新特性,主流浏览器都是支持的,即便是为了老浏览器而加前缀,我们也可以借助现代的构建工具,去帮助我们添加私有前缀
CSS3新增长度单位
- rem根元素字体大小的倍数,只与根元素字体大小有关
- vw视口宽度的百分之多少,10vw就是视口宽度的10%
- vh视口宽度的百分之多少,10vh就是视口宽度的10%
- vmax视口宽高中大的那个的百分之多少
- vmin视口宽高中小的那个的百分之多少
CSS3新增颜色设置方式
CSS3新增了三种颜色设置方式,分别是:rgba、hsl、hsla
CSS3新增选择器
CSS3新增的选择器有:动态伪类、目标伪类、语言伪类、UI伪类、结构伪类、否定伪类、伪元素
CSS3新增盒子属性
box-sizing怪异盒模型
使用
box-sizing
属性可以设置盒模型的两种类型可选值 | 含义 |
content-box | width和height设置的是盒子内容区的大小(默认值) |
border-box | width和height设置的是盒子总大小(怪异盒模型) |
resize调整盒子大小
使用resize属性可以控制是否允许用户调节元素尺寸
值 | 含义 |
none | 不允许用户调整元素大小(默认) |
both | 用户可以调节元素的宽度和高度 |
horizontal | 用户可以调节元素的宽度 |
vertical | 用户可以调节元素的高度 |
box-shadow盒子阴影
使用
box-shadow
属性为盒子添加阴影- 语法:
box-shadow:h-shadow v-shadow blur spread color inset;
- 各个值饿含义
值 | 含义 |
h-shadow | 水平阴影的位置,必须填写,可以为负值 |
v-shadow | 垂直阴影的位置,必须填写,可以为负值 |
blur | 可选,模糊距离 |
spread | 可选,阴影的外延值 |
color | 可选,阴影的颜色 |
inset | 可选,将外部阴影改为内部阴影 |
- 默认值:box-shadow:none表示没有阴影
- 实例:
opacity不透明度
opacity
属性能为整元素添加透明效果,值是0到1之间的小数,0是完全透明,1表示完全不透明
拓展:
opacity
与rgba
的区别:opacity
是一个属性,设置的是整个元素(包括元素里的内容)的不透明度
rgba
是颜色的设置方式,用于设置颜色,它的透明度,仅仅是调整颜色的透明度
CSS3新增背景属性
background-origin
- 作用:设置背景图的原点
- 语法:
padding-box
:从padding区域开始显示背景图像(默认值)border-box
:从border区域开始显示背景图像content-box
:从content区域开始显示背景图像
background-clip
- 作用:设置背景图的向外裁剪的区域
- 语法:
border-box
:从border区域开始向外裁剪背景(默认值)padding-box
:从padding区域开始向外裁剪背景content-box
:从content区域开始向外裁剪背景- text:背景图只呈现在文字上
注意:若值为text,那么
backgroun-clip
要加上-webkit-
前缀background-size
- 作用:设置背景图的尺寸
- 语法:
- 用长度值指定背景图片大小,不允许负值
- 用百分比指定背景图片大小,不允许负值
- auto:背景图片的真实大小(默认值)
- contain:将背景图片等比缩放,使背景图片的宽或高,与容器的宽或高相等,再将完整背景图片包含在容器内,但要注意:可能会造成容器里部分区域没有背景图片
- cover:将背景图片等比缩放,直到完全覆盖容器,图片会尽可能全的显示在元素上,但要注意:背景图片有可能显示不完整(相对是较好的选择)
backgorund复合属性
- 语法:
注意:
origin
和clip
的值如果一样,如果只写一个值,则origin
和clip
都设置;如果设置了两个值,前面的就是origin
,后面的clip
size
的值必须写在position
值的后面,并且用/
分开
边框圆角
- 在CSS3中,使用border-radius属性可以将盒子变为圆角
- 同时设置四个角的圆角:
- 分开设置每个角的圆角(几乎不用):
属性名 | 作用 |
border-top-left-radius | 设置左上角圆角半径:
1.一个值是正圆半径
2.两个值分别 是椭圆的x半径、y半径 |
border-top-right-radius | 设置右上角圆角半径:
1.一个值是正圆半径
2.两个值分别 是椭圆的x半径、y半径 |
border-bottom-right-radius | 设置右下角圆角半径:
1.一个值是正圆半径
2.两个值分别 是椭圆的x半径、y半径 |
border-bottom-left-radius | 设置左下角圆角半径:
1.一个值是正圆半径
2.两个值分别 是椭圆的x半径、y半径 |
- 分开设置每个角的圆角,综合写法(几乎不用)
边框外轮廓
outline-width
:外轮廓的宽度
outline-color
:外轮廓的颜色
outline-style
:外轮廓的风格none
:无轮廓dotted
:点状轮廓dashed
:虚线轮廓solid
:实线轮廓double
:双线轮廓
outline-offset
设置外轮廓与边框的距离,正负值都可以设置
注意:
outline-offset
不是outline
的子属性,是一个独立的属性outline
复合属性
CSS3新增文本属性
文本阴影
- 在CSS3中,我们可以使用
text-shadow
属性给文本添加阴影
- 语法:
值 | 描述 |
h-shadow | 必需写,水平阴影的位置(允许负值) |
v-shadow | 必需写,垂直阴影的位置(允许负值) |
blur | 可选,模糊的距离 |
color | 可选,阴影的颜色 |
默认值:text-shadow: none表示没有阴影
文本换行
- 在CSS3中,我们可以使用
white-space
属性设置文本换行方式
- 常用值如下:
值 | 含义 |
normal | 文本超出边界自动换行,文本中的换行被浏览器识别为一个空格(默认值) |
pre | 原样输出,与 pre 标签的效果相同 |
pre-wrap | 在 pre 效果的基础上,超出元素边界自动换行 |
pre-line | 在 pre 效果的基础上,超出元素边界自动 换行,且只识别文本中的换行,空格会忽略 |
nowrap | 强制不换行 |
文本溢出
- 在CSS3中,我们可以使用
text-overflow
属性设置文本内容溢出时的呈现模式
- 常用值如下:
值 | 含义 |
clip | 当内联内容溢出时,将溢出部分裁切掉(默认值) |
ellipsis | 当内联内容溢出块容器时,将溢出部分替换为… |
注意:要使得
text-overflow
属性生效,块容器必须显示定义overflow
为非 visible
值,white-space
为nowrap
值文本修饰
文本修饰
- CSS3升级了
text-decoration
属性,让其变成了复合属性
- 子属性及其含义:
text-decoration-line
设置文本装饰线的位置none
:指定文字无装饰(默认值)underline
:指定文字的装饰是下划线overline
:指定文字的装饰是上划线line-through
:指定文字的装饰是贯穿线text-decoration-style
文本装饰线条的形状solid
:实现(默认)double
:双线dotted
:点状线条dashed
:虚线wavy
:波浪线text-decoration-color
文本装饰线条的颜色
文本描边
注意:文字描边功能仅webkit内核浏览器支持
-webkit-text-stroke-width
:设置文字描边的宽度,写长度值
-webkit-text-stroke-color
:设置文字描边的颜色,写颜色值
-webkit-text-stroke
:复合属性,设置文字描边宽度和颜色
CSS3新增渐变
线性渐变
- 多个颜色之间的渐变,默认从上到下渐变
- 使用关键词设置线性渐变的方向
- 使用角度设置线性渐变的方向
- 调整开始渐变的位置
径向渐变
- 多个颜色之间的渐变,默认从圆心四散(注意:不一定是正圆,要看容器本身的宽高比)
- 使用关键词调整渐变圆的圆心位置
- 使用像素值调整渐变圆的圆心位置
- 调整渐变形状为正圆
- 调整形状的半径
- 调整开始渐变的位置
web字体
基本用法
可以通过
@font-face
指定文体的具体地址,浏览器会自动下载该字体,这样就不依赖用户电脑上的字体了- 语法(简写方式)
- 语法 (高兼容性写法)
定制字体
- 中文的字体文件很大,使用完整的字体文件不现实,通常针对某几个文字进行单独定制
- 可使用阿里Web字体定制工具: https://www.iconfont.cn/webfont
字体图标
- 相比图片更加清晰
- 灵活性高,更方便改变大小、颜色、风格等
- 兼容性好,IE也能支持
注意:字体图标的具体使用方式,每个平台不尽相同,最好参考平台使用指南。
阿里图标官网地址:https://www.iconfont.cn/
2D装换
前提:二维坐标系如下图所示
2D位移
2D位移可以改变元素的位置,具体使用方式如下:
- 先给元素添加转换属性
transform
- 编写
transform
的具体值,相关可选值如下:
值 | 含义 |
translateX | 设置水平方向位移,需指定长度值;若指定的是百分比,是参考自身宽度的百分比 |
translateY | 设置垂直方向位移,需指定长度值,若指定的是百分比,是参考自身高度的百分比 |
translate | 一个值代表水平方向,两个值代表;水平和垂直方向 |
- 注意点:
- 位移与相对定位很相似,都不脱离文档流,不会影响到其他元素
- 与相对定位的区别:相对定位的百分比值,参考的是其父元素;定位的百分比值,参考的是其自身
- 浏览器针对位移有优化,与定位相比,浏览器处理位移的效率更高
transform
可以链式编写,例如:transform:translateX(30px) translateY(40px);
- 位移对行内元素无效
- 位移配合定位,可以实现元素水平垂直居中
2D缩放
2D缩放是指:让元素放大或缩小,具体使用方法如下:
- 先给元素添加转换属性
transform
- 编写
transform
的具体值,相关可选值如下:
值 | 含义 |
scaleX | 设置水平方向的缩放比例,值为一个数字,1表示不缩放,大于1放大,小于1缩小 |
scaleY | 设置垂直方向的缩放比例,值为一个数字,1表示不缩放,大于1放大,小于1缩小 |
scale | 同时设置水平方向、垂直方向的缩放比例,一个值代表同时设置水平和垂直缩放;两个值分别代表:水平缩放,垂直缩放 |
- 注意点:
- scale的值,是支持写负数的,但几乎不用,因为容易让人产生误解
- 借助缩放,可实现小于12px的文字
2D旋转
2D旋转是指:让元素在二维平面内,顺时针旋转或逆时针旋转,具体使用方式如下:
- 先给元素添加转换属性
transform
- 编写
transform
的具体值,相关可选值如下:
值 | 含义 |
rotate | 设置旋转角度,需指定一个角度值(deg),正值顺时针,负值逆时针 |
注意:
rotateZ(20deg)
相当于rotate(20deg)
,当然到了3D变换的时候,还能写rotate(x,x,x)
2D扭曲
2D扭曲是指:让元素在二维平面内被“拉扯”,进而“走形”,实际开发几乎不用,了解即可,具体使用方式如下:
- 先给元素添加转换属性
transform
- 编写
transform
的具体值,相关可选值如下:
值 | 含义 |
skewX | 设置元素在水平方向扭曲,值为角度值,会将元素的左上角,右下角拉扯 |
skewY | 设置元素在水平方向扭曲,值为角度值,会将元素的左上角,右下角拉扯 |
skew | 一个值代表 skewX ,两个值分别代表:skewX 、skewY |
多重变换
多个变换,可以同时使用一个
transform
来编写注意点:多重变换时,建议最后旋转
变换原点
- 元素变换时,默认的原点是元素的中心,使用
transform-origin
可以设置变换的原点
- 修改变换原点对位移没有影响,对旋转和缩放会产生影响
- 如果提供两个值,第一个用于横坐标,第二个用于纵坐标
- 如果只提供一个,若是像素值,表示横坐标,纵坐标取50%;若是关键字,则另一个坐标取
50%
举例:
transform-origin: 50% 50%
,变换原点在元素的中心位置,百分比是相对于自身(默认值)
transform-origin: left top
,变换原点在元素的左上角
transform-origin: 50px 50px
,变换原点距离元素左上角50px 50px
的位置
transform-origin: 0
,只写一个值的时候,第二个值默认为50%
3D转换
开启3D空间
重要原则:元素进行3D变换的首要操作:父元素必须开启3D空间
使用
transform-style
开启3D空间,可选值如下:flat
:让子元素位于此元素的二维平面内(2D空间)(默认值)
preserve-3d
:让子元素位于此元素的三维空间内(3D空间)
设置景深
景深是指:观察者与z=0平面的距离,能让发生3D变换的元素,产生透视效果,看来更加立体
使用
perspective
设置景深,可选值如下:none
:不指定透视(默认值)
- 长度值:指定观察者距离z=0平面的距离,不允许负值
注意:
perspective
设置给发生3D变换元素的父元素透视点位置
所谓透视点位置,就是观察者位置;默认的透视点在元素的中心
使用
perspective-origin
设置观察者位置(透视点的位置),例如:注意:通常情况下,我们不需要调整透视点位置
3D位移
3D位移是在2D位移的基础上,可以让元素沿z轴位移,具体使用方式如下:
- 先给元素添加转换属性transform
- 编写transform的具体值,3D相关可选值如下:
值 | 含义 |
translateZ | 设置z轴位移,需要定长度值,正值向屏幕外,负值向屏幕里,且不能写百分比 |
translate3d | 第一个参数对应x轴,第二个参数对应y轴,第三个参数对应z轴,且均不能省略 |
3D旋转
3D旋转是在2D旋转的基础上,可以让元素沿x轴和y轴旋转,具体使用方式如下:
- 先给元素添加旋转属性transform
- 编写transform的具体值,3D相同可选值如下:
值 | 含义 |
rotateX | 设置x轴旋转角度,需指定一个角度值(deg),面对x轴正方向:正值顺时针,负值逆时针 |
rotateY | 设置y轴旋转角度,需指定一个角度值(deg),面对y轴正方向:正值顺时针,负值逆时针 |
rotate3d | 前三个参数分别表示坐标轴:x,y,z,第四个参数表示旋转的角度,参数不允许省略;例如: transform: rotate3d(1,1,1,30deg) ,意思是:x,y,z分别旋转30度 |
3D缩放
3D缩放是在2D的基础上,可以让元素沿z轴缩放,具体使用方式如下:
- 先给元素添加转换属性
transform
- 编写
transform
的具体值,3D相关可选值如下:
值 | 含义 |
scaleZ | 设置z轴方向的缩放比例,值为一个数字,1表示不缩放,大于1放大,小于1缩小 |
scale3d | 第一个参数对应x轴,第二个参数对应y轴,第三个参数对应z轴,参数不允许省略 |
多重变换
多个变换,可以同时使用一个
transform
来编写注意:多重变换时,旋转建议写最后
背部不可见
添加
backface-visibility: hidden;
后元素旋转到背面将不再显示过渡
过渡可以在不使用Flash动画,不使用JavaScript的情况下,让元素从一种样式,平滑过渡为另一种样式
transition-property
- 作用:定义哪个属性需要过渡,只有在该属性中定义的属性(比如宽、高、颜色等)才会以有过渡效果
- 常用值:
none
:不过渡任何属性all
:过渡所以能过渡的属性- 具体某个属性名,例如:
width
、height
,若有多个逗号分隔
注意:不是所有的属性都能过渡,值为数字,或者值能转为数字的属性,都支持过渡,否则不支持过渡。常见的支持过渡属性有:颜色、长度值、
z-index
、opacity
、2D变换属性、3D变换属性、阴影transition-duration
- 作用:设置过渡的持续时间,即:一个状态过渡到另一个状态耗时多久
- 常用值:
0
:没有任何过渡时间(默认值)s
或ms
:秒或毫秒- 列表:如果想让所有属性都持续一个时间,那就写一个值。如果想让每个属性持续不同的时间那就写一个时间的列表
transition-delay
- 作用:指定开始过渡的延时时间,单位:s或ms
transition-timing-function
- 作用:设置过渡的类型
- 常用值:
ease
:平滑过渡(默认值)linear
:线性过渡ease-in
:慢→快ease-out
:快→慢ease-in-out
:慢→快→慢step-start
:等同于steps(1,start)
step-end
:等同于steps(1,end)
steps(integer,?)
:接受两个参数的步进函数。第一个参数必须为正数,指定函数的步数。第二个参数值可以是start或end,指定每一步的值发生变化的时间点。第二个参数默认值为endcubic-bezie(number,number,number,number)
:特定的贝塞尔曲线类型(在线制作贝塞尔曲线:https://cubic-bezier.com)
transition复合属性
- 如果设置了一个时间,表示
duration
;如果设置了两个时间,第一是duration
,第二个是delay
;其他值没有顺序要求
动画
动画的基本使用
- 第一步:定义关键帧(定义动画)
- 简单方式定义
- 完整方式定义:
- 第二步:给元素应用动画,用到的属性如下:
animation-name
:给元素指定具体的动画(具体的关键帧)animation-duration
:设置动画所需时间animation-delay
:设置动画延时
动画的其他属性
animation-timing-function
,设置动画的类型,常用值如下:ease
:平滑过渡(默认值)linear
:线性过渡ease-in
:慢→快ease-out
:快→慢ease-in-out
:慢→快→慢step-start
:等同于steps(1,start)
step-end
:等同于steps(1,end)
steps(integer,?)
:接受两个参数的步进函数。第一个参数必须为正数,指定函数的步数。第二个参数值可以是start或end,指定每一步的值发生变化的时间点。第二个参数默认值为endcubic-bezie(number,number,number,number)
:特定的贝塞尔曲线类型(在线制作贝塞尔曲线:https://cubic-bezier.com)
animation-iteration-count
,指定动画的播放次数,常用值如下:number
:动画循环次数infintte
:无限循环
animation-direction
,指定动画方向,常用值如下:normal
:正常方向(默认)reverse
:反方向运行alternate
:动画先正常运行再反方向运行,并持续交替运行alternate-reverse
:动画先反运行再正方向运行,并持续交替运行
animation-fill-mode
,设置动画之外的状态forwards
:设置对象状态为动画结束时的状态backwards
:设置对象状态为动画开始时的状态
animation-play-state
,设置动画的播放状态,常用值如下:running
:运动(默认)paused
:暂停
动画复合属性
只设置一个时间表示
duration
,设置两个时间分别是:duration
和delay
,其他属性没有数量和顺序要求注意:
animation-paly-state
一般单独使用,不写在复合属性里面多列布局
作用:专门用于实现类似于报纸的布局
常用属性如下:
column-count
:指定列数,值是数字
column-width
:指定列宽,值是长度
columns
:同时指定列宽和列数,复合属性;值没有数量和顺序要求
column-gap
:设置列边距,值是长度
column-rule-style
:设置列与列之间边框的风格,值与border-style
一致
column-rule-width
:设置列与列之间边框的宽度,值是长度
column-rule-color
:设置列与列之间边框的颜色
coumn-rule
:设置列边框,复合属性
column-span
:指定是否跨列;值:none
、all
伸缩盒模型
伸缩盒模型简介
- 2009年,W3C退出了一种新的盒子模型
Flexible Box
(伸缩盒模型,又称:弹性盒子)
- 它可以轻松的控制:元素分布方式、元素对齐方式、元素视觉顺序……
- 截止目前,除了在部分IE浏览器不支持,其他浏览器均已全部支持
- 伸缩盒模型的出现,逐渐演变出一套新的布局方案
flex
布局
提示:
- 传统布局是指:基于传统盒状模型,主要靠:
display
属性+position
属性+float
属性
flex
布局目前在移动端应用比较广泛,因为传统布局不能很好的呈现在移动设备上
伸缩容器、伸缩项目
- 伸缩容器:开启了
flex
的元素,就是:伸缩容器 - 给元素设置:
display:flex
或display:inline-flex
,该元素就变为了伸缩容器 display:inline-flex
很少使用,因为可以给多个伸缩容器的父容器,也设置伸缩容器- 一个元素可以同时是:伸缩容器、伸缩项目
- 伸缩项目:伸缩容器所有子元素自动成为了:伸缩项目
- 仅伸缩容器的子元素成为了伸缩项目,孙子元素、重孙子元素等后代,不是伸缩项目
- 无论原来是哪种元素(块、行内块、行内),一旦成为了伸缩项目,全都会“块状化”
主轴与侧轴注
- 主轴:伸缩项目沿着主轴排列,主轴默认是水平的,默认方向是:从左到右(左边是起点,右边是终点)
- 侧轴:与主轴垂直的就是侧轴,侧轴默认是垂直的,默认方向是:从上到下(上边是起点,下边是终点)
主轴方向
- 属性名:
flex-direction
- 常用值如下:
row
:主轴方向水平从左到右(默认值)row-reverse
:主轴方向水平从右到左column
:主轴方向垂直从上到下column-reverse
:主轴方向垂直从下到上
注意:改变了主轴的方向,侧轴方向也随之改变
主轴换行方式
- 属性名:
flex-wrap
- 常用值如下:
nowrap
:默认值,不换行wrap
:自动换行,伸缩容器不够自动换行wrap-reverse
:反向换行
flex-flow
flex-flow
是一个复合属性,复合了flex-direction
和flex-wrap
两个属性,值没有顺序要求
主轴对齐方式
- 属性名:
justify-content
- 常用值如下:
flex-start
:主轴起点对齐(默认值)flex-end
:主轴终点对齐center
:居中对齐space-between
:均匀分布,两端对齐(最常用)spance-around
:均匀分布,两端距离是中间距离的一半space-evenly
:均匀分布,两端距离与中间距离一致侧轴对齐方式
侧轴对齐方式
只有一行的情况
- 所需属性:
align-items
- 常用值如下:
flex-start
:侧轴的起点对齐flex-end
:侧轴的终点对齐center
:侧轴的中点对齐baseline
:伸缩项目的第一行文字的基线对齐stretch
:如果伸缩项目未设置高度,将占满整个容器的高度(默认值)
多行的情况
- 所需属性:align-cotent
- 常用值如下:
- flex-start:与侧轴的起点对齐
- flex-end:与侧轴的终点对齐
- center:与侧轴的中点对齐
- space-between:与侧轴两端对齐,中间平均分布
- space-around:伸缩项目间的距离相等,比距边缘大一倍
- space-evenly:在侧轴上完全平分
- stretch:占满整个侧轴(默认值)
flex-basis
- 概念
flex-basis
设置的是主轴方向的基准长度,会让宽度或高度失效(主轴横向:宽度失效;主轴纵向:高度失效)
- 作用:浏览器根据这个属性设置的值,计算主轴上是否有多余空间,默认值
auto
,即:伸缩项目的宽或高
flex-grow(伸)
- 概念:flex-grow定义伸缩项目的放大比例,默认为0,即:纵使主轴存在剩余空间,也不拉伸(放大)
- 规则:
- 若所有伸缩项目的flex-grow值都为1,则:它们将等分剩余空间(如果有空间的话)
- 若三个伸缩项目的flex-grow值分别为:1、2、3,则:分别瓜分到:1/6、2/6、3/6的空间
flex-shrink(缩)
- 概念:
flex-shrink
定义了项目的压缩比例,默认为1,即:如果空间不足,该项目将会缩小
- 收缩项目的计算,略微复杂一点,我们拿一个场景举例:
- 计算分母:(200x1)+ (300x2)+(200x3)= 1400
- 计算比例:
- 项目一:(200x1)/ 1400 = 比例值1
- 项目二:(300x1)/ 1400 = 比例值2
- 项目三:(200x1)/ 1400 = 比例值3
- 计算最终收缩大小:
- 项目一需要收缩:比例值1 x 300
- 项目二需要收缩:比例值2 x 300
- 项目三需要收缩:比例值3 x 300
例如:三个伸缩项目,宽度分别为:200px、30px、200px,它们的
flex-shrink
值分别为:1、2、3;若想刚好容纳下三个项目,需要总宽度为700px,但目前容器只有400px,还差300px;所以每个人都要收拾一下才可以放下,具体收缩的值,这样计算:flex复合属性
flex
是复合属性,复合了:flex-grow
、flex-shrink
、flex-basis
三个属性,默认值为0 1 atuo
- 如果写
flex:1 1 auto
,则可简写为:flex:auto
- 如果写
flex:1 1 0
,则可简写为:flex:1
- 如果写
flex:0 0 auto
,则可简写为:flex:none
- 如果写
flex:0 1 atuo
,则可简写为:flex:0 auto
(即flex
初始值)
项目排序
order
属性定义项目的排列顺序,数值越小,排列越靠前,默认为0
单独对齐
- 通过
align-self
属性,可以单独调整某个伸缩项目的对齐方式
- 默认值为
auto
,表示继承父元素的align-itema
属性
媒体查询
媒体类型
值 | 含义 |
all | 检测所有设备 |
screen | 检测电子屏幕,包括:电脑屏幕、平板屏幕、手机屏幕等 |
print | 检测打印机 |
媒体特性
值 | 含义 |
width | 检测视口宽度 |
max-width | 检测视口最大宽度 |
min-width | 检测视口最小宽度 |
height | 检测视口高度 |
max-height | 检测视口最大高度 |
min-height | 检测视口最小高度 |
device-width | 检测设备屏幕的宽度 |
max-device-width | 检测设备屏幕的最大宽度 |
min-device-width | 检测设备屏幕的最小宽度 |
orientation | 检测视口的旋转方向(是否横屏)
1. portrait :视口处于纵向,及高度大于宽度
2.landscape :视口处于横向,即宽度大于高度 |
运算符
值 | 含义 |
and | 并且 |
, 或or | 或 |
not | 否定 |
only | 肯定 |
常用阈值
在实际开发中,会将屏幕划分成几个区间,例如:
结合外部样式的用法
用法一:
用法二:
BFC
通俗易懂的描述BFC:
- BFC是Block Formatting Context(块级格式上下文),可以理解成元素的一个“特异功能”
- 该“特异功能”,在默认的情况下处于关闭状态;当元素满足了某些条件后,该“特异功能”被激活
- 所谓激活“特异功能”,专业点说就是:该元素创建了BFC(又称:开启了BFC)
如何开启BFC
- 根元素
- 浮动元素
- 绝对定位、固定定位的元素
- 行内块元素
- 表格单元格:
table
、thead
、tbody
、tfoot
、th
、td
、tr
、caption
overflow
的值不为visible
的块元素
- 伸缩项目
- 多列容器
column-span
为all
的元素(即使该元素没有包裹在多列容器中)
display
的值,设置为flow-root
开启了BFC能解决什么问题
- 元素开启BFC后,其子元素不会再产生
margin
塌陷问题
- 元素开启BFC后,自己不会被其他浮动元素所覆盖
- 元素开启BFC后,就算其子元素浮动,元素自身高度也不会塌陷
数组
数组:(Array)是一种可以按顺序保存数据的数据类型(对象数据类型)
术语:
- 元素:数组中保存的每个数据都叫数组元素
- 下标:数组中数据的编号
- 长度:数组中数据的个数,通过数组的
length
属性获得
遍历数组:
目标:能够遍历输出数组里面的元素
- 用循环把数组中每个元素都访问到,一般会用for循环遍历
数组-新增
利用push向数组添加元素(数据)
数组.push()
方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度(重点)
语法:
arr.unshift
(新增的内容)方法将一个或多个元素添加到数组的开头,并返回该数组的新长度- 作者:heliang
- 链接:https://heliang.fun/article/HTML%2BCSS-note
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。