学习目标
- 理解定位的使用场景(一般用于解决盒子之间的层叠问题)
- 能够说出相对定位的特点
- 能够说出绝对定位的特点
- 能够说出固定定位的特点
- 能够理解子绝父相(子盒子绝对定位,父盒子相对定位,布局中会经常使用到)
- 能够实现z-index控制元素的层级(数值越大,层级越高)
- 能够说出vertical-align属性的使用(一般用于设置文本与行内块元素(图片)的垂直对齐方式)
- 能够说出三种隐藏元素的区别(内容超出隐藏、元素隐藏(看不见)、元素隐藏(不存在))
。。。。。。
理解上课的知识点……
定位
可以解决盒子与盒子之间的层叠问题
需求:现在在页面上有两个盒子,其中第二个盒子将第一个盒子压住了一半,怎么完成???
解决方案:
使用margin的单方向应用
但是实际开发中并不会使用marign完成层叠的效果
使用 定位 来完成效果
1
2
3
4
5
6
7.blue {
/*定位:position*/
position: absolute;
/*定位需要配合方位属性一起使用的!!*/
top: 150px;
left: 150px;
}
定位初体验
position:absolute;
设置定位
方位属性:
水平和垂直方向各选一个使用即可,选取的原则是就近原则 (离哪边近用哪个)
- 水平方向:
- left:相对于左边框的距离
- right:相对于右边框的距离
- 垂直方向:
- top:相对于上边框的距离
- bottom:相对于下边框的距离
静态定位(static)
标准流中的元素默认都是静态定位
代码: position: static;
(默认值)静态定位
静态定位是有一定争议的(有些人认为静态定位不算定位)
面试时候回答:三种定位方式,优先回答其他三个(相对、绝对、固定),如果四种再写静态定位
注意点: 静态定位不能通过方位属性进行移动
相对定位(relative)
盒子相对于自己之前的位置定位移动(红绿蓝)
代码:position: relative;
相对定位
特点:
要配合方位属性使用,不然无法移动
相对于自己原来的位置进行偏移
设置了相对定位的元素在页面上占据了位置-》没有脱标
应用场景:
- 配合绝对定位组CP(子绝父相),用的最多
- 用于小范围的移动(比如让某个标签稍微往下移动几个像素)
绝对定位(absolute)
绝对定位相对于非静态定位的父元素进行定位移动
代码:position: absolute;
绝对定位
特点:
- 需要配合方位属性移动使用
绝对定位相对谁移动?
默认相对于浏览器进行移动,但是如果有父元素,则相对于有定位的父元素进行移动
- 没有父元素 → 默认相对于浏览器进行移动
- 有父元素(判断父元素有没有定位)
- 没有定位 → 默认相对于浏览器进行移动
- 有定位 → 相对于有定位的父元素进行移动
绝对定位的元素在页面中 不占位置 → 脱标
应用场景:
- 子绝父相
子绝父相
让子元素相对于父元素进行移动 → 使用子绝父相,即子元素绝对定位,父元素相对定位
子绝父相在定位中使用的最常见,并且子绝父相不会影响页面的布局
ヾ(๑╹◡╹)ノ”比较子绝父相的好处
不会影响之后的布局
特殊情况: 当使用子绝父相的时候,父元素已经有绝对定位了,此时忽略父元素,直接使用子绝即可
子绝父绝的特殊情况
ヾ(๑╹◡╹)ノ”子绝父相定位居中案例
1 | 父盒子:600*400 子盒子:200*100 |
需求1: 通过定位让子盒子在父盒子水平居中
思路:
先让子盒子往右移动父盒子的一半
子绝父相,
left:50%;
再让子盒子往左移动自己的一半
普通做法:
margin-left:负子盒子宽度的一半
→ 属性值是负数缺点:子盒子宽度变化之后,需要重新改代码
优化做法:CSS3的新属性:
transform:translateX(-50%)
transform:translateX(-50%)
→ 表示沿着x轴的负方向移动自己的一半
需求2: 通过的定位让子盒子在父盒子中水平垂直都居中
同理嘛~
但是需要注意,transform属性也会层叠。
ヾ(๑╹◡╹)ノ”课堂练习:网站头部hot图标
ヾ(๑╹◡╹)ノ”课堂练习:小米商品页半透明效果
固定定位 (fixed)
盒子相对于浏览器进行定位移动
代码:position: fixed;
固定定位
特点:
配合方位属性一起使用
永远相进行移动
- 固定定位的元素也不在页面中占据位置 → 脱标
ヾ(๑╹◡╹)ノ”课堂练习:新浪网页
注意的是:脱标后的元素宽度默认由内容撑开
就算是div,脱标之后宽度也不再默认是父元素宽度
四种定位总结
定位方式 | 属性值 | 相对于谁移动 | 占不占位置 |
---|---|---|---|
静态定位 | static | 不能通过方位属性移动 | 占位置 |
相对定位 | relative | 相对于自己原来的位置 | 占位置 |
绝对地位 | absolute | 默认浏览器/相对于有定位的父元素移动 | 不占位置(脱标) |
固定定位 | fixed | 永远相对于浏览器 | 不占位置(脱标) |
元素的层级关系
开发者有时候需要设置元素的层级关系,层叠是谁在上面
标准流、浮动、定位的层级关系
两个盒子之间的比较
1 | 三种层叠关系: |
定位的层级关系
总结:
三者的层叠关系相同,HTML中写在下面元素的覆盖上面的
可以通过
z-index
属性手动设置定位元素的层级关系取值:没有单位的数字
效果:数值越大,层级越高
垂直对齐方式(vertical-align)
在开发中可能会遇到行内块元素垂直对齐的问题,此时可以使用
vertical-align
属性让图片
问题: 当图片和文字在一行中显示时,其实底部是不对齐的!
图片和文字底部对齐怎么做?
解决方法:
此时可以给图片设置 vertical-align:bottom;
即可
vertical-align
就是用来设置行内/行内块元素垂直对齐的问题的
取值:
- baseline:基线对齐
- top:顶部对齐
- middle:中线对齐
- bottom:底部对齐
项目中可以使用 vertical-align
解决的bug:
- 场景1 : 文本框(text)和表单按钮(button)无法对齐问题;
- 场景2 : input 和 img无法对齐的问题;
- 场景3 : div里放一个文本框 ,此时文本框无法靠顶;
- 场景4:div有img标签撑开,此时img标签下方有间隙(给img标签设置vertical-align即可);
- 场景5 : 使用line-height让img标签垂直居中,需要给img标签单独设置vertical-align:middle
注意点:
在学习完浮动之后,就不推荐优先使用行内块元素让div一行中显示,因为会出现垂直对齐的问题,以后优先使用浮动完成效果
溢出内容效果(overflow)
设置盒子内容超出部分的显示效果
取值:
- visible:超出部分可见(默认值)
- hidden:超出部分隐藏
- scroll:显示滚动条
- auto:根据内容的多少,自动显示或者隐藏滚动条
CSS三种隐藏方式
CSS中有三种与隐藏相关的属性,需要知道他们之间的区别
内容超出隐藏 overflow:hidden;
盒子内容超出部分隐藏
注意: 隐藏的元素的超出内容,元素本身可见
元素隐藏 visibility:hidden;
让元素隐藏,但在页面中仍然占位置 → 相当于穿上了隐形斗篷
注意:让元素隐藏,并且占位置
元素隐藏 display:none;
让元素隐藏,并且在页面中不占位置 → 相当于把元素删除了
注意:让元素隐藏,并且不占位置
CSS三种隐藏方式总结
属性 | 作用 | 特点 |
---|---|---|
overflow:hidden; |
超出内容隐藏 | 超出盒子部分的内容隐藏 |
visibility:hidden; |
元素本身隐藏 | 在页面中占位置 |
display:none; |
元素本身隐藏 | 在页面中不占位置 |
html 标签的嵌套规范(了解)
块级元素一般用于布局:比如div在页面的布局用的最多;
行内元素一般用于放文字:比如span、a标签里面一般放文字
标签之间是不能随意嵌套的,书写的时候应该有对应的规范:
注意点:
- 行内元素一般放文字或者行内元素,但是a标签之间不能互相嵌套(会被浏览器解析成两个a标签);
块级元素相当于一个容器,里面可以放文字、行内元素、块级元素,但是p标签不能嵌套块级元素(p标签会被拆分成两个p标签)
p标签作为一个段落标签,只有文字才会组成段落,所以p标签里面一般只放文字,不要放块级元素!!!
拓展(了解)
字符间距(letter-spacing)
默认情况下,页面中的文字都是紧挨着的,但是有少数情况下,我们也可以让文字之间的距离变大一点
文字有英文和中文
效果演示:
作用:设置文本中字符(中文汉字/英文字母)之间的距离
代码: letter-spacing: 20px;
取值: 可以是不同单位的数值,允许使用负值
1 |
|
单词间距(word-spacing)
对于英文来说,有的时候还需要设置单词之间的距离,这个怎么操作呢?
其实,英文单词之间的距离,指的得就是空格的宽度
效果:
代码: word-spacing: 20px;
取值: 可以是不同单位的数值,允许使用负值
1 |
|