【CSS in Depth 2 精译_040】6.3 CSS 定位技术之:相对定位(下)—— 用纯 CSS 绘制一个三角形

news2024/9/30 13:04:02

当前内容所在位置(可进入专栏查看其他译好的章节内容)

  • 第一章 层叠、优先级与继承(已完结)
  • 第二章 相对单位(已完结)
  • 第三章 文档流与盒模型(已完结)
  • 第四章 Flexbox 布局(已完结)
  • 第五章 网格布局(已完结)
  • 【第六章 定位与堆叠上下文】 ✔️
    • 6.1 固定定位
      • 6.1.1 创建一个固定定位的模态对话框
      • 6.1.2 在模态对话框打开时防止屏幕滚动
      • 6.1.3 控制定位元素的大小
    • 6.2 绝对定位
      • 6.2.1 关闭按钮的绝对定位
      • 6.2.2 伪元素的定位问题
    • 6.3 相对定位 ✔️
      • 6.3.1 创建下拉菜单(上)
      • 6.3.2 创建 CSS 三角形(下) ✔️
    • 6.4 堆叠上下文与 z-index (精译中 ⏳)
      • 6.4.1 理解渲染过程与堆叠顺序
      • 6.4.2 用 z-index 控制堆叠顺序
      • 6.4.3 深入理解堆叠上下文

文章目录

      • 6.3.2 创建 CSS 三角形 Creating a CSS triangle

《CSS in Depth》新版封面

《CSS in Depth》新版封面

译者按
上一小节介绍了 CSS 的相对定位在下拉菜单效果中的具体实现,最后还根据作者的描述,补全了相关 JavaScript 逻辑,实现了用 Tab 键循环选中弹出的下拉菜单项。值得一提的是,这部分源代码在第 1 版其实是一个类名为 dropdown-labeldiv 元素(<div class="dropdown-label">Main Menu</div>),并在鼠标悬停时出现下拉菜单。考虑到鼠标 :hover 效果在触屏设备上兼容性较差,且有违最佳实践(通过 JS 切换样式类的方案更稳健),新版才统一换成了一个 button 按钮,并通过点击来实现下拉切换。这种严谨复盘的思考方式值得借鉴。顺着作者的思路,我们再来看看他是怎么实现纯 CSS 的三角形效果的?其间对于页面可访问性又有哪些细节问题需要考虑?一起来看看吧。

6.3.2 创建 CSS 三角形 Creating a CSS triangle

下拉菜单距离完美还差最后一步。虽然已经实现了基本功能,但用户可能没法一眼看出主菜单按钮(即“Main Menu”字样的切换按钮)下方还有隐藏内容。这时就需要给按钮加上一个向下的小箭头,告诉用户在它下方还有更多内容可以浏览。

我们可以通过元素边框的一个小技巧来绘制一个三角形,并以此充当一个向下指的箭头。具体来说,就是利用切换按钮的伪元素 ::after 来绘制三角形,然后设置绝对定位,将它放到按钮的右侧。

大多数情况下,我们给一个元素设置的边框都比较细,通常给个 1px2px 就差不多了;但如果把边框设置为如图 6.6 所示的粗细会怎么样呢?图中对每一侧的边框都设置了具有强烈反差感的颜色,以便区分每条边的边界和起始位置:

图 6.6 带粗边框样式的示例元素

图 6.6 带粗边框样式的示例元素

注意观察四个角上两条边的边缘相接的地方:这里形成了一个对角边(diagonal edge)。此时再观察一下,将元素的宽高缩减到 0 会是什么效果。如图 6.7 所示,所有的边框都汇聚到了一起,并最终在元素正中位置相遇了:

图 6.7 元素宽高为零时,每条边都变成了一个三角形

图 6.7 元素宽高为零时,每条边都变成了一个三角形

此时,元素边框的每一侧都呈三角形:上边框朝下指,右边框向左指,以此类推。基于这样的观察,我们就可以利用其中一条边框作为三角形,然后将其余各边设置为透明来绘制需要的箭头符号。一个元素如果左右边框都透明,只留一个可见的上边框,最终效果则会如图 6.8 所示,形成一个简单的三角形。

