0基础学web前端第8天:CSS定位(position)
1.定位(position)
1.1 CSS布局的三种机制
用 CSS 来摆放盒子
3 种机制来设置盒子的摆放位置,分别是普通流(标准流)、浮动和定位
会独占一行,从上向下 常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table。
会按照顺序,从左到右 常用元素:span、a、i、em等。
b.浮动
浮
c.定位
定在浏览器的某一个位
1.2 为什么使用定位
1.在图片上移动,吸引用户的眼球
2. 当我们滚动窗口的时候,盒子是固定屏幕某个位置的
标准流或浮动
定在某一个位
1.3定位详解
定位也是用来布局,它有两部分组成:定位=定位模式+边偏移
1.3.1边偏移
简单说, 我们定位的盒子,是通过边偏移来移动位置的。top
、bottom
、left
和 right
属性定义元素的边偏移
示例 | 描述 | |
---|---|---|
top |
top: 80px |
顶端偏移量,定义元素相对于其父元素上边线的距离。 |
bottom |
bottom: 80px |
底部偏移量,定义元素相对于其父元素下边线的距离。 |
left |
left: 80px |
左侧偏移量,定义元素相对于其父元素左边线的距离。 |
right |
right: 80px |
右侧偏移量,定义元素相对于其父元素 |
定位的盒子有了边偏移才有价值。 一般情况下,凡是有定位地方必定有边偏移。
1.3.2定位模式(position)
position
属性定义元素的定位模式
语义 | |
---|---|
static |
静态定位 |
relative |
相对定位 |
absolute |
绝对定位 |
fixed |
固定 |
1.2.1静态定位(static)
1.2.2相对定位(relative)
是元素相对
相对于 自己原来在标准流中位置来移动的。在标准流的区域继续占有
1.2.3绝对定位(absolute)
如果父元素要有定位,将元素依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。
绝对是以带有定位的父级元素来移动位置 ,如果父级都没有定位,则以浏览器文档为准移动位置。不保留原来的位置,完全是脱标的。因为绝对定位的盒子是拼爹的,所以要和父级搭配一起来使用。刚才咱们说过,绝对定位,要和带有定位的父级搭配使用,那么父级要用什么定位呢?子级是绝对定位,父级要用相对定位。
叠加在其他图片上方,应该使用绝对定位,因为绝对定位完全脱标应该使用相对定位,因为相对定位不脱标
1.3.2.4固定定位(fixed)
是绝对定位
IE 6 等低版本浏览器不支持固定定位。在使用固定定位时,如果盒子中没有内容,需要指定宽度。顶部 margin
2.定位(position)的扩展
2.1绝对定位的盒子居中
不能通过设置 margin: auto
设置水平居中
绝对定位
- :让盒子的左侧移动到父级元素的水平中心位置
- :让盒子向左移动自身宽度的一半
2.2 堆叠顺序(Z-index)
定位布局时,可能会出现盒子重叠的情况后来者居上z-index
层叠等级属性可以调整盒子的堆叠顺序
z-index的特性如下:
:正整数、负整数或 0
2.属性值相同,则按照书写顺序,后来居上
3.数字后面不能加单位。
只能应用于相对定位、绝对定位和固定定位的元素,其他标准流、浮动和静态定位
2.3定位改变display属性
前面我们讲过, display 是 显示模式, 可以改变显示模式有以下方式:可以用inline-block 转换为行内块。可以用浮动 float 默认转换为行内块(类似,并不完全一样,因为浮动是脱标的)。绝对定位和固定定位也和浮动类似, 默认转换的特性 转换为行内块。
浮动、固定定位和绝对定位
3.综合演练-轮播图
圆角矩形设置4个角
圆角矩形可以为4个角分别设置圆度, 但是是有顺序的
border-top-left-radius:20px; border-top-right-radius:20px; border-bottom-right-radius:20px; border-bottom-left-radius:20px;
如果4个角,数值相同
border-radius: 15px;
里面数值不同,我们也可以按照简写的形式,具体格式如下:
border-radius: 左上角 右上角 右下角 左下角;
还是遵循的顺时针。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>淘宝轮播图</title> <style> * { margin: 0; padding: 0; } li { list-style: none; } .taobao { /*子绝父相*/ position: relative; width: 520px; height: 280px; background-color: pink; margin: 100px auto; } /*并集选择器 集体声明 让代码更简洁*/ .arrow-l, .arrow-r { /*只能用定位来做,才能压住盒子*/ /*不要占有位置 随便移动位置 必须用绝对定位*/ position: absolute; /*垂直居中公式*/ /*1. 走父级高度的 50%*/ top: 50%; /*2. 往上走 自己高度 的一半*/ margin-top: -15px; /*绝对定位的盒子 无须转换,直接给大小就好了*/ width: 20px; height: 30px; background: rgba(0, 0, 0, .2); text-decoration: none; color: #fff; /*text-align: center;*/ line-height: 30px; } .arrow-l { left: 0; /*圆角矩形*/ /*border-radius: 15px;*/ /*右上角*/ border-top-right-radius: 15px; /*右下角*/ border-bottom-right-radius: 15px; } .arrow-r { right: 0; text-align: right; /*圆角矩形*/ /*border-radius: 15px;*/ /*border-radius: 左上角 右上角 右下角 左下角;*/ border-radius: 15px 0 0 15px; } .arrow-l:hover, .arrow-r:hover { background: rgba(0, 0, 0, .4); } .circle { position: absolute; left: 50%; margin-left: -35px; bottom: 15px; width: 70px; height: 13px; background: rgba(255, 255, 255, 0.3); border-radius: 7px; } .circle li { float: left; width: 8px; height: 8px; background-color: #fff; margin: 3px; border-radius: 50%; } /*current 当前的意思 此处一定要注意 优先级的问题*/ .circle .current { background-color: #ff5000; } </style> </head> <body> <div class="taobao"> <!-- 左按钮 --> <a href="#" class="arrow-l"> < </a> <!-- 右按钮 --> <a href="#" class="arrow-r"> > </a> <!-- 图片 --> <img src="images/taobao.jpg" alt=""> <!-- 小圆点 --> <ul class="circle"> <li></li> <li class="current"></li> <li></li> <li></li> <li></li> </ul> </div> </body> </html>
4.定位总结
是否脱标占有位置 | 移动位置基准 | 模式转换(行内块) | 使用情况 | |
---|---|---|---|---|
静态static | 不脱标,正常模式 | 正常模式 | 不能 | 几乎不用 |
相对定位relative | 不脱标,占有位置 | 相对自身位置移动 | 不能 | 基本单独使用 |
绝对定位absolute | 完全脱标,不占有位置 | 相对于定位父级移动位置 | 能 | 要和定位父级元素搭配使用 |
固定定位fixed | 完全脱标,不占有位置 | 相对于浏览器移动位置 | 能 |
5.网页布局总结
一个完整的网页,有标准流 、 浮动 、 定位 一起完成布局的。每个都有自己的专门用法。
1). 标准流
可以让盒子上下排列 或者 左右排列的
2). 浮动
可以让多个块级元素一行显示 或者 左右对齐盒子 浮动的盒子就是按照顺序左右排列
3). 定位
定位最大的特点是有层叠的概念,就是可以让多个盒子 前后 叠压来显示。 但是每个盒子需要测量数值。
评论