1.静态定位
所有元素的默认定位方式。
position:static;
2.相对定位
特性: 相对于自身在浏览器中的位置定位,不脱离文档流。
position:relative;
配合属性
同一方向的属性只能使用一个 top,right,bottom,left 来控制
3.绝对定位
特性: 1.脱离文档流,原先位置不保留; 2. 默认使用了绝对定位元素,无论有没有父元素,参照点是body浏览器视口区域; 3.如果祖先元素使用了定位属性,则相对于祖先元素定位。
水平垂直居中
1.给父元素设置border,给子元素设置margin:width/2;
2.给父元素设置box-sizing:border-box padding:父元素宽度减子元素宽度再除二分之一;
3.子绝父相,给子元素设置top,left,bottom,right全部为0,margin:auto;
4.子绝父相,给子元素设置top:50%,left:50%,margin-left:-width/2,margin-top:-height/2;
<style>
.parent{
width: 200px;
height: 200px;
background-color: blue;
/* 1.水平垂直居中 通过给父元素设置边框 */
/* border: 1px solid red; */
/* 2.1水平垂直居中 通过父元素挤压padding */
/* padding: 50px; */
/* 2.2 设置边框盒模型*/
/* box-sizing: border-box; */
/* 3.1父元素相对定位 */
/* position: relative; */
/* 4.1父元素相对定位 */
position: relative;
}
.child{
width: 100px;
height: 100px;
background-color: red;
/* 1.2 margin上下左右为宽高的各一半 */
/* margin: 50px; */
/* 3.2子元素设置绝对定位
配合属性全部为0
margin:auto
*/
/* position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto; */
/* 4.2 子元素绝对定位
top:50% left:50%
margin-left:-width/2
margin-top:-height/2
*/
position:absolute;
top: 50%;
left: 50%;
margin-left: -50px;
margin-top: -50px;
}
</style>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
固定定位
特性: 脱离文档流,相对于浏览器视口区域,不保留原先位置。
position:fixed;
粘滞定位
特性: relative + fixed 定位一个定位属性,默认相对定位达到阈值就是固定定位,不脱离文档流,原先位置保留。
如:设置了top: 50px,那么在sticky元素到达距离相对定位的元素顶部50px的位置时固定,不再向上。
设置 position:sticky同时给一个 (top,bottom,right,left)之一即可
使用条件
- 父元素不能overflow:hidden或者overflow:auto属性;
- 必须指定top、bottom、left、right4个值之一,否则只会处于相对定位 ;
- 父元素的高度不能低于sticky元素的高度;
- sticky元素仅在其父元素内生效。
z-index
默认情况下所有的元素都有一个默认的z-index属性, 取值是0。
更改元素堆叠顺序
z-index:0
使用了定位元素 z-index:-1;
两列布局,自适应
<style>
.left {
width: 300px;
background-color: red;
float: left;
}
.right {
background-color: blueviolet;
/* 触发BFC */
overflow: auto;
}
</style>
</head>
<body>
<div class="left">左边定宽</div>
<div class="right">右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应
右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应
右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应
右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应
右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应
右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应
右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应
右边自适应右边自适应右边自适应右边自适应右边自适应右边自适应
</div>
</body>
运行结果:
三列布局,自适应
<style>
/* 两列定宽 中间自适应 */
.left,
.right {
width: 200px;
height: 200px;
background-color: darkorange;
}
.left {
float: left;
}
.right {
float: right;
}
.center {
height: 400px;
background-color: darkgoldenrod;
/* margin: 0 200px; */
/* 触发BFC */
overflow: hidden;
}
</style>
</head>
<body>
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>
</body>
运行结果:
九宫格
<style>
.container {
/* 水平居中 */
margin: 0 auto;
width: 600px;
height: 600px;
/* background-color: brown; */
}
.container>div {
width: 200px;
height: 200px;
float: left;
}
.container>div:nth-child(odd) {
background-color: rgb(23, 212, 212);
}
.container>div:nth-child(even) {
background-color: rgb(238, 255, 127);
}
</style>
</head>
<body>
<div class="container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</body>
运行结果:
头部导航栏
<style>
* {
margin: 0;
padding: 0;
list-style: none;
}
/* 设置父容器样式 */
.container {
width: 726px;
height: 8888px;
/* background-color: brown; */
margin: 0 auto;
}
/* 设置一级菜单样式 */
.container ul li {
/* 右边框 */
border-right: 1px solid white;
width: 120px;
height: 50px;
text-align: center;
/* 文字垂直居中 */
line-height: 50px;
font-size: 20px;
/* 浮动 */
float: left;
background-color: royalblue
}
.container ul li a {
/* a 标签颜色不可以继承 h1标题字体大小也不可以继承 */
color: #fff;
text-decoration: none;
}
/* 设置二级菜单隐藏 */
.container ul li ul {
display: none;
}
.container ul li:hover {
background-color: darkcyan;
}
/* 设置二级菜单显示 */
.container ul li:hover ul {
display: block;
}
</style>
</head>
<body>
<div class="container">
<ul>
<li><a href="#">首页</a></li>
<li>
<a href="#">亲子旅游</a>
<!-- 二级菜单栏 -->
<ul>
<li>样式1</li>
<li>样式2</li>
<li>样式3</li>
</ul>
</li>
<li>
<a href="#">居家生化</a>
<!-- 二级菜单栏 -->
<ul>
<li>样式1</li>
<li>样式2</li>
<li>样式3</li>
</ul>
</li>
<li><a href="#">宠物生活</a>
<!-- 二级菜单栏 -->
<ul>
<li>样式1</li>
<li>样式2</li>
<li>样式3</li>
</ul>
</li>
<li><a href="#">美食酒水</a></li>
<li><a href="#">个护清洁</a></li>
</ul>
</div>
</body>
运行结果:
网易严选宫格
<style>
.container {
width: 800px;
height: 600px;
margin: 0 auto;
background-color: darkgray;
}
.container>div:first-child {
width: 230px;
height: 600px;
background-color: darkblue;
margin-left: 0;
}
/* 剩余div样式 */
.container>div {
width: 180px;
height: 295px;
margin-left: 10px;
background-color: yellow;
float: left;
}
.container>div:nth-child(n+5) {
background-color: green;
margin-top: 10px;
}
</style>
</head>
<body>
<div class="container">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</body>
运行结果: