热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

定位及元素的显示与隐藏

一、定位1.为什么需要定位

一、定位

1. 为什么需要定位

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

2. 定位组成

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

定位=定位模式+边偏移

  • 定位模式用于指定一个元素在文档中的定位方式
  • 边偏移则决定了该元素的最终位置

3. 定位模式

定位模式决定元素的定位方式,它通过CSS的position属性来设置,其值可以分为四个

语义
static静态定位
relative相对定位
absolute绝对定位
fixed固定定位

4. 边偏移

边偏移就是定位的盒子移动到最终位置。有top、bottom、left、right四个属性

边偏移属性示例描述
toptop: 80 px;顶端偏移量,定义元素相对于其父元素上边线的距离
bottombottom: 80 px;底部偏移量,定义元素相对于其父元素下边线的距离
leftleft: 80 px;左侧偏移量,定义元素相对于其父元素左边线的距离
rightright: 80 px;右侧偏移量,定义元素相对于其父元素右边线的距离

5. 静态定位(了解)

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

语法:

选择器 {
position: static;
}

  • 静态定位按照标准流特性摆放位置,他没有边偏移
  • 静态定位布局时很少用到

6. 相对定位(重要)

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

语法:

选择器 {
position: relative;
}

特点

  • 他是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)
  • 原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待他(不脱标,继续保留原来的位置)

7. 绝对定位(重要)

绝对定位是元素在移动位置的时候,是相对于它祖先元素来说的(拼爹型)

语法:

选择器 {
position: absolute;
}

特点

  • 如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位
  • 如果祖先元素有定位(相对、绝对、固定),则以最近一级的有定位祖先元素为参考点移动位置
  • 绝对定位不再占有原来的位置,会脱标

8. 子绝父相

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

  1. 自己绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子
  2. 父盒子需要加定位限制盒子在父盒子内显示
  3. 父盒子布局时,需要占有位置,因此父亲只能是相对定位

总结:

因为父级需要占有位置,因此是相对定位,子盒子不需要占有位置,则是绝对定位

当然,子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到


9. 固定定位(重要)

固定定位是元素固定于浏览器可视区的位置。

主要适用场景:可以在浏览器页面滚动时元素的位置不会改变

语法:

选择器 {
position:fixed;
}

特点

  1. 以浏览器的可视窗口为参照点移动元素
    • 跟父元素没有任何关系
    • 不随滚动条滚动
  2. 固定定位不再占有原先的位置
    • 固定定位也是脱标的,其实固定定位也可以看作是一种特殊的绝对定位

固定在版心右侧位置

小算法:

  1. 让固定定位的盒子left: 50%,走到浏览器可视区的一半位置
  2. 让固定定位的盒子margin-left,再走版心宽度的一半位置

10. 粘性定位(了解)

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

语法:

选择器 {
position: sticky;
top: 10px;
}

特点

  1. 以浏览器的可视窗口为参照点移动元素(固定定位特点)
  2. 粘性定位占有原先的位置(相对定位特点)
  3. 必须添加top、left、right、bottom其中一个才有效

跟页面滚动搭配使用,兼容性较差,IE不支持


11. 定位总结

定位模式是否脱标移动位置是否常用
static静态定位不能使用边移动很少
relative相对定位相对于自身位置移动常用
absolute绝对定位带有定位的父级常用
fixed固定定位浏览器可视区常用
sticky粘性定位浏览器可视区当前阶段少

12. 定位叠放次序 z-index

使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用z-index来控制盒子的前后次序

语法:

选择器 {
z-index:1;
}

  • 数值可以是正整数、负整数或0,默认是auto,数值越大,盒子越靠上
  • 如果属性值相同,则按照书写顺序,后来居上
  • 数字后面不能加单位
  • 只有定位的盒子才有z-index属性

13. 定位的拓展

  1. 绝对定位的盒子居中

    加了绝对定位的盒子不能通过margin: 0 auto 水平居中,但是可以通过以下计算方法实现水平和垂直居中

    • left: 50%: 让盒子的左侧移动到父级元素的水平中心位置
    • margin-left: -100 px; 让盒子向左移动自身宽度的一半
  2. 定位的特殊性

    • 行内元素添加绝对或者固定定位,可以直接设置高度和宽度
    • 块级元素添加绝对或者固定定位,如果不给宽度或者高度,默认大小是内容的大小
  3. 脱标的盒子不会触发外边距塌陷

    • 浮动元素、绝对定位、固定定位元素都不会触发外边距合并的问题
  4. 绝对定位(固定定位)会完全压住盒子

    浮动元素不同,只会压住它下面标准流的盒子,但是不会压住下面标准流盒子里面的文字图片

    但是绝对定位(固定定位)会压住下面标准流所有的内容

    浮动之所以不会压住文字,因为浮动产生的目的最初是为了做文字环绕效果的,文字会围绕浮动元素



二、元素的显示与隐藏

1. display显示隐藏

  • display: none 隐藏对象
  • display: block 除了转换为块级元素之外,同时还有显示元素的意思
  • display隐藏元素后,不再占有原来的位置

2. visibility 可见性

  • visibility: visible 元素可见
  • visibility: hidden 元素隐藏
  • visibility隐藏元素后,继续占有原来的位置

3. overflow溢出

属性值描述
visible不剪切内容也不添加滚动条
hidden不显示超过对象尺寸的内容,超出的部分隐藏掉
scroll不管超不超出,总是显示滚动条
auto超出自动显示滚动条,不超出不显示滚动条
  • 一般情况下,我们都不想让溢出的内容显示出来,因为溢出的部分会影响布局dignwei
  • 但是如果有定位的盒子,请慎用overflow: hidden 因为他会隐藏多余的部分

推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 每日前端实战:148# 视频教程展示纯 CSS 实现按钮两侧滑入装饰元素的悬停效果
    通过点击页面右侧的“预览”按钮,您可以直接在当前页面查看效果,或点击链接进入全屏预览模式。该视频教程展示了如何使用纯 CSS 实现按钮两侧滑入装饰元素的悬停效果。视频内容具有互动性,观众可以实时调整代码并观察变化。访问以下链接体验完整效果:https://codepen.io/comehope/pen/yRyOZr。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • CM 创始人分享:在 GitHub 上成为开源项目的守护者
    本文由 CM 创始人 Steve Klabnik 发表在其个人博客上,详细介绍了他在 GitHub 上为 Rails 开源项目所做的贡献和经验,特别强调了如何有效管理和筛选项目中的问题。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • Flutter中计算文本尺寸的方法
    在Flutter开发中,有时需要计算文本的宽度和高度。本文介绍了一种利用TextPainter类实现这一功能的方法。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
author-avatar
MR付的世界
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有