Skip to content
粘性定位使用
  • 原理:
    • 上层元素开启定位
    • 子元素开启粘性定位(相对于上层带有定位的元素,未有定位的元素,相对于body)
    • 子元素设置 bottom,top,left,right 最少任意一个数值才可生效
    • 子元素设置 top: 0 时,子元素会固定在顶部
    • 子元素设置 bottom: 0 时,子元素会固定在底部
    • 子元素设置 left: 0 时,子元素会固定在左侧
    • 子元素设置 right: 0 时,子元素会固定在右侧

楼层滚动效果

  • 原理:
    • 外层元素开启定位
    • 内层元素开启粘性定位
    • 内层元素设置 top: 0 时,当内层元素到达上层带定位的元素的顶部时,内层元素会固定在顶部
    • 当向下滑动时,下一个元素还没滚上来,则不会挤走前一个元素,继续固定在这个位置
    • 当向下滑动时,下一个元素滚上来了,达到了这个位置,则会挤走前一个元素,固定在这个位置(因为粘性定位同一个位置只能固定一个元素,所以会挤走前一个元素)
html
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</title>
		<style>
			body {
				margin: 0;
				padding: 0;
			}
 
			.container {
				width: 375px;
				height: 300px;
				position: relative;
				overflow: auto;
			}
 
			.list {
				background: pink;
			}
 
			.list-content,
			.list-content>div {
				padding: 200px 20px;
			}
 
			.list-header {
				padding: 10px;
				background: #2D2D2D;
				color: #FFFFFF;
				font-weight: bold;
				position: sticky;
				top: 0px;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="list">
				<div class="list-group">
					<div class="list-header">A</div>
					<div class="list-content">
                        我是内容
					</div>
				</div>
				<div class="list-group">
					<div class="list-header">B</div>
					<div class="list-content">
                        我是内容
					</div>
				</div>
				<div class="list-group">
					<div class="list-header">C</div>
					<div class="list-content">
                        我是内容
					</div>
				</div>
				<div class="list-group">
					<div class="list-header">D</div>
					<div class="list-content">
                        我是内容
					</div>
				</div>
			</div>
		</div>
	</body>
</html>

顶部固定效果

  • 原理:
    • 外层元素开启定位
    • 内层元素开启粘性定位
    • 内层元素设置 top: 0 时,当内层元素到达上层带定位的元素的顶部时,内层元素会固定在顶部
html
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</title>
		<style>
			body {
				margin: 0;
				padding: 0;
			}
 
			.container {
				width: 375px;
				height: 300px;
				position: relative;
				overflow: auto;
			}
 
			.list {
				background: pink;
			}
 
			.list-content,
			.list-content>div {
				padding: 200px 20px;
			}
 
			.list-header {
				padding: 10px;
				background: #2D2D2D;
				color: #FFFFFF;
				font-weight: bold;
				position: sticky;
				top: 0px;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="list">
				<div class="list-group">
					<div class="list-header">A</div>
					<div class="list-content">
                        我是内容
					</div>
				</div>
			</div>
		</div>
	</body>
</html>

底部固定效果

  • 这里要注意把元素位置挪到下面
html
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>Document</title>
		<style>
			body {
				margin: 0;
				padding: 0;
			}
 
			.container {
				width: 375px;
				height: 300px;
				position: relative;
				overflow: auto;
			}
 
			.list {
				background: pink;
			}
 
			.list-content,
			.list-content>div {
				padding: 200px 20px;
			}
 
			.list-header {
				padding: 10px;
				background: #2D2D2D;
				color: #FFFFFF;
				font-weight: bold;
				position: sticky;
				bottom: 0px;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="list">
				<div class="list-group">
					<div class="list-content">
                        我是内容
					</div>
                    <!-- 这里要注意把元素位置挪到下面 -->
                    <div class="list-header">A</div>
				</div>
			</div>
		</div>
	</body>
</html>