[TOC]
# 定位
元素的定位属性,主要包括定位模式和边偏移两部分
**定位模式**
~~~
position: left | right | top | bottom
~~~
**边偏移**
| 边偏移属性 | 描述 |
| --- | --- |
| top | 顶端偏移量, 定义元素相对于其父元素上边线的距离 |
| bottom | 底部偏移量, 定义元素相对于其父元素下边线的距离 |
| left | 左侧偏移量, 定义元素相对于其父元素左边线的距离 |
| right | 右侧偏移量, 定义元素相对于其父元素右边线的距离 |
相对于父元素的距离
## 静态定位
默认方式
`position:static;` 标准流
## 绝对定位(看脸型)
`position:absolute; `
特点:
◆**自身从浏览器出发**
◆绝对定位之后,**元素不占位置**,**会脱标, 脱离标准流**。
◆**嵌套的盒子,父元素没有给自身绝对定位,子元素绝对定位,子元素从浏览器出发设置自身位置。**
◆**嵌套的盒子,父元素绝对定位,子元素绝对定位,子元素从父元素出发设置自身位置**。
◆行内元素转成行内块。(不推荐使用)
## 相对定位(自恋型)
还在标准流中
`position:relative; `
◆位置从自身出发。
◆设置相对定位之后,**还占据原来的位置**。
◆子绝父相,子元素绝对定位,父元素相对定位。
◆嵌套的盒子,父元素相对定位,子元素绝对定位,子元素从父元素出发设置自身位置。
◆不能将行内元素转成行内块。
## 固定定位
`position:fixed;`
特点:
◆位置从浏览器出发。
◆**不占据原来的位置,会脱标**
◆可以将行内元素转换为行内块。(不推荐使用)
**固定定位一定要写宽和高, 除非有内容撑开不用写**
`height: 100%;`
`width: 100%;`
## 子绝父相
子级是绝对定位, 父级用相对定位
绝对定位是将元素依据最近的已经定位绝对,固定或相对定位的父元素进行定位
就是子级是绝对定位, 父级只要是定位就可以(不管是绝对还是相对)
# 定位的盒子居中对齐
◆`margin:0 auto;` **只能**让标准流的盒子居中对齐。
◆子绝父相的盒子,居中对齐,
首先left 50%, 父盒子一半,
使用margin-left:负值, 向左走自己外边距负的一半。
~~~
<style>
.father {
width: 800px;
height: 400px;
background-color: pink;
margin: 40px auto;
}
.son {
width: 100px;
height: 40px;
background-color: purple;
position: absolute;
/* 加了绝对定位的盒子, 左右auto就无效了 */
/* margin: 0 auto; */
left: 50%;
/* left 父盒子宽度的一半 */
margin-left: -50px;
/* 左走自己宽度 的一半 */
top: 50%;
margin-top: -20px;
}
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
~~~
# 叠加次序
在css中,要想调整重叠定位元素的堆叠顺序, 可以对定位元素应用`z-index`层叠等级属性, 其值可以为正整数,负整数和0
比如: `z-index: 2;`
注意:
1. `z-index`的属性值是0, 取值越大, 定位元素在层叠元素中越居大
2. 如果取值相同,则根据书写顺序,后来居上
3. 后面数字一定不能加单位
4. 只有相对定位,绝对定位,固定定位有此属性,其余标准流,浮动,静态定位都无此属性,亦不可指定此属性
~~~
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
position: absolute; /* 绝对定位 */
top: 0;
left: 0;
}
div:first-child {
z-index: 1; /* font-weight: 700 */
}
div:nth-child(2) {
background-color: purple;
top: 30px;
left: 30px;
z-index: 2;
}
div:last-child {
background-color: skyblue;
top: 60px;
left: 60px;
}
</style>
</head>
<body>
<div></div>
<div></div>
<div></div>
</body>
~~~
# 定位模式转换
跟 浮动一样, 元素添加了 绝对定位和固定定位之后, 元素模式也会发生转换, 都转换为 行内块模式,
** 因此 比如 行内元素 如果添加了 绝对定位或者 固定定位后 浮动后,可以不用转换模式,直接给高度和宽度就可以了。**
# 四种定位总结
| 定位模式 | 是否脱标占有位置 | 是否可以使用边偏移 | 移动位置基准 |
| ------------ | ---------- | --------- | ---------------- |
| 静态static | 不脱标,正常模式 | 不可以 | 正常模式 |
| 相对定位relative | 不脱标,占有位置 | 可以 | 相对自身位置移动(自恋型) |
| 绝对定位absolute | 完全脱标,不占有位置 | 可以 | 相对于定位父级移动位置(拼爹型) |
| 固定定位fixed | 完全脱标,不占有位置 | 可以 | 相对于浏览器移动位置(认死理型) |
- HTML
- 标签
- 超链接
- 列表
- 表格和表单
- h5新增标签
- 快捷方式
- 标签包含
- CSS
- 选择器
- 行内,块元素,链接
- css三大特性
- 盒子模型
- 定位
- css可见性
- emment书写
- 文本元素
- 外观属性
- 背景
- 浮动
- ps
- 用户界面样式
- 显示和隐藏
- 过渡
- 2D,3D变形
- 动画animation
- 伸缩布局(CSS3)
- BFC
- 优雅降级和渐进增强
- 3D旋转
- 双飞翼和圣杯
- JS基础
- 输出消息的几种方式
- 数据类型
- Date对象
- Math对象
- Array对象
- 字符串常用方法
- 数据类型转换
- 等号运算
- 代码调试
- 数组
- 函数
- WebAPI
- webapi简介
- 获取页面元素
- 事件
- 属性操作
- 创建元素
- 节点操作
- 事件详解
- BOM
- 位置相关属性
- 拖拽弹窗
- 弹出层加遮罩
- ES6
- let和const
- 解构表达式变化
- 函数优化
- map和reduce
- nrm
- npm
- npm基础
- package.json
- 淘宝镜像
- webpack
- 介绍
- 多入口文件(Multiple entry files)
- Webpack CSS loader加载器
- webpack Image loader 加载图片
- uglify-js压缩打包JS
- webpack构建本地服务器
- vue内部指令
- v-if,v-show,v-for
- v-text,v-html
- v-on
- v-model
- v-bind
- v-pre,v-cloak,v-once
- vue全局api
- Vue.directive 自定义指令
- vue.extend构造器的延伸
- vue.set全局操作
- Vue的生命周期(钩子函数)
- Template 制作模版
- Component 初识组件
- Component 组件props 属性设置
- Component 父子组件关系
- Component 标签
- vue选项
- propsData Option全局扩展数据传递
- computed Option 计算选项
- Methods Option 方法选项
- watch选项监控数据
- Mixins 混入选项操作
- Extends Option 扩展选项
- delimiters 选项
- vue实例和内置组件
- 实例属性
- 实例方法
- 实例事件
- 内置组件 -slot
- vue-cli
- vue-cli介绍
- 项目目录结构
- vue-cli模板
- vue-router
- 简介
- 配置子路由
- 参数传递
- 单页面多路由区域操作
- url传递参数
- vscode