【CSS in Depth 2 精译_038】6.2 CSS 定位技术之:绝对定位
当前内容所在位置(可进入专栏查看其他译好的章节内容)
- 第一章 层叠、优先级与继承(已完结)
- 第二章 相对单位(已完结)
- 第三章 文档流与盒模型(已完结)
- 第四章 Flexbox 布局(已完结)
- 第五章 网格布局(已完结)
- 【第六章 定位与堆叠上下文】 ✔️
- 6.1 固定定位
- 6.1.1 创建一个固定定位的模态对话框
- 6.1.2 在模态对话框打开时防止屏幕滚动
- 6.1.3 控制定位元素的大小
- 6.2 绝对定位 ✔️
- 6.2.1 关闭按钮的绝对定位 ✔️
- 6.2.2 伪元素的定位问题 ✔️
- 6.3 相对定位(精译中 ⏳)
文章目录
- 6.2 绝对定位 Absolute positioning
- 6.2.1 关闭按钮的绝对定位 Absolutely positioning the Close button
- 6.2.2 伪元素的定位问题 Positioning a pseudo-element

《CSS in Depth》新版封面
译者注
有了上一节固定定位(fixed positioning)作铺垫,原以为本节的绝对定位最多也就一两句话的事,却不曾想,一个看似普通的关闭按钮的定位问题,还牵扯了这么多知识点在里面。而我忽略的部分,正是需要进一步强化的 CSS 基础,比如作者后面提到的页面可访问性的问题。一起来看看吧。
6.2 绝对定位 Absolute positioning
上一节介绍的固定定位,是相对于视口(viewport)来定位元素的。这个作参照物的视口也被称为该元素的 包含块(containing block)。例如,声明 left: 2em 会让一个定位元素(positioned element)的左边缘放到距离其包含块 2em 的位置。
绝对定位(Absolute positioning)的行为也是如此,只是它的包含块不一样。绝对定位不是相对于视口,而是相对于 最近的祖先定位元素(closest-positioned ancestor element)。与固定元素(fixed element)一样,其 inset 属性(包括 top、right、bottom 及 left)决定了元素边缘在包含块里的具体位置。
6.2.1 关闭按钮的绝对定位 Absolutely positioning the Close button
为了演示绝对定位,本节将重新设置关闭(close)按钮的位置,并将其放置在模态对话框的右上角,如图 6.2 所示。

图 6.2 关闭按钮被定位到模态对话框的右上角
实现上述效果,需要将关闭按钮设置为绝对定位。由于其父元素 modal-body 是固定定位的,因此会成为关闭按钮的包含块。根据以下代码更新关闭按钮的样式。
代码清单 6.5 绝对定位的关闭按钮样式
.modal-close {/* Positions relative to the relatively-positioned parent该相对位置的参照物,为已设置“固定”定位的父元素(原文注释貌似有误?) */position: absolute;top: 0.3em;right: 0.3em;padding: 0.3em;
}
这段代码将按钮放置在了距离 modal-body 顶部 0.3em、右侧 0.3em 的位置。正如本例所示,包含块通常为是目标元素的父元素。如果父元素未被定位(not positioned),浏览器则会沿着 DOM 树往上查找其祖父、曾祖父,直到找到一个定位元素(positioned element)为止,然后将它作为包含块。
注意
如果祖先元素都没有定位,那么这个绝对定位的元素会基于 初始包含块(initial containing block) 来定位。初始包含块的大小与视口相同,并固定在页面顶部。
6.2.2 伪元素的定位问题 Positioning a pseudo-element
关闭按钮的定位就这样搞定了,只是看着有些简陋。对于这种关闭按钮,用户往往更希望看到一个类似 x 的图形化标记,如图 6.3 所示。

图 6.3 将关闭按钮的“close”字样改为“x”
您可能首先想到的是把关闭按钮中的 close 直接改为字母 x,但是这样会导致一些与页面可访问性(accessibility problem)相关的问题:屏幕辅助阅读工具会根据按钮中的文字进行阅读。因此需要给按钮一些有意义的提示信息。在使用 CSS 之前,HTML 本身的语义也必须有意义才行。
解决了语义化相关的问题,CSS 就可以放心大胆地隐藏 close 字样并显示 x 了。实现最终效果总共需要两步。先将按钮里的文字推至按钮外围并隐藏溢出内容;然后将按钮的伪元素 ::after 的 content 属性设置为 x,并通过绝对定位让伪元素在按钮内居中显示。根据代码清单 6.4 更新按钮样式。
说明
相较字母
x,我更推荐选用乘法符号对应的 Unicode 字符。它的对称性更好,也更美观。此外,HTML 的字符实体×(即 ×)虽然也可以显示该字符,但在 CSS 伪元素的content的属性中,必须使用转义后的 Unicode 编码:\00D7。
代码清单 6.6 替换为 × 符号的关闭按钮样式代码
.modal-close {position: absolute;top: 0.3em;right: 0.3em;padding: 0.3em;border: 0; font-size: 2em;/* 令关闭按钮呈正方形显示 */height: 1em; width: 1em; /* 强制文本溢出元素并隐藏文本 */text-indent: 10em; overflow: hidden; background-color: transparent;
}.modal-close::after {position: absolute;line-height: 0.5;top: 0.2em;left: 0.1em;text-indent: 0;content: "\00D7"; /* 添加 Unicode 字符 U+00D7(乘号) */
}
这段代码将按钮设置为 1em 大小的正方形,text-indent 属性则用于将文字推到右边溢出按钮。具体的移动量没有限制,只要能大过按钮的宽度就行。由于 text-indent 是继承属性,需要在 ::after 上重置为 0,以免和文字内容一同缩进。
而此时的伪类元素(译注:即 .modal-close::after)是绝对定位的,并且因为它表现得像按钮的子元素,所以按钮这个定位元素就成了该伪类元素的包含块。为防止伪元素过高,行高 line-height 的值不能太大,再配合 top 和 left 属性,就实现了按钮的居中对齐。这里的精确值是反复试错后的结果,建议您也在自己的浏览器开发者工具里多试试,看看它们是如何影响定位的。
绝对定位可谓是众多定位类型里颇具实力的重量级选手(heavy hitter)。它常常与 JavaScript 配合,出没于弹出菜单(popping up menus)、工具提示(tooltips)以及消息框(“info” boxes)中。接下来将演示绝对定位在构建下拉菜单时的用法,但在此之前,需要先介绍一下它的另一个搭档:相对定位(relative positioning)。
关于《CSS in Depth》(中译本书名《深入解析 CSS》)
| 第 1 版 | 第 2 版 | |
|---|---|---|
| 读者评分 | 原版:4.7(亚马逊);中文版:9.3(豆瓣) | 原版:5.0(亚马逊);中文版:暂无,待出版 |
| 出版时间 | 原版:2018 年 3 月;中文版:2020 年 4 月 | 原版:2024 年 7 月;中文版:暂无,待出版 |
| 原价 | 原版:$44.99;中文版:¥139.00 | 原版:$59.99;中文版:暂无,待出版 |
| 现价 | 原版:$36.49;中文版:¥52.54 起步 | 原版:$52.09;中文版:暂无,待出版 |
| 原版国内预订 | 起步价 ¥461.00 | 起步价 ¥750.00 |
本专栏为该书第 2 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!
相关文章:
【CSS in Depth 2 精译_038】6.2 CSS 定位技术之:绝对定位
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结)第二章 相对单位(已完结)第三章 文档流与盒模型(已完结)第四章 Flexbox 布局(已…...
828 华为云征文|华为 Flexus 云服务器搭建 SamWaf 开源轻量级网站防火墙
在当今数字化高速发展的时代,网络安全问题日益凸显。为了保障网站的稳定运行和数据安全,我们可以借助华为 Flexus 云服务器搭建 SamWaf 开源轻量级网站防火墙。这不仅是一次技术的挑战,更是为网站筑牢安全防线的重要举措。 一、华为 Flexus …...
基于二自由度汽车模型的汽车质心侧偏角估计
一、质心侧偏角介绍 在车辆坐标系中,质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示,u为车辆前进方向,v为质心速度方向,u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点: 1、稳定性…...
前端html+css+js 基础总结
HTML 行级元素 标签分为行级元素与块级元素 行级元素占据区域由其显示内容决定,如span,img(图片),<a></a>基本格式: <a href"链接" target"_blank"></a>用于跳转到其他网站,…...
若依VUE项目安全kind-of postcss vite漏洞扫描和修复
npm install unplugin-auto-import0.16.7 npm install vite3.2.11 升级vite、unplugin-auto-import npm install 报错New major version of npm available! 8.5.5 -> 10.8.3,使用命令npm install --force npm install --force...
C语言实现简单凯撒密码算法
**实验2:传统密码技术 【实验目的】 通过本次实训内容,学习常见的传统密码技术,通过编程实现简单代替密码中的移位密码算法,加深对传统密码技术的了解,为深入学习密码学奠定基础。【技能要求】 分析简单代替密码中的移…...
多态的使用和原理(c++详解)
一、多态的概念 多态顾名思义就是多种形态,它分为编译时的多态(静态多态)和运行时的多态(动态多态),编译时多态(静态多态)就是函数重载,模板等,通过不同的参数…...
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【Trace调测】
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 基本概念 Trace调测旨在帮助开发者获取内核的运行流程,…...
Lombok 在 IntelliJ IDEA 中的使用步骤
Lombok 是一个非常流行的 Java 库,它通过注解简化 Java 类的开发,特别是在处理 POJO(Plain Old Java Objects)类时,如生成 getter、setter、toString 等常用方法。Lombok 在减少样板代码(boilerplate code&…...
计算机网络 --- Socket 编程
序言 在上一篇文章中,我们介绍了 协议,协议就是一种约定,规范了双方通信需要遵循的规则、格式和流程,以确保信息能够被准确地传递、接收和理解。 在这篇文章中我们将介绍怎么进行跨网络数据传输,在这一过程中相信大家…...
git笔记之在多个分支中复用某个分支提交的更改
git笔记之在多个分支中复用某个分支提交的更改 code review! 文章目录 git笔记之在多个分支中复用某个分支提交的更改1.实现该功能的 Bash 脚本示例2.这个脚本是否可以处理新添加的文件?3.该脚本使用前,应先使用下述脚本重置本地仓库所有分支与远程保持一…...
HTML、CSS
初识web前端 web标准 Web标准也称为网页标准,由一系列的标准组成,大部分由W3C (World Wide Web Consortium,万维网联盟) 负责制定。三个组成部分: HTML: 负责网页的结构(页面元素和内容)。CSS: 负责网页的表现(页面元素的外观、位置等页面样…...
数据文件(0)
一、使用场景 1、字典数据 对于一些数据量不大的配置类数据,放到数据库中占用数据库资源,可以放到代码中维护。比如 (1)字段少业务单一:做成枚举; (2)字段多业务复杂:…...
Go语言并发模式详解:深入理解管道与上下文的高级用法
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在Go语言中,并发编程是其最强大的特性之一。合理地使用并发模式,可以让我们的程序高效而优雅地处理复杂的任务。在本文中,我们将深入探讨Go语言中的一些高级并发模式,包括管道的技巧和上下文包的应用。通过丰…...
标准文档流解析及 CSS 中的相关特性
目录 非 VIP 用户可前往公众号回复“css”进行免费阅读 标准文档流特点 空白折叠现象 高矮不齐、底边对齐 自动换行,一行写不满,换行写 标准文档流中的元素等级 HTML 与 CSS 中的标签分类总结 块级元素和行内元素的相互转换 块级转行内 行内转块级 display 非 VIP…...
水下攻防面试题
水下攻防面试题通常涉及对水下环境的理解、水下安全操作、水下技术应用以及攻防策略等多个方面。由于具体的面试题可能因组织、职位和目的的不同而有所差异,以下是一些可能出现在水下攻防面试中的典型问题及其参考答案框架: 一、基础概念与理解 什么是水下攻防? 水下攻防是…...
vmware 虚拟机多屏幕或添加屏幕
vmware 虚拟机多屏幕或添加屏幕 前置条件 vmware 安装 vmware tools 虚拟机系统支持多屏幕 物理上有至少两个屏幕,就是物理机上接至少一个屏幕 方法 虚拟机上点设置,需要在虚拟机关机时进行 ctrl alt enter 让当前虚拟机全屏 鼠标移动到屏幕虚拟机…...
鹏哥C语言49-51---第6次作业:循环语句 for 和 while
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> //-----------------------------------------------------------------------------------------------第六次作业:for循环等 //--------------------------------------------------------------------…...
springboot中药材进存销管理系统
基于springbootvue实现的中药材进存销管理系统 (源码L文ppt)4-079 4 系统总体设计 4.1系统功能结构设计图 根据需求说明设计系统各功能模块。采用模块化设计方法实现一个复杂结构进行简化,分成一个个小的容易解决的板块,然…...
GitHub上图像超分开源项目推荐【持续更新】
SRCNN 介绍:SRCNN(Super-Resolution Convolutional Neural Network)是一种用于图像超分辨率的卷积神经网络。它由Dong等人在2014年提出,是早期的深度学习方法之一,用于提高图像的分辨率。SRCNN通过学习低分辨率&#…...
如何彻底掌控你的微信聊天记录:开源工具WeChatMsg的完整解决方案
如何彻底掌控你的微信聊天记录:开源工具WeChatMsg的完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trendin…...
普通人如何从零开始搭建自己的AI标题助手?低成本实战指南
就在今天,我刷到了一篇爆文,其标题乃是“用AI制作标题,短短3分钟就能产出100个爆款,而我的阅读量竟翻了5倍之多”,随后我点了进去,看过之后,又将其关掉,此时心里略微有那么点儿不是滋…...
从零到告警:用Prometheus+SNMP监控华为交换机,并配置Grafana看板与告警规则
从零构建华为交换机智能监控体系:PrometheusSNMP实战指南 当机房里的华为交换机突然宕机时,运维团队往往要面对业务部门的连环追问。传统的人工巡检方式就像用体温计量火山喷发——既滞后又无力。本文将手把手带您搭建从数据采集到告警响应的完整监控闭环…...
深度解读|当增强现实遇上美妆教学:帕克西的AR美妆实训解决方案
在职业院校的形象设计、美容化妆等专业中,实训教学长期面临耗材成本高、练习机会有限、考核标准难量化等难题。学生每练习一次就消耗一次化妆品;教师逐个检查妆容步骤,费时费力。 增强现实(AR)技术的介入,正…...
生态数据分析避坑指南:你的Mantel检验结果可靠吗?聊聊距离算法选择与共线性控制
生态数据分析避坑指南:你的Mantel检验结果可靠吗?聊聊距离算法选择与共线性控制 生态数据分析中,Mantel检验作为一种常用的空间相关性分析方法,被广泛应用于物种分布与环境因子关系的研究。然而,许多研究者在实际操作中…...
程序员转行方向推荐:程序员转行新风口!掌握AI大模型,高薪就业不是梦!
本文为程序员提供转行方向建议,涵盖数据分析师、人工智能工程师、AI大模型和产品经理等职业,分析其推荐理由及技能要求。特别强调AI大模型的发展趋势和人才需求,提供系统化学习资源和进阶路线图,帮助程序员在AI时代提升竞争力&…...
RT-Thread裁剪实战:从98KB到28KB的嵌入式系统瘦身指南
1. 项目概述:为什么我们需要裁剪RT-Thread?如果你是一名嵌入式软件工程师,或者正在学习RT-Thread,那么“裁剪”这个词对你来说一定不陌生。RT-Thread作为一款优秀的国产开源实时操作系统,其标准版(或称完整…...
Nintendo Switch游戏备份终极指南:用nxdumptool轻松提取你的游戏收藏
Nintendo Switch游戏备份终极指南:用nxdumptool轻松提取你的游戏收藏 【免费下载链接】nxdumptool Generates XCI/NSP/HFS0/ExeFS/RomFS/Certificate/Ticket dumps from Nintendo Switch gamecards and installed SD/eMMC titles. 项目地址: https://gitcode.com/…...
别再浪费主板上的PCIE插槽了!手把手教你用VL805芯片打造高速USB3.0扩展坞
释放主板潜能:基于VL805芯片的USB3.0扩展方案实战指南 当你的工作台摆满外设却苦于主板接口不足时,那些闲置的PCIE插槽正等待被唤醒。本文将从芯片选型到性能调优,完整呈现如何将一块VL805-QFN68芯片转化为高性能USB3.0扩展方案。 1. 硬件选型…...
Java JVM 面试题详解:JVM运行原理、内存模型、堆栈方法区、GC垃圾回收、JIT编译、类加载机制与线上调优全攻略
1. JVM 到底是什么?为什么 Java 程序离不开它?JVM,全称 Java Virtual Machine,可以理解为 Java 字节码的运行平台。Java 代码先被 javac 编译成 class 字节码,再由 JVM 负责加载、解释、编译、执行和管理内存。这样 Ja…...
