定位导读
- 能够说出为什么要用定位
- 能够说出定位的四种分分类
- 能够说出4种定位各自的特点
- 能够说出为什么常用子绝父相布局
- 能够写出淘宝轮播图布局
- 能够说出显示隐藏的2种方式以及区别
一、定位
1.1 为什么需要定位
由于标准流跟浮动没有半发实现一些布局效果,此时就需要定位来实现
所以:
- 浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于纵向排列盒子
- 定位则是可以让盒子自由的在某个盒子内移动位置或者固定在屏幕中某个位置,并且可以压住其他盒子
1.2定位组成
-
定位:定位就是将盒子定在某一个位置,所以定位也是在摆盒子,按照定位的方式移动盒子
-
定位 = 定位模式 + 边偏移
-
定位模式用于指定一个元素在文档中的定位方式,边偏移则决定了该元素的最终位置。
-
边偏移
边偏移就是定位的盒子移动到最终位置,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fJi7kLhe-1619435630456)(/Users/chekaiyue/Library/Application Support/typora-user-images/image-20210426175926592.png)]
1.3 静态定位static
-
静态定位是元素的默认定位方式,无定位意思
-
语法:选择器 { position: static; }
-
静态定位按照标准流特性摆放位置,他没有边偏移
1.4 相对定位 relative
-
相对定位是元素在移动位置时,相对于它原来的位置移动,(自恋型)
-
语法:选择器 { position: relative; }
-
相对定位特点:
- 他是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。
- 原来在标准流的位置继续占有,后面的盒子仍然以标砖流的方式对待他。(不脱标,继续保留原来的位置)
因此相对定位并没有脱标。他最典型的应用是给绝对定位当爹。。。。
1.5 绝对定位 absolute
- 绝对定位是元素在移动位置的时候,是相对于它的祖先元素来说的
- 语法:选择器 { position: absolute; }
- 绝对定位的特点:
- 如果没有祖先元素或者祖先元素没有定位,则以浏览器为标准定位。
- 如果祖先元素有定位(相对、绝对、固定),则以最近一级的有定位的祖先元素为参考点移动位置。
- 绝对定位不再占有原先位置(脱标)
1.6 子绝父相由来
-
含义:子级是绝对定位的话,父级要用相对定位
① 子级绝对定位,不会占有位置,可以放到付盒子里面的任何一个地方,不会影响其他的兄弟盒子。
② 父盒子需要加定位限制子盒子在父盒子内显示
③ 父盒子布局时,需要占有位置,因此父亲只能是相对定位
-
总结:因为父级需要占有位置,因此时相对定位,子盒子不需要占有位置,则是绝对定位。
1.7 固定定位 fixed
-
固定定位是元素固定于浏览器可视区位置,主要使用场景:可以在浏览器页面滚动时元素的位置不会改变
-
语法: 选择器 { position : fixed; }
-
特点:
- 以浏览器的可视窗口为参照点移动元素
- 跟父元素没有任何关系
- 不随滚动条滚动而滚动
-
固定定位不再占有原先的位置
固定定位也是脱标的,其实固定定位可以看做一种特殊的绝对定位。
固定定位小技巧:固定在版心右侧位置
-
让固定定位的盒子left:50%,走到浏览器可视区(也可以看做版心)的一半
-
让固定定位的盒子margin-left:版心宽度一半距离,多走版心宽度一半的位置
就可以让固定定位的盒子贴着版心了。
1.8 粘性定位sticky
-
粘性定位可以被认为是相对定位和固定定位的混合,Sticky粘性的
-
语法:选择器 { position : sticky; top: 10px; }
-
特点:
- 以浏览器的可视窗口为参照点移动元素(固定定位特点)
- 粘性定位占有原先的位置(相对定位特点)
- 必须添加top、left、right、bottom其中一个才有效
跟页面滚动搭配使用,兼容性较差,IE不支持
1.9 定位的总结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KX2FwCB-1619435630460)(/Users/chekaiyue/Library/Application Support/typora-user-images/image-20210426183623472.png)]
1.10 定位的叠放次序 z-index
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序(z轴)
语法:选择器 { z-index: 1; }
- 数值可以是正整数、负整数或0,默认是auto,数值越大,盒子越靠上
- 如果属性相同,则按照书写顺序,后来居上
- 数字后面不能加单位
- 只有定位的盒子才有z-index属性
1.11 定位的拓展
1、绝对定位的盒子居中
加了绝对定位的盒子不能通过margin:0 auto实现水平居中,但是可以通过一下计算方式实现水平和垂直居中。
- left: 50%; 让盒子的上侧移动到腹肌元素的水平中心位置
- margin-left: -100px; 让盒子向左移动自身宽度的一半。
2、定位的特殊性
绝对定位和固定定位也和浮动类似
- 行内元素添加绝对或者固定定位,可以直接设置高度和宽度。
- 块级元素添加绝对定位或者固定定位,如果不给宽度或者高度,默认是内容的大小。
3、脱标的盒子不会出发外边距塌陷
浮动元素、绝对定位(固定定位)元素都不会出发外边距合并问题。
4、绝对定位(固定定位)会完全压住盒子
浮动元素不同,只会压住它下边标准流的盒子,但是不会压住下面标准流的文字(图片)
但是绝对定位(固定定位)会压住下面标准流所有的内容。
浮动之所以不会压住文字,因为浮动产生的目的最初就是为了做文字环绕效果的。文字会围绕浮动元素。
二、网页布局总结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VvEGODPa-1619435630462)(/Users/chekaiyue/Library/Application Support/typora-user-images/image-20210426185844054.png)]
三、元素的显示与隐藏
元素的显示与隐藏的本质:让一个元素在页面中隐藏或者显示出来
3.1 display属性
display属性用于设置一个元素应如何显示,
- display: none; 隐藏对象
- display: block; 除了转换为块级元素外,同时还有显示元素的意思。
display隐藏元素后,不再占有原来的位置。
3.2 visibility 可见性
visibility属性用于指定一个元素可见还是隐藏。
- visibility: hidden; 元素隐藏
- visibility: visible ; 元素可见
visibility隐藏元素后,继续占有原来的位置。
3.3 overflow溢出
overflow属性指定了如果内容溢出一个元素的框(超过其指定高度及宽度)时,会发生什么。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PAUjUQof-1619435630464)(/Users/chekaiyue/Library/Application Support/typora-user-images/image-20210426191024102.png)]
一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局。
但是如果有定位的盒子,慎用overflow:hidden,因为他会隐藏多余的部分。