【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》新版封面

《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 属性(包括 toprightbottomleft)决定了元素边缘在包含块里的具体位置。

6.2.1 关闭按钮的绝对定位 Absolutely positioning the Close button

为了演示绝对定位,本节将重新设置关闭(close)按钮的位置,并将其放置在模态对话框的右上角,如图 6.2 所示。

图 6.2 关闭按钮被定位到模态对话框的右上角

图 6.2 关闭按钮被定位到模态对话框的右上角

实现上述效果,需要将关闭按钮设置为绝对定位。由于其父元素 modal-body 是固定定位的,因此会成为关闭按钮的包含块。根据以下代码更新关闭按钮的样式。

代码清单 6.5 绝对定位的关闭按钮样式

.modal-close {/* 相对位置的参照物,为已设置相对定位的父元素 */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”

图 6.3 将关闭按钮的“close”字样改为“x”

您可能首先想到的是把关闭按钮中的 close 直接改为字母 x,但是这样会导致一些与页面可访问性(accessibility problem)相关的问题:屏幕辅助阅读工具会根据按钮中的文字进行阅读。因此需要给按钮一些有意义的提示信息。在使用 CSS 之前,HTML 本身的语义也必须有意义才行。

解决了语义化相关的问题,CSS 就可以放心大胆地隐藏 close 字样并显示 x 了。实现最终效果总共需要两步。先将按钮里的文字推至按钮外围并隐藏溢出内容;然后将按钮的伪元素 ::aftercontent 属性设置为 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 的值不能太大,在配合 topleft 属性,就实现了按钮的居中对齐。这里的精确值是反复试错后的结果,建议您也在自己的浏览器开发者工具里多试试,看看它们是如何影响定位的。

绝对定位可谓是众多定位类型里颇具实力的重量级选手(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 版高分译文专栏,全网首发,精译精校,持续更新,计划今年内完成全书翻译,敬请期待!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/149122.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

大模型深入行业,正从“星星之火”走向“燎原之势”

2024年,当越来越多的企业从赶大模型的潮流与炫大模型的参数规模开始转移到行业落地时,华为携生态伙伴用大模型深耕行业的成果俨然遍地开花。 在9月19日华为全联接大会2024大会上同期举办的华为云AI用户峰会上,华为云为28个创新项目颁发了“A…

应用密码学第一次作业(9.23)

一、Please briefly describe the objectives of information and network security,such as confidentiality, integrity, availability , authenticity , and accountability The objectives of information and network security include: Confidentiality: Protecting se…

快手旗下——Kolors模型部署与使用指南

以下是按照要求重写后的 Kolors 模型部署与使用指南,文章风格偏技术性,但保持简洁和易懂的特点: Kolors 模型部署与使用指南 一、Kolors 简介 Kolors 是由快手 Kolors 团队开发的文本到图像生成模型,基于大规模的潜在扩散技术。…

vue-animate-onscroll动画库(可来回触发动画)

效果展示 ①触发一次动画 触发一次 ②触发多次动画 触发多次 1.什么是vue-animate-onscroll 它是一个 Vue 插件,用于在滚动时触发动画效果。它可以帮助开发者在用户滚动页面时,逐渐展示元素,增强用户体验。基本用法是通过在元素上添加特定的指…

Soul APP创始人张璐团队探讨新世代婚恋观:基于兴趣爱好的“轻相亲”正逐渐流行

近年来,随着社会经济的快速发展和文化观念的不断演变,婚恋观念正在经历显著变化。为深入了解当代年轻人对婚恋的态度与趋势,Soul APP创始人张璐团队与上海大学社会学青年研究团队合作,联合发布了《2024年青年婚恋观念及趋势调查报告》(以下简称“报告”)。该报告基于Soul APP用…

qml PathView入门

PathView是一个用于在用户界面中沿着定义的路径显示和滚动项目的视图组件。它提供了丰富的定制选项,允许开发者创建复杂的动画效果和自定义的滚动行为,特别适用于需要展示非线性排列项目的场景,如图片轮播、自定义滚动菜单等。 一、主要属性 …

[教程]如何在iPhone上启用中国移动/联通/电信RCS消息

目前 苹果已经在 iOS 18 中带来 RCS 富媒体消息的支持,该消息基于网络传递,用户可以通过 RCS 免费将消息发送到其他 iPhone 或 Android 设备。在苹果面向测试版用户推出的 iOS 18.1 Beta 版中,中国网络运营商包括中国移动、中国联通、中国电信…

JavaSE - 面向对象编程05

01 正则表达式 【1】概念:正则表达式是由一些特定字符组成的,代表的是一个规则。 【2】可以用来做什么? ① 用于校验数据格式的合法性 ② 用于在文本中爬取满足要求的内容 ③ 用于String类的replace方法,split方法的替换和分割 …

【学习笔记】Linux系统基础知识3 —— cd命令详解

一、前期准备 1.已经正确安装并成功进入Linux系统 说明:本实验采用的 Redhat 系统(因系统不一致,可能部分显示存在差异) 二、学习内容 提示:学习Linux系统基础命令 cd 命令详解 1、cd命令 1. 功能说明 cd 命令用…

Simple Calculator(算法初阶,代码基础,“纯”手撕)

简单计算器:仅适用无括号加减乘除,算法初阶,代码基础,不调库或模块“纯”手撕。 (笔记模板由python脚本于2024年09月22日 12:08:02创建,本篇笔记适合喜欢用python解决实际问题的coder翻阅) 【学习的细节是欢悦的历程】…

Qt中多语言的操作(以QtCreator为例)

1、首先,我们在代码中与文本相关的且需要支持多语言的地方,用tr来包含多语言key(多语言key是我们自己定义的),如下 //举例 QPushButton* btnnew QPushButton(this); btn->move(20,20); btn->resize(100,50); //…

在 deepin 上除了 Steam,还能怎么玩游戏?

查看原文 前段时间,很多朋友在 deepin 23 上实现了《黑神话:悟空》的通关,那么除了通过 Steam 玩 Windows 游戏之外,还有其他可以使用的游戏平台吗? 回答,当然是可以哒! 游戏平台介绍 今天介…

RHCSA认证-Linux(RHel9)-Linux入门

文章目录 概要一、创建、查看和编辑⽂本1.1 输出重定向1.2 vim编辑器1.3 shell 变量1.5 获取帮助 二、管理本地用户和组2.1 描述用户2.2 切换用户和赋权2.3 用户管理2.4 用户组管理2.5 密码策略 三、控制文件访问3.1 列出文件和文件权限3.2 更改文件权限和拥有者3.3 控制默认权…

昆明理工大学MBA工商管理上课方式

--昆工MBA考研、管理与经济学院、125100工商管理、125602项目管理、199管理类综合能力、F009 政治、F008政治项目管理概论

有关在.Net Core中以TEXT类型将Json格式字段存到数据库的学习

导言 在写个值日接口时发现值日表中的值日时段是可以分多段的,想了想可以使用Json类型来存,不过之前没接触过在后端操作Json格式存到数据库的情况,之后学也了解到了一下方法来实现,故记录一下。 过程 从前端到后端再到数据库的 JS…

千亿大数据平台——MySQL大数据优化

一、自增量的作用 1. 唯一性标识 - 为表中的每一行数据提供一个唯一的、自动生成的标识符,确保数据的唯一性和准确性。 2. 简化数据关联 - 在多个表之间进行关联操作时,自增量字段可以作为便捷的关联键,方便建立和维护表之间的关系…

C#和数据库高级:虚方法

文章目录 一、抽象方法和抽象类中的思考1.1、回顾抽象方法的特点1.2、针对抽象方法问题的引出 二、虚方法的使用步骤2.1、虚方法重写方法的调用2.2、系统自带的虚方法2.3、重写Equals方法2.4、虚方法和抽象方法的比较 三、虚方法和抽象方法的联系3.1、ToString()方法的应用 一、…

字母与符号检测系统源码分享

字母与符号检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

ChatGLM-6B-部署与使用

✨ Blog’s 主页: 白乐天_ξ( ✿>◡❛) 🌈 个人Motto:他强任他强,清风拂山冈! 💫 欢迎来到我的学习笔记! 什么是ChatGLM-6B 一、简介 ChatGLM-6B 是由清华大学知识工程实验室(KEG&…

Python:百度贴吧实现自动化签到

早知道,还是python。 Github项目仓库在这。 相关API 签到贴吧列表 签到分为两个接口,PC端签到一次经验2,而移动端签到则是一次经验6。该用哪个接口已经很明显了。不过这里还是列出PC端的签到API。 # PC端签到接口 # sign_url "https:…