五个阶段:
网页设计(html+css)
需要耐心,细心,多总结,多记,多背——布局技巧
网页设计能力基本复合公司的要求,大大小小的网站可以实现,至少可以接私活
第一周:Photoshop+HTML+css 简单制作网页
第二周:css进阶:复杂网页制作
第三周:企业级开发框架,sass+bootstrap
项目周
JavaScript基础及数据交互——网页动态交互
JavaScript进阶+node.js(后台)+webpack+MongoDB(数据库)——前后端分离实战
vue+微信小程序
早期需要安卓团队和IOS团队开发手机软件,前端既可以开发微信小程序,又可以跨平台开发app。行业发展趋势从app到微信小程序(中国特有)。
React+ React-native 扩展:typescript+flutter
就业阶段
总课时:大概5个月(约20周)
md是一种文件格式,typora是这种格式编辑器, markdown
标题:ctrl+ 1 2 3 4 5 6 表格:ctrl+T
属性名 | 属性值 | 描述 |
---|---|---|
代码块: esc下方的`,三个加对应的代码的类型
单行代码或强调突出: esc下方的反引号包裹代码或者内容 ``
斜体:一个 代表斜体 或者 ctrl+i 文本*
加粗:一对星号包裹文本 或者 ctrl+b 粗体
无序列表:短横线 - 加空格
前端
java
有序列表:数字加.加空格
UI
网络安全
图片
图片默认是保存在安装typora软件的安装目录,可以进行修改
修改图片:偏好设置——图像
主题更改方式:
步骤:
参考图片第一二步骤
重启typora,在菜单栏进行更改
代码块显示行号
老板or产品经理——拿到需求,可行性分析,设计出低保真的原型图——>客户进行沟通(定稿)
UI设计师——根据产品经理的低保真的原型图,设计出高保真的交互图,设计PSD原稿
前端工程师——根据psd原稿页面的代码编写,设计动画,交互功能,数据渲染
后端工程师——架构选型、数据库设计,业务逻辑设计,设计接口供前端调用
三个团队同时进行需求分析,产品设计,风险评估,开发时间
测试工程师——需求分析,需求评估,写测试用例(设计),自动化脚本设计(Python)
前端开发完成,后端未完成,前端使用模拟数据进行测试
前后端进行联调——完成整个项目设计
测试工程师——测试项目的bug——将bug交给开发——回归测试
上线(运维工程师)——网络环境的搭建,项目的维护上线,软硬件的设备管理,权限分配等
接口文档(规范文档,大家都按照这个文件进行设计)
概念:将图像拆分为多个模块,每个模块就是一个图层,由多个图层最终组合构成完整图像效果
特点:上方图层会盖住下方的图层,透明图层可以看到下方的图层效果
新建图层:点击下方的创建新图层的图标即可
拷贝图层:鼠标左键点击图层进行拖拽到新建图层的图标上 或者 ctrl+c ctrl+v 或 ctrl+j
删除图层:选中图层点击删除图层的图标 或者 鼠标左键拖拽图层到删除图标上 或 delete
载入选区:(选择图层中有色块的区域)ctrl+鼠标左键点击图层的缩略图
取消选区:Ctrl+D
表情包的制作
打开多个psd文件或图片:将多个文件拖拽进窗口栏,会新开窗口进行显示
放大:ctrl+加号 缩小 :ctrl+减号
填充前景色:alt+delete
填充背景色:ctrl+delete
步骤:
将表情包的图片和新五官的图片在ps中打开
去掉旧五官:通过套索工具进行框选旧五官,填充背景色或者按delete键进行删除配合相关操作
扣取新五官:在新五官图片上,通过套索工具框选新五官,ctrl+c,再到表情包图片上ctrl+v进行粘贴
新五官去色:ctrl+shift+U(图像——调整——去色)
调整新五官边缘:ctrl+m(调整曲线),双击图层调整图像的颜色模式,按住alt进行调整
调整图像大小和位置:选中新五官图层,Ctrl+T,鼠标移入定界框上按住shift可以进行等比例缩放,鼠标移入定界框中鼠标左键按住拖拽可以调整位置,鼠标移入定界框外面可以控制图像的旋转。调整完成后点击勾勾
调整文本:在原来图层上先通过套索工具去掉原来的文本,再通过文本工具,创建新文本
导出——存储为web所用格式
可以移动图层中的图像的显示位置
自动选中是否勾选:如果勾选时可以自动定位到鼠标左键点击图像所在的图层,如果不勾选可以按住ctrl进行自动切换到勾选状态
标尺:ctrl+r
信息:窗口——信息
选区默认不叠加,会重新绘制新选区
选区的加、减、交:
加:按住shift键将新选区添加已有选区中
减:按住alt键将新选区从已有选区中减掉
交:按住shift+alt键选择新选区和已有选区重叠部分
移动选区:在选区选中时,鼠标移入选区中进行鼠标左键点击拖拽进行移动
载入选区:按住ctrl键鼠标左键点击图层的缩略图
取消选区:ctrl+D
选区反选:选区选中时移入选区中鼠标右键——选择反向 或 ctrl+shift+ i
编辑选区:alt+s+T,移动到定界框上可以更改选区的大小,移动到定界框中可以移动选区,移动到定界框外可以旋转选区(按住shift是可以以15°进行旋转)
注意:
绘制选区时按住shift键可以绘制正圆或者正方形
在绘制过程中(鼠标左键按住不放),可以按住空格键进行选区的移动
显示隐藏参考线:ctrl+;
步骤:
新建一个透明的画布,填充背景色
绘制男朋友图层:新建一个图层,借助椭圆选区工具和多边形套索工具绘制男朋友,注意:眼镜是镂空的
女朋友图层:拷贝男朋友图层,移动图层到指定的位置,ctrl+T 鼠标右键选择水平翻转,ctrl+T调整图像大小
裁剪男朋友图层:选中女朋友的选区(ctrl+左键点击图层缩略图),将眼镜区域加选进选区,再到男朋友上按住delete进行删除
男女朋友的安全距离:在女朋友图层上,ctrl+T,然后参考中心点等比例缩放图像(shift+alt,shift是等比例缩放,alt是参考中心点进行缩放)
可以按住ctrl键同时选中男女朋友图层,调整图像显示位置
导出——存储为web所用格式
套索工具——绘制不规则的选区
多边形套索工具——绘制边缘为直线的选区
磁性套索工具——自动识别图像边缘,形成锚点和连线的选区
删除所有的锚点:ESC
删除上一个锚点:delete
注意:在抠图时,需要将图像放大进行选取区域,抠图更加精准
快速选择工具
主要更加选中的区域的颜色来决定选取的范围
色差越大,选取的范围越精准
魔棒工具
将相同的颜色建立选区,可以通过容差值来调整选择范围
容差:指颜色的区分程度,容差值越大,选取的范围越广
连续是否勾选:勾选时,选择的区域是在一起的
注意:在选区工具中,建立选区后,可以使用“选择并遮住”调整选区的边缘,使图像边缘更加平滑
画笔调整:alt+鼠标右键 左右调整大小,上下调整硬度
按住alt键进行取样,然后点击鼠标左键进行绘制(去水印)
以周边近似色进行取样,更加精准
注意:对齐是否勾选:如果勾选默认是以取样点为参考进行取样,如果不勾选,每次点击鼠标左键都是取样点的效果
绘制图形时,使用路径进行绘制时,绘制完成之后,使用ctrl+enter转为选区
新建锚点:鼠标左键点击画布
绘制曲线:鼠标左键新建锚点时,按住不放进行拖拽就可以绘制曲线,绘制完成后,可以使用转换点工具选择对应的锚点进行拖拽
控制操纵杆:绘制过程中,可以按照alt选择对应的操纵杆进行拖拽,绘制完成后,可以使用转换点工具进行工具
取消两边的操作杆:使用转换点工具点击对应的锚点
取消后边的操纵杆:绘制过程中,按住alt键点击对应的锚点(取消半边操纵杆)
步骤:
新建一个透明画布,填充背景色
使用钢笔工具绘制图形的路径,ctrl+enter转为选区(注意:需要在路径状态下调整好图形的形状,转为选区后无法调整)
创建三个图层,根据选区填充不同的颜色
使用移动工具调整图层的显示位置,并调整图层的顺序
导出——存储为web所用格式
概念:是由点,线构成,是计算机软件生成
特点:
放大不会失真
矢量图占空间比较少
色彩比较单一,光影效果表达不到位
概念:是由一系列像素点构成的图像,是有一个个小色块构成的图像
ps导出的图片都是位图
特点:
放大会失真,会出现锯齿状
色彩比较丰富,光影表达到位
有损压缩
将肉眼不可见或者不敏感的色块删除,从视觉效果来看,图片是没有变化
特点:
可以减少图片的体积
会降低图片的质量
常见的图片格式:jpg/jpeg等
无损压缩
概念:将图片中相同的色块只保存一次,比如蓝天,记录相同色块的色值和对应的位置,但是从磁盘读取时,会将对应的色值填充到对应的位置,不会减少图片的体积
特点:
不会减少图片的体积
能够保证图片的质量
常见的图片格式:png、gif等
jpg/jpeg
特点:
采用有损压缩
压缩比比较高,到达40:1
色彩比较丰富
图片体积比较小
png
特点
支持透明
采用无损压缩
色彩相对较少
gif
特点:
支持动画
支持透明
无损压缩
色彩比较单一,只支持256种颜色
svg
基于可扩展的标记语言,用于构建二维的矢量图的一个文件格式
文件体积比较大,比较消耗内存
一般用于logo
psd
photoshop的源文件,体积比较大,包含了图层、通道、滤镜效果等等信息
chrome提出图片格式,但是存在兼容问题
支持动画
采用有损压缩,牺牲图片的质量减少图片的体积
压缩后的图片比jpg和png的体积还小
一般色彩比较丰富的图片,采用jpg
需要支持透明,采用png
需要支持动画,采用gif
对psd原稿进行切片
步骤
先分析原稿,确定那些图片需要切图
确定图片有背景切,还是没有背景切,确定切图的图片的文件格式(jpg或png)
文件——导出——导出为web所用格式(进行图片重命名,图片格式的更改)
点击存储,选择“所用用户切片”,点击保存,保存所用用户切片到指定的位置
注意:在切片过程中,可以一次性切不玩,需要切多次
清除所有切片:视图——清除切片
清除所有参考线:视图——清除参考线
又称为精灵图(css sprite技术),将多张图片有序地组合在一起形成一张图片,从而减少请求服务器的次数,达到优化网页的目的。
步骤:
新建一个透明的画布
将所有的小图标添加到画布中,进行有序排列(为了方便后续代码编写)
可以使用裁剪工具裁剪图片的大小
导出——存储为web所用格式(png图片)
使用雪碧图技术,可以减少请求服务器的次数,从而优化网页
合理使用图片的格式,也可以优化网页
网页开发,web开发,网站开发,小程序开发
web指的是网页、网站
91年,出来第一个网页,早期的网页主要用于论文的传输,学术研究等等
Tim Berners-LEE 李博士,互联网之父
94年,PHP诞生,实现数据的交互和动态页面的模板引擎,为web2.0时代做了铺垫
lee博士建立了W3C,主要制定前端的开发规则,包括HTML+CSS+JavaScript等
web1.0:静态页面,页面中所有的内容都是写死的
web2.0:动态页面。可以动态渲染页面上的数据
95年,JavaScript出现,只能实现动态交互,页面中动态效果
99年,ajax技术,异步技术,标志web2.0时代的到来
2007年,第一部iPhone发布
14年,H5发布
20年,vue3.0发布
前端学习的三部分:HTML(网页的骨架) CSS(网页的样式,美化网页) JavaScript(网页的动态效果)
vue、react等框架
Hyper Text Marckup Language 超文本标记语言
超文本:通过一系列的超链接,将不同空间的资源组合起床形成一个网状的结构,超文本其实就是超媒体的概率,不仅仅指的是页面中的文本,还包含了页面中的图片,视频音频等等
标记:指的是标签,一个超文本就需要一个标签进行链接
简单性:没有复杂逻辑结构,合理搭配标签就可以搭建网页
可扩展性:html标签每种标签都有每种标签用途,新增一种标签就会新增一种用途
跨平台:网页运行环境是浏览器,只有设备上有浏览器就是运行网页
通用性:网页写好之后,网页可以相互进行嵌套,在浏览器可以正常渲染
html文档就是描述网页
html文档包含了文本和标签
我的第一个网页 欢迎来到蜗牛学苑
:代表网页的文档类型,申明了浏览器解析网页的解析规则,大小写均可
:根标签,每个网页有且仅有一个根标签
:代表了网页的头部,
代表网页的标题(内容会显示在浏览器的窗口栏上),定义的网页的编码集。
meta:可以定义网页的关键字和描述,用于搜索引擎收录,有利于SEO优化
:代表网页的主体,内容区域,body主要用于书写网页的结构代码
!DOCTYPE
h5:既可以采用严格模式,又可以采用混杂模式解析网页
h4:
xhtml
作用:
1. 声明文档类型 2. 申明html版本,告诉浏览器采用哪种版本的解析规则解析网页 3. 决定了浏览器的加载模式,告诉浏览器采用严格模式或者混杂模式解析网页
浏览器的加载模式
严格模式(标准模式):严格按住w3c的规范解析代码
混杂模式(兼容模式):浏览器按照自己的规则解析代码
!DOCTYPE不写
如果!DOCTYPE不写或者dtd约束条件不写或错误,浏览器采用兼容模式解析网页
doctype申明正确并且dtd的约束条件正确时,浏览器采用严格模式解析网页
记事本
编程太麻烦
Dreamweaver
更新太慢
webstorm
默认内置了很多插件,很多开发不会用到的插件都安装了,导致电脑出现卡顿
HBuilder
vue推荐一款开发工具,一款小巧的开发工具,一边开发一边看网页效果,也内置一些插件,比较耗内存,启动慢
vscode——目前市场上比较主流的开发工具
微软开发的一款开发工具,不仅可以开发前端,还可以开发后端,前端需要使用什么插件自己安装,不会安装不用的插件。
Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code
汉化
Auto Rename Tag
:自动补全标签
HTML CSS Support
:在html中支持css提示
HTML Snippets
:自动生成html代码结构,专门针对html代码格式,h5版本的文档结构
Image preview
:可以在代码中显示引入的图片的缩略图
IntelliSense for CSS class names in HTML
:在HTML中显示css的class名的提示
Live Server
:将vscode作为一台服务器,让浏览器进行访问,可以实时更新数据
open in browser
:可以指定浏览器打开网页,需要刷新页面进行更新
所有的标签默认是没有样式,默认的样式是浏览器默认添加
用于组织页面上的文本
标题标签 h1~h6
语法:
h1标签
h2标签
h3标签
h4标签
h5标签
h6标签
注意:
数字越大,字号越小
默认文本会加粗,默认标签上下有外边距margin
独占一行
优点:有利于搜索引擎收录,利于SEO优化
段落标签 p
语法:
文本
注意:
独占一行,默认标签上下有外边距margin
一个段落就是一个p标签
p标签不能相互嵌套
span标签
用于一些简短的文本或者提示性的信息
语法:
文本
注意 :
可以同行显示
label标签
语法:
注意:
可以同行显示
label标签有特殊用法,需要配合表单元素一起使用
b/strong
用于文本加粗
语法:
文本 文本
注意:
推荐使用strong标签
可以同行显示
em/i
斜体
语法:
文本 文本
注意:
推荐使用i标签
可以同行显示
br
换行标签,是一个单标签
语法:
等价于
hr
文本中的分割线,是一个单标签
语法:
等价于
注意:独占一行
专门用了引入图片的
语法:
路径:是指目标文件的具体位置
绝对路径:是指目标文件在目录下的具体的位置,直到找到目标文件为止
在开发中,一般是指以http或https开头的路径或者磁盘盘符的路径
相对路径:是指以某个文件出发找到目标文件的路径
在开发中,一般是从当前文件出发找到目标文件
返回上一级:../ 返回多个上一级:多个../
注意:
图片设置宽度和高度时,如果只设置其中一个值,图片等比例缩放,如果同时设置两个值,图片可能会被拉伸变形
主要用于网页的跳转
语法:
文本或图片
href:连接的文件路径可以是网络路径(是以http或者https开头的路径),还可以是本地路径(建议使用相对路径)
target:设置网页的打开方式
_self
:默认值,当前窗口打开网页
_blank
:新开窗口打开网页
注意:
href=""
:刷新
href="#"
:刷新
href="#id名"
:锚点,可以指定跳转到网页的指定位置
id名是唯一的,同一个网页相同的id名只能出现一次
id命名规则:是以数字、字母、_或-构成,不能以数字开头,不能包含特殊的符号
主要用于网页上表格的制作
语法:
创建一个3行3列的表格
table:代表表格,一个table就是一个表格
border:设置表格的边框的宽度
width:设置表格的宽度
height:设置表格的高度
align:设置表格在页面中对齐方式 left默认值,左对齐 center 居中 right 右对齐
bgcolor:设置表格的背景颜色 单词,#十六进制
cellspacing:设置表格中单元格与单元格之间的间距(重点)
cellpadding:设置表格单元格中内容与单元格边框自己的间距(重点)
tr:代表行,一个tr就是一行
height:设置整行的高度
align:设置整行文本在单元格中内容的对齐方式 left默认值,左对齐 center 居中 right 右对齐
bgcolor:设置整行的背景颜色
td:代表列,一个td就是一列,一个单元格
width:设置单元格的宽度,会影响整列的宽度
height:设置单元格的高度,会影响整行的高度
align:设置当前单元格中内容的对齐方式 left默认值,左对齐 center 居中 right 右对齐
bgcolor:设置当前单元格的背景颜色
注意:(重点)
algin设置table上,是控制表格在页面中对齐方式,设置在tr或td控制的是单元格中内容在单元格中的对齐方式
bgcolor设置背景颜色时,优先级:td>tr>table
table里面只能放tr标签,tr标签中只能发td标签
table表格是可以相互嵌套的,不能破坏外层表格的结构,内层表格只能放在外层表格的单元格td中
表格的合并(合并单元格)(重点)
rowspan
:跨行合并单元格,垂直方向上合并单元格
colspan
:跨列合并单元格,水平方向上合并单元格
注意:这两个属性写在td标签上,合并几个单元格,属性值就写几
登录注册等需要数据交互的标签
普通输入框
语法:
密码框
语法:
注意:密码框输入的内容不可见
单选框
语法:
注意:
单选框需要设置相同的name值进行绑定,才能实现单选的效果
label的特殊用法:通过label标签上for属性指定表单元素的id名,通过点击label里面的内容控制指定的表单元素获取焦点
复选框
语法:
爱好: LOL 吃鸡 斗地主
注意:
单选框和复选框可以设置checked属性控制默认选中状态
选择文件
下拉列表
语法:
注意:
一个选项就是一个option标签
下拉列表默认选中第一个选项,可以在option标签上设置selected控制默认选中的选项
下拉列表默认只能选中一个选项,如果需要选中多个,可以在select标签上设置multiple属性
文本域
语法:
注意:
rows和cols可以变相的控制文本域的宽度和高度
按钮
语法:
input: button:
注意:
提交和重置按钮需要配合form标签一起使用,才有效果
form标签
会将form标签中的表单标签的数据提交或重置
语法:
method:设置提交数据的方式
get
:从服务器获取数据,也有提交数据的功能,数据会显示在浏览器的地址栏
post
:提交数据给服务器,数据不会显示在浏览器的地址栏
无序列表ul
语法:
注意:
ul标签默认上下有16px的外边距margin,有40px的左边内边距padding-left
ul、li标签独占一行
ul标签里面只能放li标签
应用:常用于导航等布局
有序列表 ol
语法:
xxxxxxxxxx
- 列表项一
- 列表项二
- 列表项三
- 列表项一
- 列表项二
- 列表项三
html
- 列表项一
- 列表项二
- 列表项三
注意:
ol标签默认上下有16px的外边距margin,有40px的左边内边距padding-left
ol、li标签独占一行
ol标签里面只能放li标签
定义列表 dl
语法:
注意:
dt:设置需要解释说明的名词
dd:针对名词进行解释说明
div标签
没有任何的样式,可以看作布局的容器
独占一行
marquee标签
跑马灯,内容会从右边进入页面,滚动到左边,从左边消失,无限循环,以后通过动画来实现
语法:
iframe标签
可以将网页嵌套进当前的页面中
语法:
注意:
src:需要嵌套的网页的文件路径
frameborder:设置网页的显示区域的边框
需要设置宽度和高度,显示不下时,会产生滚动条,不建议使用,因为网页的宽高无法确定
del标签
删除线标签
语法:
998
fielset标签
带边框和标题的标签
语法:
legend:设置的是边框上的标题
HTML提供了5种空格实体(space entity),它们拥有不同的宽度,非断行空格( )是常规空格的宽度,可运行于所有主流浏览器。其他几种空格( )在不同浏览器中宽度各异。
 ;
它叫不换行空格,全称No-Break Space,它是最常见和我们使用最多的空格,大多数的人可能只接触了 ,它是按下space键产生的空格。在HTML中,如果你用空格键产生此空格,空格是不会累加的(只算1个)。要使用html实体表示才可累加,
该空格占据宽度受字体影响明显而强烈。
它叫“半角空格”,全称是En Space,en是字体排印学的计量单位,为em宽度的一半。根据定义,它等同于字体度的一半(如16px字体中就是8px)。名义上是小写字母n的宽度。此空格传承空格家族一贯的特性:透明的,此空格有个相当稳健的特性,
就是其占据的宽度正好是1/2个中文宽度,而且基本上不受字体影响。
它叫“全角空格”,全称是Em Space,em是字体排印学的计量单位,相当于当前指定的点数。例如,1 em在16px的字体中就是16px。此空格也传承空格家族一贯的特性:透明的,此空格也有个相当稳健的特性,
就是其占据的宽度正好是1个中文宽度,而且基本上不受字体影响。
 
它叫窄空格,全称是Thin Space。我们不妨称之为“瘦弱空格”,就是该空格长得比较瘦弱,身体单薄,占据的宽度比较小。它是em之六分之一宽。
叫零宽不连字,全称是Zero Width Non Joiner,简称“ZWNJ”,是一个不打印字符,放在电子文本的两个字符之间,抑制本来会发生的连字,而是以这两个字符原本的字形来绘制。Unicode中的零宽不连字字符映射为(zero width non-joiner,U+200C),HTML字符值引用为;
叫零宽连字,全称是Zero Width Joiner,简称“ZWJ”,是一个不打印字符,放在某些需要复杂排版语言(如阿拉伯语、印地语)的两个字符之间,使得这两个原本不会发生连字的字符产生了连字效果。零宽连字符的Unicode码位是U+200D (HTML字符值引用为 );
网页主要由三部分构成:
HTML:网页的骨架,网页的结构设计
CSS:网页的样式,用于美化网页,有了css就可以实现像素级的还原
JavaScript:动态脚本,控制页面中的动态效果、数据交互等
概念:CSS(Cascading Style Sheets),主要用于控制网页的样式,不能单独使用,它需要作用在HTML
标签上,控制标签的样式。
层叠:css样式可以写在多个地方,首先检查代码中有没有样式,有的话会将内联样式、内部样式、外部样式、浏览器默认的样式、浏览器用户自定义的样式叠加在一起,最新形成一套样式,相同的属性的样式层叠掉,不同的属性的样式直接作用在标签上。
样式表:指的是css样式代码,页面上通过css编写的代码渲染的样式。页面中通过标签上style属性书写的样式、在style标签中书写的样式代码,在外部css文件中书写的css代码。
所有的标签默认都没有样式
h标签、p标签等默认没有任何样式,浏览器在渲染页面时,默认给不同的标签添加不同的样式
浏览器默认给每个标签添加样式,还提供了用户可以自己更改对应的一些样式,比如,字号,字体样式等
通过在标签上添加style属性,在属性值中书写css样式代码
语法:
文本
注意:每个html标签上都有一个style属性
好处:
哪儿需要添加在哪个标签上即可
缺点:
多个标签需要设置相同的样式时,需要重复添加
通过在head标签中,添加style标签,在style标签中通过选择器来书写css代码
语法:
好处:
结构代码和样式分离
结构代码更加清晰,便于后期维护
多个标签使用相同的样式时,可以提取公共样式,可以同时设置多个标签的样式
缺点:
结构代码和样式没有完全分离
先创建一个后缀名为.css的文件,在css文件中通过选择器书写代码,再在head标签中通过link标签引入的css文件
语法:
好处:
结构代码和样式代码完全分离
便于后期维护,维护根据方便,一处改处处改
以后我们可以将css文件进行压缩,减少文件的体积,优化网页
注意:
相同选择器时,优先级:内联样式的优先级(权重)最高,内部和外部样式采用的就近原则,离标签最近的优先作用
同一个标签上作用相同的css样式时,后面的样式盖住前面的样式
用来找到页面中满足条件的标签,作用的css样式
通过标签名找到满足条件的标签,默认找到页面中所有的标签
语法:
法: 标签名{ css属性名1:css属性值1; css属性名2:css属性值2; css属性名3:css属性值3; }
用来找到页面中满足条件的标签,作用的css样式
通过标签名找到满足条件的标签,默认找到页面中所有的标签
语法:
标签名{ css属性名1:css属性值1; css属性名2:css属性值2; css属性名3:css属性值3; }
通过标签上的class名找到满足条件的标签
class可以重复,多个标签可以使用同一个class名,可以用于提取公共样式
同一个标签上,可以设置多个class名,中间使用空格隔开
语法:
.class名{ css属性名1:css属性值1; css属性名2:css属性值2; css属性名3:css属性值3; }
注意:
选择器可以组合在一起使用,中间没有空格,代表并且的意思
找到标签上的class名中既有aa又有bb的标签作用样式 .aa.bb{ css样式代码 }
通过标签上的id名找到对应的标签
id是唯一的,一个页面同名的id只有一个,id选择器只能找到页面中的一个标签
id命名规则:
是以数字、字母、_和-构成
不能以数字开头,不能包含特殊的符号
语法:
#id名{ css属性名1:css属性值1; css属性名2:css属性值2; css属性名3:css属性值3; }
注意:id是唯一的,以后的js会通过id名来找到页面中标签,id选择器慎用。
相同的选择器(相同权重)时,内联的权重最大,内部和外部样式采用就近原则,离标签最近的样式优先作用
相同选择器时,后面的样式会盖住前面的
不同选择器时,优先级:id选择器>类选择器>标签选择器
background-color
:设置背景颜色
颜色单词
#
十六进制 #FF0011 FF代表rgb中red,00代表rgb的green,11代表rgb中blue
rgb(0~255,0~255,0~255)
rgba(0~255,0~255,0~255,0-1)(颜色透明) 引申一下:整体透明度用 opacity:value
写法,value取值为0-1 。
background-image
:设置背景图片
background-image: url(背景图片的文件路径);
如果背景颜色和背景图片同时设置,背景图片会盖住背景颜色
background-repeat
:设置背景图片是否平铺
repeat
:默认值,沿着x轴和y轴都平铺
repeat-x
:沿着x轴进行平铺
repeat-y
:沿着y轴进行平铺
no-repeat
:不平铺
应用:像比较规则的渐变背景,可以使用1px的渐变背景平铺,减少图片的体积,优化网页
background-size
:设置背景图片的大小
contain
:宽度和高度铺满一边,另一边不管
cover
:两边都铺满,超出部分隐藏
宽度 高度
宽度 高度
:如果只设置一个值,代表宽度,高度等比例缩放
像素
百分比:参考当前盒子的宽度和高度
background-position
:设置背景图片的显示位置
background-position:x轴 y轴;
方位单词:两两搭配使用
left(左)、right(右)、center(居中)、top(上)、bottom(下)
像素:0px 0px相当于左上角
百分比:50% 50%相当于center center
注意:默认是参考的当前盒子的宽高,如果一旦设置了背景图片固定,那么参考的是整个显示区域
background-attachment
:设置背景图片是否固定在页面上
scroll
:默认值,随着滚动条滚动
fixed
:固定在页面上
background
:复合属性
background: pink url(img/img-3.jpg) no-repeat 100px 100px /50px 50px; /前面代表显示位置,/后面代表背景图片的大小
注意:设置两个值代表背景图片的显示位置,如果需要设置背景图片的大小,需要使用/
将两组值分隔开,/前面代表显示位置,/后面代表背景图片的大小
概念:将多张图片有序地组合在一起,形成一张图片,可以减少请求服务器的次数,优化网页
原理:通过background-image
引入雪碧图,再通过background-position
调整背景图片的显示位置
步骤:
创建一个标签,设置宽高,宽高刚好是需要显示的图标的大小
通过background-image
引入背景图片(雪碧图)
使用background-position
调整雪碧图的显示位置
注意:在开发中,x轴的正方向是水平向右,y轴的正方向垂直向下
color
:设置文本的颜色
单词
十六进制
rgb(0~255,0~255,0~255)
text-align
:设置文本的对齐方式
left
:左对齐
center
:居中对齐
right
:右对齐
注意:设置在标签上可以控制文本的对齐方式,也可以控制标签中行级元素的对齐方式
line-height
:设置行高
像素
百分比或数字:参考的是当前标签的字体大小 font-size
注意:针对单行文本的水平垂直居中,设置text-align:center;
和line-height:盒子的高度;
text-decoration
:设置文本的修饰
none
:无,可以用于取消a标签的下划线
underline
:下划线
line-through
:中划线,删除线
overline
:上划线
letter-spacing
:设置字符间距,一个中文就是一个字符,一个英文字母就是一个字符
word-spacing
:设置字间距,以空格来区分
text-transform
:设置字母的大小写
none
:默认值,无
capitalize
: 首字母大写
uppercase
:全大写
lowercase
:全小写
text-indent
:设置首行的缩进
font-family
:设置字体类型
注意:
可以设置多种字体,中间使用逗号隔开,浏览器先在系统中找第一种字体,如果有直接作用,如果没有找第二种字体,依次类推,直到找到最后一种字体。一般最后的serif字体或者其他字体都是通用字体
多种字体风格比较类似,为了保证页面效果
字体名称如果是中文或者多个英文单词,需要使用引号包裹
font-size
:设置字体大小,值越大,字号越大
font-weight
:设置字体的粗细
100~900
:数字越大,加粗效果越好,不能带单位
normal
:默认值,正常
lighter
:更细
bold
:加粗
bolder
:更粗
font-style
:设置字体的风格
normal
:默认值,正常
italic
:斜体
oblique
:倾斜
在网页中引用自己的的字体文件
语法:
@font-face{ font-family:字体的名称; src: url(引入的字体文件格式1的文件路径) , url(引入的字体文件格式2的文件路径) ; } div{ font-family: 字体的名称; }
注意:
一个@font-face只能引入一种字体
为了解决不同浏览器对字体文件格式的兼容问题,可以引入多种文件格式,中间使用逗号隔开
一般用于组织页面中文本等信息
特点:
可以同行显示,排列不下就会换行显示
不支持宽高,由内容撑开
常见的标签:span,label,a,b/strong,i/em等
介于行内元素和块级元素之间,既有行内元素的特点,又有块级元素的一些特点
特点:
可以同行显示,排列不下就会换行显示
支持宽高
常见的标签:img、input(text),button,td等
注意:行内块级元素之间存在5px的间距
一般用于页面布局或者组织行级标签
特点:
独占一行
支持宽高
常见的标签:h,p,table,tr,ul,ol,li,div等
相互转换
通过display
属性可以实现相互转换
取值:
display:inline;
:转为行内元素
display:inline-block;
:转为行内块级元素
display:block;
:转为块级元素
dispaly:none;
:隐藏元素,页面进行重新绘制
给超链接添加样式
语法:
/* 向未被访问过的超链接添加样式 */ a:link { color: green; } /* 向访问过的超链接添加样式 */ a:visited { color: yellow; } /* 向鼠标悬停的超链接添加样式 */ /* :hover必须放在:link和:visited之后 */ a:hover { color: red; } /* 向获取焦点的超链接添加样式 */ /* :active必须放在:hover之后 */ a:active { color: blue; }
注意::hover
必须放在:link
和:visited
之后,:active
必须放在:hover
之后,顺序:link-visited-hover-active(L-V-H-A)
设置列表项的标志的效果
属性:
list-style-type
:设置列表项标志的类型
none
:无
list-style-position
:设置列表项标志的显示位置
outside
:默认值,标志显示在li标签内容之外
inside
:标志现在li标签内容区域里面
list-style-image
:设置图片作为列表项标志,该图片不能通过css来控制大小,只能通过图像软件更改原图的大小,不建议使用
list-style
:复合属性
list-style:none;
取消列表项的标志
注意:可以在ul或ol标签上,设置list-style属性,li标签上可以自动继承来使用
将以下代码设置在table标签中
border-collapse:collapse;
:将表格边框合并为一(推荐使用)
boder-spacing;
:设置单元格与单元格之间的间距
border-spacing
: 设置单元格与单元格之间的间距
图标是以字体的形成显示,可以使用css字体相关的属性进行控制
设计师在设计字体时,字体是以图标的形状进行设计
font awesome官网:Font Awesome,一套绝佳的图标字体库和CSS框架
font awesome是通过设置不同的class名来使用不同的图标,图标是矢量图
合理使用图片格式,可以减少图片的体积,优化网页
使用雪碧图技术,减少请求服务器的次数,优化网页
1px渐变背景平铺,可以减少图片的体积,优化网页
使用外部样式,可以将css文件进行压缩,减少文件的体积,优化网页
使用字体图标也可以优化网页
上图就是一个盒模型:
content:代表内容区域,存放内容 的空间,存放文本或者其他的盒子
padding:内边距,内容到边框之间的间距,相当于快递中泡沫
border:盒子的边框,四周边框可以分别设置
margin:盒子的外边距,盒子与盒子之间的间距(兄弟关系、父子关系)
设置盒子四周的边框
语法:
边框三要素: border-方位-width: 宽度; border-方位-style: 类型; border-方位-color: 颜色; 复合属性: 设置一条边框: border-方位: 宽度 类型 颜色; 同时设置四条边框的样式: border:宽度 类型 颜色; 虚线:dashed
注意:
边框在设置时至少设置两个值,宽度和类型,默认颜色为黑色
设置边框会撑大盒子,会改变盒子的大小
边框的渲染原理:如果只设置一条边框,显示为矩形形状,如果设置了相邻的边框,相接的部分是沿着对角线均分
设置内容到边框之间的间距
语法:
分别设置四周的内边距: padding-left padding-right padding-top padding-bottom 复合属性: padding 一个值:上下左右 两个值:上下 左右 三个值:上 左右 下 四个值:上 右 下 左
注意:
padding会撑大盒子,会更改盒子的大小
默认会添加背景的颜色,padding去会填充背景颜色
应用:
可以使用padding撑大盒子,让内容居中
设置内容到边框的显示位置
设置盒子与盒子之间的间距
语法:
分别设置四周的外边距: margin-left margin-right margin-top margin-bottom 复合属性: margin 一个值:上下左右 两个值:上下 左右 三个值:上 左右 下 四个值:上 右 下 左
盒子与盒子之间是兄弟关系时,margin在垂直方向会发生重叠,以值大的为准
注意:水平方向的margin是叠加在一起,值相加
盒子与盒子之间是父子关系,子元素设置margin-top后,会传递给父元素显示
原因:子元素设置margin-top时会去找父元素的边界(参考位置),找不到父元素的边界就会传递父元素显示
解决方案
给父元素设置border,会改变父元素的盒子的大小
给父元素设置padding,会改变父元素盒子的大小
给父元素设置overflow:hidden;
overflow:hidden;
: 盒子中内容溢出隐藏掉,设置了该属性后,会产生一个BFC容器,该容器里面的元素不会影响盒子外面的元素的排列
又称为ie盒模型,css中设置width包含了content+padding+border
目前浏览器默认都是标准盒模型,需要使用怪异盒模型,需要转化
盒模型转化:box-sizing
border-box
:设置为怪异盒模型
content-box
:默认值,设置为标准盒模型
宽度 = width(包含了content+ padding+border)
高度 = height(包含了content+padding+border)
宽度 = width(包含了content+ padding+border)+ margin * 2(左右)
高度 = height(包含了content+padding+border)+ margin * 2(上下)
让块级元素在父标签中水平居中
设置上下为0,左右为auto
auto:代表自适应的意思,可以将父盒子水平方向的剩余空间均分子元素的左右两边
padding&margin设置百分比时,无论设置哪个方向的百分比,都是参考父元素的宽度
css主要由两部分构成:
选择器:通过选择器去找到页面中的标签
css样式(多个css样式中间使用分号隔开)
对于选择器来说,我们丰富选择器的写法,种类非常多,能够更加的精确找到页面中标签
注意:选择器只能从父标签找到子标签,或者从前面的标签找到后面的标签(从外到内,或从前到后找标签)
通过标签上的id名找到满足条件的标签
语法:
#id名{ css代码 }
注意:id是唯一,只能找到页面中唯一的一个标签,以后js会通过id控制页面中标签,id选择器慎用
又称为class选择器,通过标签上的class名找到满足条件的标签
一般用于提取公共样式,作用在不同的标签
语法:
.class名{ css代码 }
通过标签名找到满足条件的标签,如果没有规定范围时,默认会找到页面中所有满足条件的标签
语法:
标签名{ css代码 }
通过找到指定标签里面所有满足条件的后代的标签,可以找到儿子、孙子、重孙子…
中间使用空格隔开
语法:
找到class名为box1的标签里面的所有后代div标签 .box1 div{ }
找到指定标签里面满足条件的直接子标签,只找儿子,不找孙子、重孙子…
中间使用>
隔开
语法:
找到class名为box1里面的直接子元素div标签 .box1>div{ }
相邻兄弟选择器
找到满足条件的标签后面相邻的第一个满足条件的兄弟标签
中间使用+
隔开
语法:
找到class名为box的标签后面相邻的第一个兄弟标签 .box+p{ }
后续兄弟选择器
找到满足条件的标签后面所有的满足条件的兄弟标签
中间使用~
隔开
语法:
找到class名为box的标签后面所有的兄弟p标签 .box ~ p{ }
选择器分组
中间使用逗号隔开,逗号前后的选择器找到对应的标签分别作用一次css样式
语法:
p{ color:red; } span{ color:red; } label{ color:red; } 等价于 p , span , label{ color:red; }
根据标签上属性名及属性值找到满足条件的标签
选择器 | 描述 |
---|---|
[属性名] |
用于选取带有指定属性的元素。 |
[属性名=属性值] |
用于选取带有指定属性和值的元素。(精确匹配) |
[属性名*=属性值] |
匹配属性值中包含指定值的某个元素。(模糊匹配) |
[属性名~=属性值] |
用于选取属性值中包含指定词汇的元素。 |
[属性名^=属性值] |
匹配属性值以指定值开头的每个元素。 |
[属性名$=属性值] |
匹配属性值以指定值结尾的每个元素。 |
[属性名|=属性值]
: 用于选取带有以指定值开头的属性值的元素,该值必须是整个单词。
属性选择器一般用于提取公共样式
给标签添加一些功能性的效果
选择器 | 描述 |
---|---|
:link |
向未被访问过的超链接添加样式 |
:visited |
向访问过的超链接添加样式 |
:hover |
向鼠标悬停的标签添加样式 |
:active |
向被激活的标签添加样式 |
:focus |
向拥有键盘输入焦点的标签添加样式 |
注意:
:hover
必须放在:link
和:visited
之后,:active
必须放在:hover
之后,才有效果
outline
:设置边框外面的一圈轮廓线,使用方式border一样
outline: 宽度 类型 颜色; 取消input获取键盘输入焦点时默认样式 input:focus{ outline: none; }
//sass中hover案例:hover .header-right2后.info显示 .header-right2 { &:hover .info{ display: block; } .info { display: none; } }
概念:可以在HTML标签中通过css代码添加一块渲染区域,该区域可以设置样式
选择器 | 描述 |
---|---|
::first-letter |
找到指定的标签中的第一个字符添加样式 |
::first-line |
找到指定标签中的第一行添加样式 |
::selection |
向鼠标选中的区域添加样式 |
::before |
在指定的标签的内容之前添加的一块渲染区域 |
::after |
在指定的标签的内容之后添加一块渲染区域 |
注意:
::before
和::after
都必须搭配content:"";
一起使用
::before
和::after
渲染出来的是一个行内元素,如果需要设置宽高,需要转化为行内块级元素或块级元素
可以::before
和::after
来渲染三角形
找到页面中所有的标签添加样式
语法:
*{ css代码 }
基础选择器:id选择器、类选择器、标签选择器、属性选择器、伪类选择器、伪元素选择器、通配符选择器
组合选择器:后代选择器、子元素选择器、相邻兄弟选择器、后续兄弟选择器
在相同的选择器下,内联的权重最大,内部和外部采用就近原则
基础选择器:id选择器 > 类选择器(属性选择器) > 标签选择器 > 通配符选择器 > 继承的样式
组合选择器的权重需要将所有的基础选择器的权重加起来一起比较
加法运算
内联样式默认为1000
id选择器默认权重为100
类(属性)选择器默认权重为10
标签选择器默认权重为1
将所有的标签的权重进行相加,比较权重值的大小,值大的权重越高,如果权重值一样,后面的盖住前面
注意:不满足满10进1的规则,十几个标签选择器都没有一个类选择器的权重高
4个0
(0,0,0,0)
第一个0代表是否有内联样式,有则为1,无则为0
第二个0代表id选择器的个数
第三个0代表类(属性)选择器的个数
第四个0代表标签选择器的个数
计算出每种选择器的个数,从第一个0开始对比,值大的权重最大,值相同,对比第二个0,依次类推,如果最后一个0页相同,说明选择器权重值一样,后面样式盖住前面的样式。
!important
:比较暴力,会将css样式直接作用标签上,无视选择器的权重大小,比内联样式的权重都大,在开发中尽量少用,权重值的规则被破坏了,用多了样式没有规律,计算权重值失效,后期维护起来比较麻烦
语法:
div{ /* !important 比较暴力,会将css样式直接作用在标签上,无视选择器的权重 */ color: blue !important; }
继承的概念更多出现在编程语言中,js学习继承
css的继承是指子标签可以从父标签上将css样式继承过来,css样式可以作用在子标签上
CSS的继承分为两类:
自动继承:子元素不需要任何的操作,可以从父元素上继承css样式
手动继承:子元素需要敲代码,指定子元素某个属性从父元素上继承样式
inherit
:可以控制子元素的属性从父元素上继承该属性的值
margin: inherit;
文本样式可以被自动继承
color
:设置文本颜色
text-align
:设置文本的对齐方式
line-height
:设置行高
text-decoration
:设置文本修饰
letter-spacing
:设置字符间距
word-spacing
:设置字间距
text-indent
:设置首行缩进
text-transform
:设置大小写
font系列的字体样式也可以被自动继承
font-size
:设置字体的大小
font-family
:设置字体的类型
font-weight
:设置字体的粗细
font-style
:设置字体的风格
list-style属性,li标签可以从ul或ol标签上自动继承
cursor鼠标样式可以自动继承 pointer 抓手,(cursor: pointer;可以修改鼠标为手指)
width、height、margin、padding、background、border等等
display:inline-block
可以让块级元素同行显示,存在兼容问题
盒子之间存在5px的间距
浮动
可以让元素同行显示,排列不下会自动换行显示,不存在兼容问题
语法:
float:left | right | none;
left:设置左浮动
right:设置右浮动
none:默认值,不浮动
特点:
可以让元素同行显示,排列不下时会自动换行显示,不存在兼容问题
浮动元素会脱离文档里,在标准文档流之上
浮动元素不再占用原来的空间
行内元素设置浮动后,行内元素支持宽高
注意:
多个元素同时设置浮动时,后面浮动的元素会找到前面浮动元素的边界或第一个浮动元素找到父元素浮动的边界就停止下来
只有设置了浮动的元素才可以同行显示,
块级元素没设置宽度时,如果设置浮动,块级元素的宽度由内容决定
在页面布局过程中,页面中元素会按照从上到下,从左到右,块级元素独占一行,行级元素共享一行的排列规范
在页面布局过程中个,元素不再遵循标准文档流的规范,按照自己的排列规范进行排列
非浮动的元素会挤占浮动元素原来的空间
非浮动元素中如果有文本,文本会被浮动元素挤开
实现图文混排
文本
子元素浮动时,父元素高度会塌陷
清除浮动元素对非浮动元素的影响
语法:
clear: left | right | both;
left:清除左浮动的影响
right:清除右浮动的影响
both:清除左浮动和右浮动的影响
给受影响的元素添加clear样式
使用
将浮动元素和非浮动元素隔开
使用空白的div添加clear:both;
将浮动元素和非浮动元素隔开
给父元素添加伪元素选择器可以清除浮动的影响(推荐使用)
.clearfix::after{ content: ""; clear: both; display: block; }
注意:overflow:hidden
:可以解决子元素浮动,父元素高度塌陷的问题,借助是BFC容器的特点,不是清除浮动的方法
margin-top设置负值
会破坏文档流进行移动,移动完成之后会回到标准文档流之中
应用:内容和前面部分重叠
定位
是css提出一个比较重要的概念,可以让盒子按照指定的方向进行移动
在页面布局过程中,元素默认按照从上到下,从左到右,块级元素独占一行,行级元素共享一行的排列规范
在页面布局过程中,元素不再遵循标准文档流的规范,按照自己的排列规范进行排列
在页面布局过程中,元素在移动过程中不遵循标准文档流的规范,移动完成之后仍然在标准文档流之中
概念:元素参考原来的位置,按照指定的方向进行移动
语法:
position: relative; top: ; bottom:; left:; right:;
定义偏移量:可以设置正值或负值
top
:设置盒子与参考位置上边缘的距离
bottom
:设置盒子与参考位置下边缘的距离
left
:设置盒子与参考位置左边缘的距离
right
:设置盒子与参考位置右边缘的距离
特点:
设置了相对定位的元素,不会脱离文档流,会破坏文档流进行移动
原来的空间还在
只设置相对定位的元素,元素没有任何变化,一旦设置了偏移量,元素参考原来的位置进行移动
注意:
子元素设置相对定位,如果父元素进行了移动,子元素会跟着移动,原因在于:父元素进行移动后,子元素原来的位置也会跟着移动,而相对定位的元素是参加原来的位置进行移动的,所以也会跟着移动
相对定位一般不会单独使用,一般会配合绝对定位一起使用
设置绝对定位的元素会默认参考整个文档进行移动,按照指定的方向进行移动
语法:
position: absolute;
设置偏移量:可以正值也可以负值
top
:设置盒子与参考位置上边缘的距离
bottom
:设置盒子与参考位置下边缘的距离
left
:设置盒子与参考位置左边缘的距离
right
:设置盒子与参考位置右边缘的距离
特点:
绝对定位的元素会脱离文档流,在标准文档流之上
原来的空间不存在
只设置绝对定位的元素,只在当前位置脱离文档流,一旦设置偏移量,绝对定位的元素默认是参考整个文档进行移动或者参考最近的定位父级进行移动
注意:
后面绝对定位的元素会盖住前面定位的元素
行内元素设置绝对定位后,行内元素支持宽高
结构父级
标签在html代码结构中的父元素
定位父级
绝对定位的元素参考某个满足条件的父级标签进行移动,这个父元素就是定位父级,父级标签可以设置相对定位、绝对定位、固定定位作为定位父级
注意:
可以设置相对定位、绝对定位、固定定位作为绝对定位的定位父级,但是一般会采用相对定位(子绝父相)
多个定位父级时,绝对定位的元素是参考最近的定位父级进行移动
定位父级可以父亲、爷爷、曾祖父…..
概念:固定定位的元素可以固定在页面上,不会随着滚动条而滚动
语法:
position:fixed;
设置偏移量:可以正值也可以负值
top
:设置盒子与参考位置上边缘的距离
bottom
:设置盒子与参考位置下边缘的距离
left
:设置盒子与参考位置左边缘的距离
right
:设置盒子与参考位置右边缘的距离
特点:
固定定位的元素会脱离文档流,在标准文档流之上
原来的位置不再占用
只设置固定定位的元素,元素会在当前位置脱离文档流,会固定页面上,不会随着滚动条而滚动,一旦设置了偏移量,固定定位的元素会参考整个文档进行移动
设置定位元素(相对定位、绝对定位、固定定位)的层级关系,显示的顺序
语法:
z-index: 数字;
所有元素相当于默认为0,数字越大,定位层级越高,会显示在上方,数字相同时,按照代码结构显示顺序依次显示
注意:
相对定位、绝对定位、固定定位的元素默认后面定位的元素会盖住前面定位的元素
z-index只针对与相对定位、绝对定位、固定定位的元素才有效
没有设置绝对定位的元素的宽度设置百分比时,宽度是参考结构父级的宽度
设置绝对定位的元素,宽度设置百分比时,绝对定位的元素的宽度默认是参考整个文档的宽度,如果设置了定位父级,参考最近的定位父级的宽度
粘性定位position: sticky
可以被认为是相对定位(position: relative)和固定定位(position: fixed)的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。例如:
.sticky-header { position: sticky; top: 10px; }
在 视口滚动到元素 top 距离小于 10px 之前,元素为相对定位。之后,元素将固定在与顶部距离 10px 的位置,直到视口回滚到阈值以下。
粘性定位常作用在导航和概览信息(标题,表头,操作栏,底部评论等)上。这样,用户在浏览详细信息时,也能看到信息的概览和做一些操作,给用户带来便捷的使用体验。
粘性定位看着很简单,但也很容易出现不生效的情况。为帮助大家彻底理解粘性定位,本文会从 3 个方面来介绍:
粘性定位的原理。
不生效的情况。
具体的例子。
为便于理解粘性定位,这里引入四个元素:视口元素,容器元素,粘性约束元素 和 sticky 元素。它们的关系如下:
视口元素:显示内容的区域。会设置宽,高。一般会设置 overflow:hidden
。 容器元素:离 sticky 元素最近的能滚动的祖先元素。 粘性约束元素:粘性定位的父元素。有时,也会出现粘性约束元素就是容器元素的情况。 sticky 元素:设置了 position: sticky;
的元素。
滚动时,sticky 元素设置的 left, right, top, bottom 的值相对的是容器元素。当粘性约束元素滚出视口时,sticky 元素也会滚出视口。
此时,设置 position: sticky
相当于设置 position: relative
。
要生效,要指定 top, right, top 或 bottom 中的任何一个值。
不生效的原因:当粘性约束元素滚出视口时,sticky 元素也会滚出视口。粘性约束元素比 sticky 元素还小,sticky 元素没有显示固定定位状态的机会。
同样的,水平滚动时,粘性约束元素宽度小于等于 sticky 元素宽度时,也不会生效。
该情况的示例代码:
要生效,要把 overflow: hidden
的元素移除。
这个例子,我们来实现页面滚动到文章内容时,文章标题吸顶的效果。
HTML 结构如下:
网站头部彻底理解粘性定位 - position: sticky
...
在这个例子中,视口元素和容器元素都是 body
。sticky 元素是 .title
,因此只要在 sticky 元素上设置如下样式即可:
.title { position: sticky; top: 0; background-color: #fff; }
这个例子,我们来实现一块区域下有多篇文章,区域滚动到文章内容时,对应的标题和操作按钮吸顶的效果。
HTML 结构如下: