CSS 粘性定位

CSS 粘性定位语法

在 CSS 中,粘性定位是一种混合了相对定位和固定定位的定位方式。粘性定位的元素在滚动到指定值之前会表现得像相对定位元素,之后则表现为固定定位,就像是在页面中 “粘住” 一样。

在 CSS 中,我们可以使用 position: sticky; 来实现粘性定位。

语法:

position: sticky;
top: 数值;
bottom: 数值;
left: 数值;
right: 数值;

说明:

粘性定位的元素会根据最近的滚动父元素来进行定位。我们可以通过 topbottomleftright 这 4 个属性来设置元素在何时变为固定定位。

需要注意的是,要使得粘性定位生效,我们必须指定 top、right、bottom 或 left 属性中的至少一个,且父元素的 overflow 属性值不能是 hidden 或 auto。

CSS 粘性定位示例

接下来,我们通过几个简单的例子来讲解 CSS 粘性定位是如何使用的。

示例 1:CSS 粘性定位的基本用法

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        div {
            height: 200px;
            line-height: 200px;
            font-size: 30px;
            text-align: center;
            background-color: lightskyblue;
        }
        #sticky {
            position: sticky;
            top: 0;
            background-color: hotpink;
            padding: 50px;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div>1</div>
    <div id="sticky">sticky</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <div>6</div>
    <div>7</div>
    <div>8</div>
</body>
</html>

页面效果如下图所示。

CSS 粘性定位示例

分析:

在默认情况下,所有 div 元素都在正常文档流中垂直放着。当我们从上到下滚动页面时,sticky 元素一开始会随着页面滚动。但是,当元素的顶部到达视口顶部时,它会 “粘” 在页面顶部(top: 0),而不会再随页面滚动。这就是 “粘性定位” 效果。

提示: 绿叶网的顶部导航的固定效果,也可以使用粘性定位(position: sticky;)来实现的。

示例 2:粘性侧边栏

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        .container {
            display: flex;                /* 使用 flexbox 布局 */
            height: 1200px;               /* 使容器足够高以产生滚动 */
        }
        .sidebar {
            width: 150px;
            background-color: #ff9800;  /* 橙色背景 */
            color: white;
            padding: 15px;
            position: sticky;
            top: 20px;                    /* 当侧边栏顶部距离视口顶部 20px 时固定 */
            align-self: flex-start;       /* 防止侧边栏拉伸 */
        }
        .main-content {
            flex-grow: 1;                 /* 主内容占据剩余空间 */
            padding: 20px;
            background-color: #fff;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="sidebar">
            <h3>粘性侧边栏</h3>
            <ul>
                <li>链接 1</li>
                <li>链接 2</li>
                <li>链接 3</li>
            </ul>
        </div>
        <div class="main-content">
            <h2>主内容区域</h2>
            <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><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>
        </div>
    </div>
</body>
</html>

页面效果如下图所示。

CSS 粘性侧边栏

分析:

除了顶部,我们也可以使用粘性定位将元素固定在视口的底部、左侧或右侧。在这个例子中,侧边栏会随主内容一起滚动。当侧边栏的顶部距离视口顶部达到 20px 时,它会固定在这个位置,直到 container 容器滚出屏幕。

这个例子比较复杂,并且还使用到了 flex 布局。建议小伙伴们把基础打扎实了再来好好理解一下。

上一篇: CSS 绝对定位

下一篇: CSS px

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号