【CSS in Depth 2 精译_018】3.1.2 逻辑属性 + 3.1.3 用好逻辑属性的简写形式

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

  • 第一章 层叠、优先级与继承(已完结)
    • 1.1 层叠
    • 1.2 继承
    • 1.3 特殊值
    • 1.4 简写属性
    • 1.5 CSS 渐进式增强技术
    • 1.6 本章小结
  • 第二章 相对单位(已完结)
    • 2.1 相对单位的威力
    • 2.2 em 与 rem
    • 2.3 告别像素思维
    • 2.4 视口的相对单位
    • 2.5 无单位的数值与行高
    • 2.6 自定义属性
    • 2.7 本章小结
  • 第三章 文档流与盒模型
    • 3.1 常规文档流(已完结)
      • 3.1.1 内容水平居中
      • 3.1.2 逻辑属性 ✔️
      • 3.1.3 用好逻辑属性的简写形式 ✔️
    • 3.2 盒模型
      • 3.2.1 避免魔术数值(精译中 ⏳)

3.1.2 逻辑属性

过去,文档流的默认行为会给需要翻译成特定语言的网站造成困难。常规流是按从左至右、从上到下的方向流动的,这是因为包括英语在内的绝大多数语言都是这样书写的。但是,为了让“万维”网(“world-wide” web)能够真正名符其实地对全世界开放,就必须兼容书写方式各不相同的其他语言,包括从右向左阅读的语言(如阿拉伯语、希伯来语),以及垂直书写的语言(如日语、繁体中文)。W3C 联盟为此投入了大量工作,最终为 CSS 成功引入了 逻辑属性(logical properties 的概念。

定义

逻辑属性 为元素流向的处理提供了一种新的思路。它是针对块级元素和行内元素对应的方向而言的,而这些方向又是随不同语言的书写习惯而动态变化的。这样就无需生硬地指定元素上、下、左、右的尺寸以及宽高的具体大小了。

使用逻辑属性时,之前的水平方向与垂直方向的概念,分别被 行内基准方向(即 inline base direction,表示文字在行内的流动方向)和 块级流动方向(即 block flow direction,也就是段落等盒型元素自然堆叠的方向)所取代。要设置的属性不再是 width,而是 inline-size。二者虽然在水平书写模式下效果完全相同,但在垂直书写模式下 inline-size 可用于指定高度;同理,高度 height 也无需设置了,取而代之的是 block-size 属性:它也可以在垂直书写模式下设置宽度。

逻辑属性还将以往的 “上(top)、右(right)、下(bottom)、左(left)” 换成了 开始(start结束(end。因此,padding-leftpadding-right 分别变为 padding-inline-startpadding-inline-endborder-topborder-bottom 则分别变为 border-block-startborder-block-end——这些属性的含义会根据书写模式的不同而重新动态调整。

图 3.5 列举了块级方向与行内方向在各种书写模式下的文档流向。箭头从每个维度方向的“开始(start)”指向“结束(end)”。图中用 border-inline-start 加粗了每个示例中的某一个边框,以强调其行为特征。

图 3.5 行内元素与块级元素在各种书写模式下的文档流方向图 3.5 行内元素与块级元素在各种书写模式下的文档流方向

要适应这些逻辑属性,关键是得熟悉这些新的叫法。改变原有的页面布局大可不必,换掉那些习以为常的术语即可。至于适应多种书写模式及语言的问题,还是留到真要翻译页面内容的时候再说吧;在使用逻辑属性的前提下,如果布局方案能在从左到右书写的、熟悉的语言中奏效,那么一旦书写模式改变,该布局方案也会随之调整。

工作中只用到一种语言,是否还需要逻辑属性?

这取决于您的工作和生活环境。创建可以支持其他书写模式的网站,这样的场景可能并不多见。即便如此,理解逻辑属性的工作原理仍然非常重要,原因有三——

  1. 逻辑属性是 flexbox 布局和 grid 布局中众多核心概念不可或缺的前期储备知识(本书将在后续两章中深入探讨这些布局概念);
  2. 一些逻辑属性是没有对应的传统属性的,但有时用起来往往更加方便;
  3. 随着逻辑属性在行业中的应用日益广泛,正确理解遇到的新样式写法也尤为重要。

实际工作中,如果正在开发的网站无需切换书写模式,那么究竟是用逻辑属性还是传统属性,亦或是将二者有机结合,都完全可以由您自行决定。即使是在多语言场景下,有时可能也需要用到一些传统属性,例如要让新增的样式效果在任何书写方向上都保持一致的时候。

如果您一直在用浏览器的 DevTools 工具检查页面元素,可能都已经注意到了,用户代理样式表在处理默认外边距时用到了逻辑属性;处理列表元素时也使用了 inline-start 风格的内边距;类似的情况还出现在了其他一些属性中。

在层叠规则中,传统属性及其对应的逻辑属性可以相互覆盖。因此,如果对列表设置了左内边距 padding-left,则会覆盖用户代理样式中的 padding-inline-start 样式;相反,也可以使用 margin-block-start 和优先级更高的选择器来覆盖优先级较低的 margin-top 样式。也就是说,这两种方法可以在样式表中相互交换,并且仍然可以获得可预测的效果。

几乎所有与垂直或水平样式相关的 CSS 属性(property)都有对应的逻辑属性。这样一来,您就可以基于当前语言的具体特征来定义页面布局。以下罗列了部分常见的传统属性和取值、及其对应的逻辑属性的写法和取值情况:

  • width / inline-size
  • height / block-size
  • margin-top / margin-block-start
  • margin-bottom / margin-block-end
  • margin-left / margin-inline-start
  • margin-right / margin-inline-end
  • text-align: left / text-align: start
  • text-align: right / text-align: end
  • border-top-left-radius / border-start-start-radius
  • border-top-right-radius / border-start-end-radius
  • border-bottom-left-radius / border-end-start-radius
  • border-bottom-right-radius / border-end-end-radius

以上列表只展示了一部分情况,但足以清楚演示这种新的写法了。通过使用 block/inlinestart/end,您所熟悉的传统样式属性写法都可以切换成对应的等效逻辑属性。关于逻辑属性的全面介绍,请参阅 https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties。

3.1.3 用好逻辑属性的简写形式

某些逻辑属性恰巧为常见的样式设置提供了简写形式。例如,margin-inline 可以一次性设置起始(左侧)和结束(右侧)外边距、而无需设置上下两侧的外边距。使用 margin-inline: 2rem 可以将起止外边距(即左外边距与右外边距)同时设为 2rem;或者使用 margin-inline: 2rem 4em 将开始(左)外边距设为 2rem,并将结束(右)外边距设为 4em。同理,margin-block 也可以通过设置块级元素外边距的起止样式来简化传统的上下外边距,类似的属性还包括 padding-inlinepadding-blockborder-inline 以及 border-block。传统的经典 CSS 属性是没有这样的行为特征的。

这种写法能让之前介绍的双容器模式更加简洁。按照代码清单 3.4 更新样式表,注意代码还包括将 max-width 属性替换为对应的逻辑属性 max-inline-size

代码清单 3.4 将逻辑属性应用于双容器模式

.page-header h1 {max-inline-size: var(--column-width); /* max-width 的等效逻辑属性 */margin-inline: auto; /* 将左右外边距设为 auto,而无需指定上下外边距 */
}
.container {max-inline-size: var(--column-width); /* max-width 的等效逻辑属性 */margin-inline: auto; /* 将左右外边距设为 auto,而无需指定上下外边距 */
}

这些更改不会给页面带来任何视觉变化,仅仅是方便了页面样式的编写。我发现这些样式简写非常有用,因为我经常要为外边距或其他样式属性单独指定上下或左右两边的值。

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

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

相关文章

Prometheus 云原生 - Prometheus 数据模型、Metrics 指标类型、Exporter 相关

目录 开始 Prometheus 数据类型 简单理解 时序样本 格式 和 命名要求 Metrics 指标类型 Counter 计数器 Gauge Histogram Summary Exporter 相关 概述 Exporter 类型 Exporter 规范 开始 Prometheus 数据类型 简单理解 a)安装好 Prometheus 后会暴露…

乘积量化pq:将高维向量压缩 97%

向量相似性搜索在处理大规模数据集时,往往面临着内存消耗的挑战。例如,即使是一个包含100万个密集向量的小数据集,其索引也可能需要数GB的内存。随着数据集规模的增长,尤其是高维数据,内存使用量会迅速增加&#xff0c…

2024年大数据高频面试题(中篇)

文章目录 Kafka为什么要用消息队列为什么选择了kafkakafka的组件与作用(架构)kafka为什么要分区Kafka生产者分区策略kafka的数据可靠性怎么保证ack应答机制(可问:造成数据重复和丢失的相关问题)副本数据同步策略ISRkafka的副本机制kafka的消费分区分配策略Range分区分配策略…

SAP ABAP性能优化分析工具

SAP系统提供了许多性能调优的工具,重点介绍下最常用几种SM50, ST05, SAT等工具: 1.工具概况 1.1 SM50 / SM66 - 工作进程监视器 通过这两个T-code, 可以查看当前SAP AS实例上面的工作进程,当某一工作进程长时间处于running的状态时&#…

每日OJ_牛客_删除公共字符(暴力+哈希)

目录 牛客_删除公共字符 法一代码(暴力) 法二代码(哈希) 牛客_删除公共字符 删除公共字符__牛客网 法一代码(暴力) 暴力查找方式,如判断第一个串的字符是否在第二个串中,在再挪动…

排序——归并排序及排序章节总结

前面的文章中 我们详细介绍了排序的概念,插入排序,交换排序与选择排序,大家可以通过下面的链接再去学习: ​​​​​​排序的概念及插入排序 交换排序 选择排序 这篇文章就详细介绍一下另一种排序算法:归并排序以及…

Uniapp基础篇(持续更新)

1. Uni-app常用内置组件 view 视图容器 scroll-view 可滚动视图区域,用于区域滚动。需注意在webview渲染的页面中,区域滚动的性能不及页面滚动。 swiper 滑块视图容器。一般用于左右滑动或上下滑动,比如banner轮播图。 image uniapp官方iam…

ROS服务通信机制实操Python

ROS服务通信机制实操Python 步骤流程vscode配置服务端客户端编辑配置文件编译并执行优化实现参数的动态提交优化先启动客户端后启动服务端 ROS服务通信的理论查阅:ROS服务通信流程理论 ROS服务通信的自定义srv数据的准备可以查阅:ROS服务通信自定义srv …

【学术会议征稿】第八届控制工程与先进算法国际论坛(IWCEAA 2024)

第八届控制工程与先进算法国际论坛 8th International Workshop on Control Engineering and Advanced Algorithms(IWCEAA 2024) 第八届控制工程与先进算法国际论坛(IWCEAA 2024)将于2024年11月1-3日在中国南京隆重举行。会议旨在为从事算法、控制工程与…

昇思25天学习打卡营第七天|应用实践/生成式/Diffusion扩散模型

心得 这个课程是一个劝退的课程。讲述了Diffusion扩散模型实现原理。提供了这个原理的一些公式推导。当然看这个推导是需要一定的数学基础的。这个课程这么写,是为了让那些数学不怎么好的,知难而退吗? 这个课程还是一个比较难以复制粘贴的课…

陪玩系统小程序模式APP小程序H5系统搭建开发

随着移动互联网的营及和游戏行业的蓬轨发展,陪玩服务应远而生并迅速唱起,陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁,其模式系统的搭建与开发是得尤为重要,本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程,包…

Nginx入门到精通四(反向代理2)

下面内容整理自bilibili-尚硅谷-Nginx青铜到王者视频教程 Nginx相关文章 Nginx入门到精通一(基本概念介绍)-CSDN博客 Nginx入门到精通二(安装配置)-CSDN博客 Nginx入门到精通三(Nginx实例1:反向代理&a…

Spring Security 授权

基于request的授权 HttpSecurity 权限配置 Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.authorizeHttpRequests(authorize -> {authorize// 放行请求:针对含有 admin 权限的用户放行 /user/get 接口.requestMatchers("/us…

UE4-光照渲染、自动曝光、雾

目录 一.光源种类 二.灯光的移动性 三.自动曝光 四.指数级高度雾 五.实现光束 一.光源种类 1.定向光源 用来模拟现实中的太阳光。 2.点光源 比如现实中的灯泡 3.聚光源 4.矩形光源 是这几个光源中性能开销最大的,一般不用到游戏场景中,因为游…

【文心智能体】前几天百度热搜有一条非常有趣的话题《00后疯感工牌》,看看如何通过低代码工作流方式实现图片显示

00后疯感工牌体验:https://mbd.baidu.com/ma/s/6yA90qtM 目录 前言比赛推荐工作流创建工作流入口创建工作流界面工作流界面HTTP工具卡点地方 总结推荐文章 前言 前几天百度热搜有一条非常有有趣《00后疯感工牌》。 想着通过文心智能体去一键生成00后疯感工牌是不是…

Qt 多语言

记录Qt多语言的实现过程 目录 1.项目配置文件.pro配置 2.程序中的字符串用tr()封装 3.生成翻译文件 4.使用Qt语言家修改翻译文件 4.1使用Qt语言家打开 4.2 .更改文件配置 5. 生成qm文件 6.代码执行切换语言 6.1入口处 6.2 事件执行 0.效果 1.项目配置文件.pro配置 T…

js执行机制----事件循环

前言 问题 一般情况下,我们都认为js是顺序执行的 但是遇到下列情况 setTimeout(function(){console.log(定时器开始啦) });new Promise(function(resolve){console.log(马上执行for循环啦);for(var i 0; i < 10000; i){i 99 && resolve();} }).then(function(…

嵌入式人工智能(7-树莓派4B的IIC总线连接OLED显示中文与图片)

1、IIC总线 IIC总线&#xff08;Inter-Integrated Circuit&#xff09;是一种串行通信总线&#xff0c;也被称为I2C总线。它由飞利浦&#xff08;Philips&#xff09;公司在1980年代开发&#xff0c;用于连接微处理器和外部设备。 IIC总线使用两根信号线&#xff1a;SDA&…

删除windows系统里磁盘的恢复分区

说下我的情况 我买了块固态磁盘&#xff0c;插上主板&#xff0c;发现它自带了系统&#xff0c;这样我开机就会转到这块磁盘&#xff0c;即使在boot里改变也不行&#xff0c;后面我格式化了对应的盘符&#xff0c;但在磁盘管理里&#xff0c;发现有个EFI系统分区和恢复分区存在…

C++中的语句详细介绍:简单语句、条件、循环迭代语句、跳转语句、异常处理语句、try语句等

文章目录 C中的语句(1)简单语句A.空语句B.复合语句 (2)条件语句(3)迭代语句A.常规for循环B.范围for循环C.while和do...while (4)跳转语句A.break语句B.continue语句C.goto语句 (5)异常处理语句A.标准异常B.throw抛出异常 (6)try语句 C中的语句 (1)简单语句 简单语句包括&#…