图 6.8 利用元素上边框实现的 CSS 三角形效果

图 6.8 利用元素上边框实现的 CSS 三角形效果

按照上述思路给伪元素 .dropdown-toggle::after 设置样式,形成一个 CSS 三角形。然后使用绝对定位将它放置到合适的位置。根据如下样式代码更新页面:

代码清单 6.10 对下拉按钮上的三角形设置绝对定位的样式代码

.dropdown-toggle {
  padding: 0.5em 2em 0.5em 1.5em;  /* 增加按钮元素的右内边距,为箭头标记预留足够空间 */
  border: 1px solid #ccc;
  background-color: #eee;
  border-radius: 0;
}

.dropdown-toggle::after {
  content: "";
  
  /* 将元素放置在切换按钮的右边 */
  position: absolute;
  right: 1em;               
  top: 0.9em;               
  
  /* 将上边框做成一个向下指的箭头 */
  border: 0.3em solid;                            
  border-color: black transparent transparent;
}

.dropdown.is-open .dropdown-toggle::after {
  top: 0.6em;
  border-color: transparent transparent black;  /* 下拉菜单打开时,箭头向上指 */
}

上述样式中,伪元素由于没有内容(译注:content: ""),所以也不会渲染宽高;利用 border-color 属性的简写形式,将上边框的颜色设置为黑色,左右两边及下边框的均设为透明,从而构建出一个向下的箭头;元素 .dropdown-toggle 的右边用内边距预留出足够空间,以便放置三角形。最终效果如图 6.9 所示:

图 6.9 带箭头标记的下拉菜单按钮效果

图 6.9 带箭头标记的下拉菜单按钮效果

打开菜单,箭头方向应该反转朝上,表示菜单可以收拢关闭。对 top 属性值做微调(范围约在 0.9em0.6em 左右),让朝上指时的箭头看起来跟向下指时处于同一位置即可。

此外,箭头效果的实现也可以考虑使用图片(image)或背景图(background image),但是短短几行 CSS 代码就能免去不必要的网络请求,何乐而不为呢?当然也可以在 HTML 中嵌入一个轻量的 SVG,但项目中要是没有引入过什么图标集的话,本例介绍的这种只用 CSS 的实现方案会更省心。别看它只是个小小的箭头,像这样轻量小巧又美观的点缀效果,也能实实在在为您的应用与网站增色不少。

这项技术还可以用来构建其他复杂的形状,比如梯形、六边形以及星型。想要查看用 CSS 构建的各种形状,请参阅 CSS-Tricks 网站的专题文章:The Shapes of CSS。请注意,这些形状通常也不是必须要掌握的知识点,尤其是在 SVG 图标盛行的当下。它们只是为了给大家展示 CSS 具备的各种能力。

译注

