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

news2024/9/22 7:07:36

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

  • 第一章 层叠、优先级与继承(已完结)
    • 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.coloradmin.cn/o/1932982.html

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

相关文章

在 Windows 上运行 Linux:WSL2 完整指南(二)

系列文章目录 在 Windows 上运行 Linux:WSL2 完整指南(一)🚪 在 Windows 上运行 Linux:WSL2 完整指南(二)🚪 文章目录 系列文章目录前言四、常见问题及解决方法问题二:0…

本地部署,edge-tts文本转语音解决方案

目录 什么是 edge-tts? 主要特点 应用场景 优势 开始使用 edge-tts 命令行安装 edge-tts 库: docker安装 未来展望 总结 https://github.com/rany2/edge-ttshttps://github.com/rany2/edge-tts 随着科技的进步,文本转语音&#xff…

PyCharm查看文件或代码变更记录

背景: Mac笔记本上有一个截图的定时任务在运行,本地Python使用的是PyCharm IDE,负责的同事休假,然后定时任务运行的结果不符合预期,一下子不知道问题出现在哪里。 定位思路: 1、先确认网络、账号等基本的…

Flutter动画详解第二篇之显式动画(Explicit Animations)

目录 前言 一、定义 1.AnimationController 1.常用属性 1. value 2. status 3. duration 2.常用方法 1.forward 2.reverse 3.repeat 4.stop 5. reset 6. animateTo(double target, {Duration? duration, Curve curve Curves.linear}) 7.animateBack(double ta…

android R ext4 image打包脚本介绍

一、Android R打包指令使用介绍 (1)mkuserimg_mke2fs #./mkuserimg_mke2fs --help usage: mkuserimg_mke2fs [-h] [--android_sparse] [--journal_size JOURNAL_SIZE][--timestamp TIMESTAMP] [--fs_config FS_CONFIG][--product_out PRODUCT_OUT][--b…

Nginx、LNMP万字详解

目录 Nginx 特点 Nginx安装 添加Nginx服务 Nginx配置文件 全局配置 HTTP配置 状态统计页面 Nginx访问控制 授权用户 授权IP 虚拟主机 基于域名 测试 基于IP 测试 基于端口 测试 LNAMP 解析方式 LNMP转发php-fpm解析 Nginx代理LAMP解析 LNMP部署示例 实…

live555 rtsp服务器实战之doGetNextFrame

live555关于RTSP协议交互流程 live555的核心数据结构值之闭环双向链表 live555 rtsp服务器实战之createNewStreamSource live555 rtsp服务器实战之doGetNextFrame 注意:该篇文章可能有些绕,最好跟着文章追踪下源码,不了解源码可能就是天书…

message from server: “Too many connections“

theme: nico 你们好,我是金金金。 场景 启动服务时,报错如上:数据源拒绝建立连接,服务器发送消息:“连接过多” 排查 看报错信息提示的很明显了 查看MySQL 数据库中最大允许连接数的配置信息(我mysql是部…

LabVIEW Communications LTE Application Framework 读书笔记

目录 硬件要求一台设备2台USRPUSRP-2974 示例项目的组件文件夹结构DL Host.gcompeNodeB Host.gcompUE Host.gcompBuildsCommonUSRP RIOLTE 操作模式DLeNodeBUE 项目组件单机双机UDP readUDP writeMAC TXMAC RXDL TX PHYDL RX PHYUL TX PHYUL RX PHYSINR calculationRate adapta…

python入门课程Pro(1)--数据结构及判断

数据结构及判断 第1课 复杂的多向选择1.if-elif-else2.if嵌套3.练习题(1)大招来了(2)奇数还是偶数(3)简洁代码 第2课 数据与判断小结1.变量2.格式化输出3.逻辑运算-或与非4.判断条件5.练习题(1&…

基于 JAVA 的旅游网站设计与实现

点击下载源码 塞北村镇旅游网站设计 摘要 城市旅游产业的日新月异影响着村镇旅游产业的发展变化。网络、电子科技的迅猛前进同样牵动着旅游产业的快速成长。随着人们消费理念的不断发展变化,越来越多的人开始注意精神文明的追求,而不仅仅只是在意物质消…

[word] word如何编写公式? #微信#知识分享

word如何编写公式? word如何编写公式?Word中数学公式是经常会使用到的,若是要在文档中录入一些复杂的公式,要怎么做呢?接下来小编就来给大家讲一讲具体操作,一起看过来吧! 方法一:…

RISC-V在线反汇编工具

RISC-V在线反汇编工具: https://luplab.gitlab.io/rvcodecjs/#q34179073&abifalse&isaAUTO 不过,似乎,只支持RV32I、RV64I、RV128I指令集:

Flutter热更新技术探索

一,需求背景: APP 发布到市场后,难免会遇到严重的 BUG 阻碍用户使用,因此有在不发布新版本 APP 的情况下使用热更新技术立即修复 BUG 需求。原生 APP(例如:Android & IOS)的热更新需求已经…

【精品资料】物业行业BI大数据解决方案(43页PPT)

引言:物业行业BI(Business Intelligence,商业智能)大数据解决方案是专为物业管理公司设计的一套综合性数据分析与决策支持系统。该解决方案旨在通过集成、处理、分析及可视化海量数据,帮助物业企业提升运营效率、优化资…

SCSA第七天

防火墙的可靠性 因为防火墙上不仅需要同步配置信息,还需要同步状态信息(会话表等),所以,防火墙不能 像路由器那样单纯的靠动态协议来实现切换,需要用到双机热备技术。 1,双机 --- 目前双机热…

yearrecord——一个类似痕迹墙的React数据展示组件

介绍一下自己做的一个类似于力扣个人主页提交记录和GitHub主页贡献记录的React组件。 下图分别是力扣个人主页提交记录和GitHub个人主页的贡献记录,像这样类似痕迹墙的形式可以比较直观且高效得展示一段时间内得数据记录。 然而要从0实现这个功能还是有一些麻烦得…

构建gitlab远端服务器(check->build->test->deploy)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言构建gitlab远端服务器一、步骤一:搭建gitlab的运行服务器【运维】1. 第一步:硬件服务器准备工作(1)选择合适的硬件和操作系统linux(2)安装必…

QT-RTSP相机监控视频流

QT-RTSP相机监控视频流 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_settings("outSmart", "LiveWatcher&…

算法题目整合

文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b&#xff0c;她仅可以执行一次以下翻转操作&#xff1a;选择a数组中的一个区间[i, j]&…