定位的使用

简介: HTML定位

7. 定位

为什么使用定位?

  1. 浮动可以让多个盒子一行没有缝隙排列显示, 经常用在横向排列盒子;
  2. 定位则是可以让盒子自由的在某个盒子内移动位置或固定屏幕中某个位置, 并且可以压住其他盒子.
7.1 定位组成

定位: 将盒子定在某个位置, 所以定位也是在摆放盒子, 按照定位的方式移动盒子.

定位 = 定位模式 + 边偏移

  • 定位模式决定一个元素在文档中的定位方式,
  • 边偏移决定该元素的最终位置
定位模式通过CSS的position来设置, 值有四个:
语义
static 静态定位
relative 相对定位
absolute 绝对定位
fixed 固定定位
边偏移: 通过top/bottom/left/right分别设置到上下左右的距离
7.2 静态定位 static
position: static

静态定位是元素的默认定位方式, 无定位的意思

静态定位按照标准流特性摆放, 没有边偏移

7.3相对定位 relative
position: relative

相对定位是指元素在移动位置时是相对于它原来的位置来说的.

移动后不脱标, 继续保留原来位置

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 400px;
            height: 400px;
        }

        .box {
            height: 1000px;
            width: 1000px;
        }

        .first {
            background-color: #111;
            /* 设置相对定位后发现,没有脱标,还是占位置的,不像浮动会脱标不占位 */
            position: relative;
            top: 100px;
            left: 100px;
        }

        .second {
            background-color: #333;
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="first"></div>
        <div class="second"></div>
    </div>
</body>

</html>
7.4 绝对定位 absolute
position: absolute;

绝对定位是元素在移动位置时, 是相对于祖先元素的.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        /* 当没有父元素时, 则根据浏览器文档为准 */
        .box {
            width: 400px;
            height: 400px;
            background-color: #333;
            /* 设置绝对定位 */
            position: absolute;
            top: 100px;
            right: 0;
        }

        /* 父元素没设置定位 */
        /* .parent {
            width: 1400px;
            height: 1400px;
            background-color: pink;
        } */

        /* 当父元素没有设置定位时, 则根据浏览器文档为准 */
        /* .parent .son {
            width: 400px;
            height: 400px;
            background-color: #333;
            
            position: absolute;
            bottom: 100px;
            left: 0;
        } */

        /* 如果爷爷设置了定位 */
        .grandparent {
            width: 1200px;
            height: 1400px;
            background-color: pink;
            position: absolute;

        }

        /* 父亲没有定位 */
        .grandparent .parent {
            width: 800px;
            height: 800px;
            background-color: #333;
        }

        /* 那么元素就会以最近一级设置定位的祖先元素为准 */
        .grandparent .parent .son {
            width: 400px;
            height: 400px;
            background-color: #fff;
            position: absolute;
            right: 100px;
        }
    </style>
</head>

<body>
    <div class="box">
    </div>

    <div class="parent">
        <div class="son"></div>
    </div>

    <div class="grandparent">
        <div class="parent">
            <div class="son"></div>
        </div>
    </div>
</body>

</html>
7.5 子绝父相的由来

子级盒子是绝对定位的话, 父级盒子要用相对定位

  1. 子盒子绝对定位, 不会占有位置, 可以放到父盒子里面的任何一个地方, 不会影响到其他的兄弟盒子;
  2. 父盒子需要加定位限制子盒子在父盒子内显示;(如果不加的话, 子盒子会一直向上直到找到文档寻找加了定位的祖元素)
  3. 父盒子布局时需要占有位置, 而占位置的定位刚好是相对定位, 因此父元素只能是相对定位.

简单来说: 子盒子不占位置, 因此是绝对定位; 而父盒子需要占有位置, 因此用相对定位.

7.6 固定定位 fixed

position: fixed

  1. 以浏览器的可视窗口为参照点进行移动元素;
  2. 跟父元素没任何关系;
  3. 随着滚动条滚动;
  4. 不保留位置
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            /* 手动智造滚动条, 滚动时图片位置不变 */
            height: 3000px;
        }

        .pic {
            /* 绝对定位: 以浏览器的可视窗口进行对齐 */
            position: fixed;
            top: 100px;
            left: 40px;
        }
    </style>
</head>

<body>
    <img class="pic" src="../resources/images/r_dj.png" alt="">
    <!-- 图片会压住文字, 说明图片设置绝对定位后不占位置 -->
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>
    <p>请尽情吩咐主人,妲己</p>

</body>

</html>
固定定位小技巧: 固定在版心右侧
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .content {
            height: 1200px;
            width: 1200px;
            margin: 0 auto;
            background-color: pink;
        }

        .fixed {
            position: fixed;
            height: 150px;
            width: 50px;
            background-color: #111;
            /* 先用定位移动到50%,在用margin-left移动版心一半的距离 */
            left: 50%;
            margin-left: 600px;
            bottom: 100px;
        }
    </style>
</head>

<body>
    <div class="fixed"></div>
    <div class="content"></div>
</body>

</html>
7.7 粘性定位

position: sticky

