CSS定位是用来控制元素在页面上的位置和排列方式的技术。CSS有三种基本的定位机制:普通流、浮动流、定位流,其中定位流包括相对定位、绝对定位和固定定位。
接下来,博主会从CSS定位、CSS边偏移、元素的显示与隐藏,这三部分进行讲解
定位:将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子
定位=定位模式+边偏移
定位模式用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置
定位模式决定元素的定位方式,是通过CSS的position属性来设置的
静态定位是元素的默认定位方式,无定位的意思
#静态定位语法
position: static
相对定位是元素在移动位置时,是相对于它原来的位置来说的
#相对定位语法
position: relative
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.box1 {
//设置盒子相对定位
position: relative;
left: 130px;
top: 140px;
width: 200px;
height: 200px;
background-color: pink;
}
.box2 {
width: 200px;
height: 200px;
background-color: palegreen;
}
style>
head>
<body>
<div class="box1">div>
<div class="box2">div>
body>
html>
绝对定位是元素在移动位置时,是相对于它的祖先元素来说的
#绝对定位
position: absolute
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.box1 {
position: absolute;
left: 300px;
bottom: 390px;
width: 200px;
height: 200px;
background-color: pink;
}
.big {
width: 500px;
height: 500px;
background-color: palegreen;
}
style>
head>
<body>
<div class="big">
<div class="box1">div>
div>
body>
html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.box1 {
position: absolute;
left: 30px;
bottom: 10px;
width: 200px;
height: 200px;
background-color: pink;
}
.big {
width: 500px;
height: 500px;
background-color: palegreen;
}
.bbig{
position: relative;
width: 700px;
height: 700px;
padding: 20px;
background-color: blueviolet;
}
style>
head>
<body>
<div class="bbig">
<div class="big">
<div class="box1">div>
div>
div>
body>
#固定定位fixed
position: fixed
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
.big {
position: fixed;
top: 100px;
right: 40px;
}
style>
head>
<body>
<div class="big">
<img src="../02/images/user.png" alt="">
div>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
<p>好好学习p>
body>
假如让盒子固定在版心右侧位置
#粘性定位sticky
position: sticky
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
<style>
body{
height: 3000px;
}
.fixed{
width: 800px;
height: 50px;
background-color: pink;
margin: 100px auto;
position: sticky;
top: 0;
}
style>
head>
<body>
<div class="fixed">导航栏div>
body>
在使用定位布局时,可能会出现盒子重叠的情况。这时可以使用z-index来控制盒子的前后次序
#定位叠放次序
z-index: 数值
加了绝对定位absolute的盒子不能通过margin: auto来实现水平居中,但是可以通过以下计算方法实现水平和垂直居中
绝对定位position: absolute和固定定位position: fixed也和浮动float类似
浮动元素、绝对定位(固定定位)元素的都不会触发外边距合并的问题
边偏移就是定位的盒子移动到最终位置
子绝父相:子级是绝对定位(absolute)的话,父级要用相对定位(relative)
相对定位经常用来作为绝对定位的父级
总结:因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位