本节原文最后给出的文章链接在 CSS-Tricks 网站已失效(即 https://css-tricks.com/examples/ShapesOfCSS/),为此官网上很早就有读者反馈该问题,但一直没有公布新的 URL。我学到这里时碰巧搜到了这篇文章,发现是今年 4 月才更新的,有机会给各位转发一下,免得今后又过期了。此外,更新文章链接时还有个意外彩蛋,也一并分享给各位。更新这篇文章的,正是 CSS-Tricks 网站的创始人 Chris Coyier。

此人来头可不小,不仅一手创办并成功运营 CSS-Tricks 长达 15 年之久(2007 年创办,2022 年被知名 IDC 服务商 DigitalOcean 收购),同时也是 CodePen 网站的联合创始人之一。感兴趣的朋友可以去他的 个人网站 凑凑热闹,学习学习这位仍活跃在 CSS 一线的知名大咖是怎么做自我营销的。里面有很多漂亮的设计可供参考,也是个不错的学习园地。Chris Coyier 有句话给我印象很深:

I’m big on the power of writing as a way to think better and improve yourself.

我极为看重写作的力量,那是一种能帮我更好地思考并提升自我的有效途径。(深以为然!)

气氛都烘托到这儿了,怎么也得来张大头贴吧:

Chris Coyier

Chris Coyier 大头贴



关于《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.coloradmin.cn/o/2179693.html

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

相关文章

Clocking System

文章目录 1. 介绍2. 时钟源2.1 scillator Circuit (OSC)2.1.1 外部时钟输入模式2.1.2 外部晶体/陶瓷谐振器模式2.1.3 振荡器的配置2.1.4 Oscillator Watchdog 2.2 Back-up Clock 3. 锁相环&#xff08;PLL&#xff09;3.1 系统锁相环3.1.1 Features3.1.2 框图 3.2.外设锁相环3.…

JAVA云洋系统聚合快递打造一站式快递系统小程序源码

云洋系统聚合快递 —— 打造一站式快递管理新体验 &#x1f680; 一站式快递管理新时代 在快节奏的现代生活中&#xff0c;快递已经成为我们日常不可或缺的一部分。然而&#xff0c;面对众多快递公司和复杂的物流信息&#xff0c;如何高效管理快递成为了许多人的难题。幸运的是…

基于SpringBoot大学生就业管理系统设计与实现

1.1 研究背景 科学技术日新月异的如今&#xff0c;计算机在生活各个领域都占有重要的作用&#xff0c;尤其在信息管理方面&#xff0c;在这样的大背景下&#xff0c;学习计算机知识不仅仅是为了掌握一种技能&#xff0c;更重要的是能够让它真正地使用到实践中去&#xff0c;以…

从“抄袭”到“原创”:5个超实用的论文降重技巧!

AIPaperGPT&#xff0c;论文写作神器~ https://www.aipapergpt.com/ 每当写完一篇论文&#xff0c;松了一口气准备庆祝时&#xff0c;突然想到还有一个名叫“查重”的终极大Boss等着你&#xff0c;瞬间心情从云端跌入谷底。 是不是你&#xff1f; 很多同学在提交之前&#…

CDGA|利用人工智能与边缘计算显著提升数据治理效率与效果的实践案例

在当今数字化转型的浪潮中&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;随着数据量的爆炸性增长&#xff0c;如何高效、安全地治理这些数据成为企业面临的重要挑战。人工智能&#xff08;AI&#xff09;与边缘计算技术的融合&#xff0c;为数据治理带来了前所…

《程序猿之Redis缓存实战 · 哈希类型》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

《ToDesk 云电脑、易腾云、青椒云移动端体验实测:让手机秒变超级电脑》

前言 科技发展到如今2024年&#xff0c;可以说每一年都在发生翻天覆地的变化。云电脑这个市场近年来迅速发展&#xff0c;无需购买和维护额外的硬件就可以体验到电脑端顶配的性能和体验&#xff0c;并且移动端也可以带来非凡体验。我们在外出办公随身没有携带电脑情况下&#x…

聊一聊大模型六小虎生存现状!

ChatGPT横空出世&#xff0c;打响了生成式AI创业热潮的发令枪。 在国内&#xff0c;智谱AI、百川智能、零一万物、月之暗面、Minimax率先领跑。今年6月&#xff0c;前微软全球副总裁姜大昕创办的阶跃星辰&#xff0c;开始受到资本的青睐&#xff0c;一轮20亿美元的融资&#x…

服务器使用frp做内网穿透详细教程,请码住

目录 1.内网穿透的定义 2.前提条件 3.frp下载地址 4.配置服务器端的frps.toml文件 5. 配置客户端&#xff0c;即物理服务器或者是电脑本机地址 6.添加服务端启动命令startServerFrp.sh 7.添加客户端启动命令startClientFrp.sh 8. 查看服务端启动日志 9.查看客户端启…

HTML+CSS - 表单交互(一)

1. 前言 ​​​​​​​ Web 表单是用于和用户交互的强大工具——其常用于收集用户数据和控制用户界面。 web 表单是用户和 web 站点或应用程序之间交互的主要内容之一。它们允许用户输入数据&#xff0c;大多数情况下会将数据发送到 web 服务器进行处理和存储 2. form标签 …

数据飞轮赋能科学决策:火山引擎 DataTester 升级 A/B 大模型评测

在数字化浪潮的推动下&#xff0c;企业数据化转型已成为不可逆转的时代趋势。随着企业对数据价值认知的深化&#xff0c;从优化数据管理到内部数据普惠&#xff0c;再到数据资产价值的充分挖掘&#xff0c;数据产品需求呈现爆发式增长。作为推动企业数智化升级的新范式&#xf…

数造科技入选中国信通院《高质量数字化转型产品及服务全景图》三大板块

9月24日&#xff0c;2024大模型数字生态发展大会暨“铸基计划”年中会议在北京召开。会上&#xff0c;中国信通院发布了2024年《高质量数字化转型产品及服务全景图&#xff08;上半年度&#xff09;》和《高质量数字化转型技术解决方案&#xff08;上半年度&#xff09;》等多项…

解决银河麒麟操作系统“/dev/root does not exist”错误的快速方法

解决银河麒麟操作系统“/dev/root does not exist”错误的快速方法 1、步骤2、注意 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在安装系统时遇到“/dev/root does not exist”错误&#xff0c;通常是因为引导程序未正确设置启动设备。以…

golang学习笔记27-反射【重要】

本节也是GO核心部分&#xff0c;很重要。包括基本类型的反射&#xff0c;结构体类型的反射&#xff0c;类别方法Kind()&#xff0c;修改变量的值。 目录 一、概念&#xff0c;基本类型的反射二、结构体类型的反射三、类别方法Kind()四、修改变量的值 一、概念&#xff0c;基本…

Linux云计算 |【第四阶段】RDBMS1-DAY3

主要内容&#xff1a; 子查询&#xff08;单行单列、多行单列、单行多列、多行多列&#xff09;、分页查询limit、联合查询union、插入语句、修改语句、删除语句 一、子查询 子查询就是指的在一个完整的查询语句之中&#xff0c;嵌套若干个不同功能的小查询&#xff0c;从而一…

STM32 OLED

文章目录 前言一、OLED是什么&#xff1f;二、使用步骤1.复制 OLED.C .H文件1.1 遇到问题 2.统一风格3.主函数引用头文件3.1 oled.h 提供了什么函数 4.介绍显示一个字符的函数5. 显示十进制函数的讲解 三、使用注意事项3.1 配置符合自己的引脚3.2 花屏总结 前言 提示&#xff…

第L2周:机器学习|线性回归模型 LinearRegression:2. 多元线性回归模型

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 任务&#xff1a; ●1. 学习本文的多元线形回归模型。 ●2. 参考文本预测花瓣宽度的方法&#xff0c;选用其他三个变量来预测花瓣长度。 一、多元线性回归 简单线性回归&#xff1a;影响 Y 的因素唯一&…

python15_转换为ASCII

转换为ASCII A A B 你好 C 66def str_to_ascii(s):# 如果输入是单个字符&#xff0c;直接返回其ASCII值if len(s) 1:return ord(s)# 否则返回每个字符的ASCII值列表return [ord(char) for char in s]def int_to_ascii(i):# 将整数转换为对应的ASCII字符return chr(i)if __…

气膜仓库出售:智能高效的新选择—轻空间

随着现代物流和仓储需求的不断增长&#xff0c;传统仓库模式已经难以满足市场的多样化需求。气膜仓库凭借其灵活性、高效性和智能化的特点&#xff0c;成为仓储领域的新宠&#xff0c;而现在&#xff0c;我们推出了全新方向——气膜仓库出售&#xff0c;为企业提供更加灵活的资…

hex 文件和 bin 文件剖析

目录 一、概述二、hex 文件三、bin 文件 在单片机开发中&#xff0c;hex 文件和 bin 文件是非常常见的两种烧写文件格式。比如在 Keil 中&#xff0c;编译好程序后&#xff0c;点击 Download 就可以把 hex 文件烧录到板子上。 而有时候在我们实现 IAP 时&#xff0c;有需要生成…