粘性定位可以被认为是相对定位和固定定位的混合

  1. 以浏览器的可视窗口为参照点移动元素(固定定位特点);
  2. 粘性定位占有原先的位置(相对定位特点);
  3. 必须添加top/left/right/bottom其中一个才生效
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            height: 4000px;
        }

        .sticky {
            /* 设置粘性定位 */
            position: sticky;
            width: 1200px;
            height: 150px;
            margin: 300px auto;
            /* 需设置top/bottom/left/right才生效, 当导航栏距离顶部0像素时会固定在顶部 */
            top: 0;
        }
    </style>
</head>

<body>

    <div class="sticky">
        导航栏
    </div>
</body>

</html>
7.8 定位总结
定位模式 是否脱标 移动位置 是否使用
static静态定位 不能使用边偏移 很少
relative相对定位 否(占有位置) 相对于自身位置移动 常用
absolute绝对定位 是(不占位置) 相对于带有定位的父级元素移动 常用
fixed固定定位 是(不占位置) 浏览器可视区 常用
sticky粘性定位 否(占有位置) 浏览器可视区 较少
目录
相关文章
|
5G 数据处理 UED
超密集网络UDN的核心特点 | 带你读《5G UDN(超密集网络)技术详解》之一
本书全面深入地阐述了 UDN 技术的发展历史、当今的现状及未来趋势,内容 涵盖上层业务应用、部署组网、系统架构、无线接入侧高层和物理层关键技术等方 面。本书从 5G 移动业界大背景为切入点,紧密结合了当前 5G 在 3GPP 的标准化 进展,系统化地梳理和诠释了 5G UDN 的诸多相关技术,从宏观到微观,从高层 到低层。通过本书,读者不仅可以全面丰富地了解目前 5G 在 3GPP 的标准化状况 和未来趋势,系统化地学习 UDN 技术体系的相关知识,还可以体察标准制定背后 的诸多缘由和规律。
超密集网络UDN的核心特点 | 带你读《5G UDN(超密集网络)技术详解》之一
|
6月前
|
机器学习/深度学习 人工智能 监控
什么是信息化?什么是数字化?这两者有什么联系和区别?
本文探讨了信息化与数字化的概念、联系及区别。信息化是将线下业务流程线上化,提升效率;数字化则基于大数据和新技术优化企业运营模式,重构商业逻辑。两者层层递进,信息化为基础,数字化为升级。文中通过实例对比二者在理念、方法、数据应用等方面差异,并强调数字化转型需明确目标,借助低代码等工具实现能力重构,推动企业全价值链连通与效率提升。总结指出,真正的转型是能力的全面提升,而非单纯技术替换。
|
3月前
|
数据采集 Go API
Go语言实战案例:使用context控制协程取消
本文详解 Go 语言中 `context` 包的使用,通过实际案例演示如何利用 `context` 控制协程的生命周期,实现任务取消、超时控制及优雅退出,提升并发程序的稳定性与资源管理能力。
|
8月前
|
存储 监控 安全
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
381 5
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
《集成学习:堆叠泛化与提升法在人工智能中的应用热点》
在人工智能领域,集成学习是提升模型性能的关键技术。堆叠泛化通过训练元模型整合多个基础模型的输出,结合各自优势,显著提高准确性和泛化能力;提升法则通过迭代训练逐步优化模型,修正误差,增强适应性。两者共同为图像识别、自然语言处理和智能决策等复杂问题提供强大支持,推动AI技术进步。
214 8
《集成学习:堆叠泛化与提升法在人工智能中的应用热点》
|
10月前
|
网络协议 应用服务中间件 网络安全
免费IP地址SSL证书在哪里申请
免费IP地址SSL证书的申请需通过特定的证书颁发机构(CA)或平台。JoySSL提供针对IP地址的免费SSL证书,Let&#39;s Encrypt则主要面向网站。申请步骤包括:访问官网注册账号(JoySSL需填写注册码230922),选择证书类型,填写信息并验证IP地址所有权,提交审核,下载部署证书。注意事项:确保IP地址有效、服务器支持HTTPS,并定期续签证书以保持有效性。
|
前端开发 rax Linux
汇编语言与x64函数参数传递
汇编语言与x64函数参数传递
476 0
|
12月前
|
供应链 区块链 数据安全/隐私保护
智能合约技术在供应链管理中的应用与挑战####
智能合约,作为区块链技术的重要组成部分,正逐步渗透至供应链管理领域,以其自动化执行协议、增强透明度与效率的特性,重塑着传统供应链的运作模式。本文旨在探讨智能合约如何在供应链中发挥作用,解决现有问题,并分析面临的挑战及可能的解决方案。通过具体案例分析,揭示其在提高供应链透明度、降低成本、加速交易速度等方面的潜力。 ####
|
Ubuntu Linux Shell
如何编辑 sudoers 文件
如何编辑 sudoers 文件
436 1
|
移动开发 前端开发 JavaScript
前端表单验证的完美攻略:HTML5属性与JavaScript方法的无缝对接,让你的Web应用数据输入既安全又优雅
【8月更文挑战第31天】本文介绍前端表单验证的重要性及其实现方法,利用HTML5的内置属性如`required`、`pattern`和`minlength`进行基本验证,并借助JavaScript处理复杂逻辑,如密码确认。通过示例代码详细展示了如何结合两者实现高效且友好的表单验证,同时使用CSS增强用户体验。此方法简化开发流程并提升验证效果。
464 0