CSS 美化页面(五)

发布于:2025-04-20 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、position属性

属性值 描述 应用场景
static 默认定位方式,元素遵循文档流正常排列,top/right/bottom/left 属性无效‌。 普通文档流布局,默认布局,无需特殊定位。
relative 相对定位,相对于元素原本位置进行偏移,但仍保留原空间‌。 微调元素位置,或作为子元素绝对定位的基准(父元素设为 relative)‌。
absolute 绝对定位,相对于最近的非 static 祖先元素定位,脱离文档流‌。 创建浮动菜单、对话框,或重构页面布局(需配合父级 relative 使用)‌。
fixed 固定定位,相对于视口定位,不随页面滚动改变位置‌。 固定导航栏、回到顶部按钮等需要始终可见的元素‌。
sticky 粘性定位,在特定滚动阈值前表现为 relative,超过后变为 fixed‌。 实现滚动时固定表头、侧边导航栏等效果‌。

二、定位的应用

1、static 默认定位

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>默认定位示例</title>
    <style>
        /* 父容器样式 */
        .container {
            width: 300px;
            height: auto;
            background-color: #f0f8ff; /* 浅蓝色背景 */
            border: 2px solid #ddd;
            margin: 20px auto;
            padding: 10px; /* 内边距 */
        }

        /* 第一个盒子:默认定位 */
        .box1 {
            width: 100px;
            height: 100px;
            background-color: #4CAF50; /* 绿色背景 */
            margin-bottom: 10px; /* 下方间距 */
        }

        /* 第二个盒子:默认定位 */
        .box2 {
            width: 100px;
            height: 100px;
            background-color: #FF5722; /* 橙色背景 */
            margin-bottom: 10px; /* 下方间距 */
        }

        /* 第三个盒子:默认定位 */
        .box3 {
            width: 100px;
            height: 100px;
            background-color: #2196F3; /* 蓝色背景 */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box1">默认定位1</div>
        <div class="box2">默认定位2</div>
        <div class="box3">默认定位3</div>
    </div>
</body>
</html>

  1. 排列方式

    • 三个盒子按照正常的文档流从上到下排列。
    • 每个盒子之间有一定的间距(通过 margin-bottom 设置)。
  2. 布局特点

    • 没有使用任何定位属性,盒子不会发生重叠,也不会偏移。

2、relative相对定位

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>相对定位示例</title>
    <style>
        /* 父容器样式 */
        .container {
            position: relative; /* 父容器设置为相对定位 */
            width: 300px;
            height: auto;
            background-color: #f0f8ff; /* 浅蓝色背景 */
            border: 2px solid #ddd;
            margin: 20px auto;
            padding: 10px; /* 内边距 */
        }

        /* 第一个盒子:相对定位 */
        .box1 {
            position: relative;
            width: 100px;
            height: 100px;
            background-color: #4CAF50; /* 绿色背景 */
            top: 10px; /* 向下偏移 10px */
            left: 10px; /* 向右偏移 10px */
        }

        /* 第二个盒子:相对定位 */
        .box2 {
            position: relative;
            width: 100px;
            height: 100px;
            background-color: #FF5722; /* 橙色背景 */
            top: 20px; /* 向下偏移 20px */
            left: 20px; /* 向右偏移 20px */
        }

        /* 第三个盒子:相对定位 */
        .box3 {
            position: relative;
            width: 100px;
            height: 100px;
            background-color: #2196F3; /* 蓝色背景 */
            top: 30px; /* 向下偏移 30px */
            left: 30px; /* 向右偏移 30px */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box1">相对定位1</div>
        <div class="box2">相对定位2</div>
        <div class="box3">相对定位3</div>
    </div>
</body>
</html>
  1. 第一个盒子(绿色)

        相对于自身默认位置向下偏移 10px,向右偏移 10px。
  2. 第二个盒子(橙色)

        相对于自身默认位置向下偏移 20px,向右偏移 20px。
  3. 第三个盒子(蓝色)

        相对于自身默认位置向下偏移 30px,向右偏移 30px。

注意事项

  • 相对定位的特点

    • 元素仍然保留在文档流中,偏移后不会影响其他元素的布局。
    • 偏移的效果仅影响元素的视觉位置。
  • 重叠问题

    • 如果偏移量较大,可能会导致元素之间发生重叠。

3、absolute绝对定位

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>绝对定位示例</title>
    <style>
        /* 父容器样式 */
        .container {
            position: relative; /* 父容器设置为相对定位,作为子元素的定位参考点 */
            width: 300px;
            height: 300px;
            background-color: #f0f8ff; /* 浅蓝色背景 */
            border: 2px solid #ddd;
            margin: 20px auto;
        }

        /* 第一个盒子:绝对定位 */
        .box1 {
            position: absolute;
            width: 100px;
            height: 100px;
            background-color: #4CAF50; /* 绿色背景 */
            top: 10px; /* 距离父容器顶部 10px */
            left: 10px; /* 距离父容器左侧 10px */
        }

        /* 第二个盒子:绝对定位 */
        .box2 {
            position: absolute;
            width: 100px;
            height: 100px;
            background-color: #FF5722; /* 橙色背景 */
            top: 50px; /* 距离父容器顶部 50px */
            right: 10px; /* 距离父容器右侧 10px */
        }

        /* 第三个盒子:绝对定位 */
        .box3 {
            position: absolute;
            width: 100px;
            height: 100px;
            background-color: #2196F3; /* 蓝色背景 */
            bottom: 10px; /* 距离父容器底部 10px */
            left: 50px; /* 距离父容器左侧 50px */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box1">绝对定位1</div>
        <div class="box2">绝对定位2</div>
        <div class="box3">绝对定位3</div>
    </div>
</body>
</html>
  1. 第一个盒子(绿色)

         位于父容器的左上角,距离顶部 10px,左侧 10px。
  2. 第二个盒子(橙色)

         位于父容器的右上角,距离顶部 50px,右侧 10px。
  3. 第三个盒子(蓝色)

         位于父容器的左下角,距离底部 10px,左侧 50px。

注意事项

  1. 定位参考点

    • 绝对定位的元素会相对于最近的定位祖先(position: relativeabsolute 或 fixed 的父级元素)进行定位。
    • 如果没有定位祖先,则相对于 html(视口)进行定位。
  2. 脱离文档流

    绝对定位的元素不会占据文档流中的空间,因此可能会与其他元素重叠。
  3. 灵活布局

    绝对定位适合用于弹窗、工具提示、精确布局等场景。

4、fix固定定位

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>固定定位示例</title>
    <style>
        /* 父容器样式 */
        .container {
            width: 300px;
            height: 300px;
            background-color: #f0f8ff; /* 浅蓝色背景 */
            border: 2px solid #ddd;
            margin: 20px auto;
            text-align: center;
        }

        /* 第一个盒子:固定定位 */
        .box1 {
            position: fixed;
            width: 100px;
            height: 100px;
            background-color: #4CAF50; /* 绿色背景 */
            top: 10px; /* 距离视口顶部 10px */
            left: 10px; /* 距离视口左侧 10px */
        }

        /* 第二个盒子:固定定位 */
        .box2 {
            position: fixed;
            width: 100px;
            height: 100px;
            background-color: #FF5722; /* 橙色背景 */
            top: 10px; /* 距离视口顶部 10px */
            right: 10px; /* 距离视口右侧 10px */
        }

        /* 第三个盒子:固定定位 */
        .box3 {
            position: fixed;
            width: 100px;
            height: 100px;
            background-color: #2196F3; /* 蓝色背景 */
            bottom: 10px; /* 距离视口底部 10px */
            left: 10px; /* 距离视口左侧 10px */
        }
    </style>
</head>
<body>
    <div class="container">
        <p>滚动页面,观察固定定位效果。</p>
    </div>
    <div class="box1">固定定位</div>
    <div class="box2">固定定位</div>
    <div class="box3">固定定位</div>
</body>
</html>
  1. 第一个盒子(绿色)

        固定在视口的左上角,距离顶部 10px,左侧 10px。
  2. 第二个盒子(橙色)

         固定在视口的右上角,距离顶部 10px,右侧 10px。
  3. 第三个盒子(蓝色)

          固定在视口的左下角,距离底部 10px,左侧 10px。

 

注意事项

  1. 固定定位的特点

    • 元素相对于视口定位,不受父容器的影响。
    • 页面滚动时,固定定位的元素始终保持在指定位置。
  2. 适用场景

    • 固定导航栏。
    • 返回顶部按钮。
    • 固定广告或提示框。
  3. 重叠问题

    • 如果多个固定定位的元素位置重叠,可以通过 z-index 属性控制它们的层级。

5、sticky粘性定位

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>粘性定位示例</title>
    <style>
        /* 父容器样式 */
        .container {
            width: 300px;
            height: auto;
            background-color: #f0f8ff; /* 浅蓝色背景 */
            border: 2px solid #ddd;
            margin: 20px auto;
            padding: 10px; /* 内边距 */
        }

        /* 通用盒子样式 */
        .box {
            width: 100%;
            height: 100px;
            background-color: #4CAF50; /* 默认绿色背景 */
            margin-bottom: 20px; /* 下方间距 */
            text-align: center;
            line-height: 100px; /* 垂直居中 */
            color: #fff;
            font-size: 16px;
        }

        /* 第一个盒子:粘性定位 */
        .box1 {
            position: sticky;
            top: 0; /* 滚动到视口顶部时固定 */
            background-color: #4CAF50; /* 绿色背景 */
        }

        /* 第二个盒子:粘性定位 */
        .box2 {
            position: sticky;
            top: 50px; /* 滚动到距离视口顶部 50px 时固定 */
            background-color: #FF5722; /* 橙色背景 */
        }

        /* 第三个盒子:粘性定位 */
        .box3 {
            position: sticky;
            top: 100px; /* 滚动到距离视口顶部 100px 时固定 */
            background-color: #2196F3; /* 蓝色背景 */
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="box box1">粘性定位 - Box 1</div>
        <div class="box box2">粘性定位 - Box 2</div>
        <div class="box box3">粘性定位 - Box 3</div>
        <p>滚动页面,观察粘性定位效果。</p>
        <p style="height: 1000px;">这是一个长内容区域,用于测试粘性定位。</p>
    </div>
</body>
</html>
  1. 第一个盒子(绿色)

        滚动到视口顶部时固定,直到父容器的内容滚动结束。
  2. 第二个盒子(橙色)

        滚动到距离视口顶部 50px 时固定,直到父容器的内容滚动结束。
  3. 第三个盒子(蓝色)

         滚动到距离视口顶部 100px 时固定,直到父容器的内容滚动结束。

注意事项

  1. 粘性定位的特点

    • position: sticky; 是相对定位和固定定位的结合。
    • 元素在滚动到指定位置时变为固定定位,但超出父容器范围后恢复正常流。
  2. 父容器的限制

    • 粘性定位的元素必须在一个有滚动内容的父容器中才能生效。
    • 如果父容器没有足够的高度,粘性定位可能无法触发。
  3. 浏览器支持

    • position: sticky; 在现代浏览器中支持良好,但在旧版 IE 中不支持。

三、综合应用

 1、数字定位在图片上

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数字定位在图片底部</title>
    <style>
        /* 容器样式 */
        .image-container {
            position: relative; /* 设置父容器为相对定位 */
            width: 600px;
            height: 300px;
            margin: 20px auto;
            border:5px solid #69b8ec; /* 边框 */
        }

        /* 图片样式 */
        .image-container img {
            width: 100%;
            height: 100%;
            display: block;
        }

        /* 数字容器样式 */
        .number-container {
            position: absolute; /* 绝对定位 */
            bottom: 10px; /* 距离图片底部 10px */
            left: 50%; /* 水平居中 */
            transform: translateX(-50%); /* 水平居中对齐 */
            display: flex; /* 使用 flexbox 布局 */
            gap: 10px; /* 数字之间的间距 */
        }

        /* 数字样式 */
        .number {
            color: #fff; /* 白色字体 */
            font-size: 18px; /* 字体大小 */
            font-weight: bold; /* 加粗字体 */
            background-color: rgba(0, 0, 0, 0.5); /* 半透明黑色背景 */
            border-radius: 50%; /* 圆形背景 */
            width: 30px;
            height: 30px;
            line-height: 30px; /* 垂直居中 */
            text-align: center; /* 水平居中 */
            text-decoration: none; /* 去掉超链接下划线 */
        }

        /* 数字悬停效果 */
        .number:hover {
            background-color: rgba(209, 231, 166, 0.8); /* 背景变为白色 */
            color: #000; /* 字体变为黑色 */
        }
    </style>
</head>
<body>
    <div class="image-container">
        <img src="https://imgs.699pic.com/images/500/363/911.jpg!seo.v1" alt="图片">
        <div class="number-container">
            <a href="#link1" class="number">1</a>
            <a href="#link2" class="number">2</a>
            <a href="#link3" class="number">3</a>
            <a href="#link4" class="number">4</a>
            <a href="#link5" class="number">5</a>
        </div>
    </div>
</body>
</html>

 

2、窗口两侧固定广告

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>窗口两侧固定广告</title>
    <style>
        /* 左侧广告样式 */
        .ad-left {
            position: fixed; /* 固定定位 */
            top: 50%; /* 垂直居中 */
            left: 0; /* 靠左 */
            transform: translateY(-50%); /* 垂直居中对齐 */
            width: 120px; /* 广告宽度 */
            height: 300px; /* 广告高度 */
            background-color: #4CAF50; /* 绿色背景 */
            color: #fff; /* 白色文字 */
            text-align: center; /* 水平居中 */
            line-height: 300px; /* 垂直居中 */
            font-size: 16px; /* 字体大小 */
            box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3); /* 阴影效果 */
        }

        /* 右侧广告样式 */
        .ad-right {
            position: fixed; /* 固定定位 */
            top: 50%; /* 垂直居中 */
            right: 0; /* 靠右 */
            transform: translateY(-50%); /* 垂直居中对齐 */
            width: 120px; /* 广告宽度 */
            height: 300px; /* 广告高度 */
            background-color: #FF5722; /* 橙色背景 */
            color: #fff; /* 白色文字 */
            text-align: center; /* 水平居中 */
            line-height: 300px; /* 垂直居中 */
            font-size: 16px; /* 字体大小 */
            box-shadow: -2px 2px 5px rgba(0, 0, 0, 0.3); /* 阴影效果 */
        }

        /* 页面内容样式 */
        .content {
            width: 80%;
            margin: 50px auto;
            font-size: 18px;
            line-height: 1.6;
            text-align: justify;
        }
    </style>
</head>
<body>
    <!-- 左侧广告 -->
    <div class="ad-left">
        左侧广告
    </div>

    <!-- 右侧广告 -->
    <div class="ad-right">
        右侧广告
    </div>

    <!-- 页面内容 -->
    <div class="content">
        <h1>content内容</h1>
        <p>
            这是一个页面,展示如何在窗口的左右两边添加固定广告。无论页面如何滚动,广告始终保持在视口的两侧。
        </p>
        <p>
            通过使用 CSS 的固定定位(`position: fixed`),可以轻松实现这种效果。固定定位的元素相对于视口进行定位,不会随页面滚动而移动。
        </p>
        <p>
            这种布局常用于广告、导航栏或其他需要始终可见的元素。
        </p>
        <p style="height: 2000px;">滚动页面,观察广告始终固定在窗口两侧的效果。</p>
    </div>
</body>
</html>

  1. 左侧广告始终固定在视口的左侧,垂直居中。
  2. 右侧广告始终固定在视口的右侧,垂直居中。
  3. 页面滚动时,广告不会移动,始终保持在窗口两侧。

四、总结

相对定位:一般情况下很少自己单独使用,都是配合绝对定位使用,为绝对定位创造定位父级而又不设置偏移量 。

绝对定位:一般用在下拉菜单、焦点图轮播、弹出数字气泡、特别花边等场景。

固定定位:一般在网页中被用在窗口左右两边的固定广告、返回顶部图标、吸顶导航栏等


网站公告

今日签到

点亮在社区的每一天
去签到