【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://xiahunao.cn/news/3246323.html

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

相关文章

vue 实现下拉框的数据是树状结构

页面显示效果 vue实现代码 <el-form-item label"公司名称" prop"comName"><el-select ref"select" v-model"queryParams.comName" placeholder"请选择公司名称" clearable size"small"change"handl…

微信小程序新建项目发现导航条不见了,及如何找回。

原因是现在小程序新建用的是 Skyline 渲染引擎 开启全局Skyline渲染引擎&#xff0c;因为Skyline不支持原生导航栏&#xff0c;所以就没显示原生导航栏了。 解决方法也很简单 app.json文件中的 “renderer”: “skyline”, 修改为 “renderer”:“webview”app.json文件中的…

【Linux杂货铺】期末总结篇4:shell编程

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️什么是Shell脚本&#xff1f;二. ⛳️Shell 入门三. ⛳️Shell 变量3.1 &#x1f514;变…

从 Icelake 到 Iceberg Rust

本文作者丁皓是Databend 研发工程师&#xff0c;也是 ASF Member&#xff0c; Apache OpenDAL PMC Chair &#xff0c;主要研究领域包括存储、自动化与开源。 太长不看 Icelake 已经停止更新&#xff0c;请改用 iceberg-rust。 Iceberg-rust 是一个由社区驱动的项目&#xff0…

RocketMQ~架构与工作流程了解

简介 RocketMQ 具有高性能、高可靠、高实时、分布式 的特点。它是一个采用 Java 语言开发的分布式的消息系统&#xff0c;由阿里巴巴团队开发&#xff0c;在 2016 年底贡献给 Apache&#xff0c;成为了 Apache 的一个顶级项目。 在阿里内部&#xff0c;RocketMQ 很好地服务了集…

AI基于大模型语言存在的网络安全风险

目的&#xff1a; 随着大语言模型&#xff08;LLM&#xff09;各领域的广泛应用&#xff0c;我们迫切需要了解其中潜在的风险和威胁&#xff0c;及时进行有效的防御。 申明&#xff1a; AI技术的普及正当的使用大模型技术带来的便利&#xff0c;切勿使用与非法用途&#xff…

华为云SQLServer 慢日志查看

作者&#xff1a;梦莱 1、背景 华为云目前只支持 SQLServer 登录数据库&#xff0c;不支持查看慢日志。对于开启慢日志的实例&#xff0c;也只能通过将慢日志下载到本地 再远程连接目标实例数据库查看。本篇将华为云 SQLServer 实例出现资源异常&#xff0c;排查问题的方案整…

Qt Style Sheets-入门

Qt 样式表是一种强大的机制&#xff0c;允许您自定义小部件的外观&#xff0c;这是在通过子类化QStyle已经可行的基础上的补充。Qt 样式表的概念、术语和语法在很大程度上受到 HTML级联样式表 (CSS)的启发&#xff0c;但适用于小部件的世界。 概述 样式表是文本规范&#xff0…

客流统计系统优化景区服务流程,增强游客满意度

在当今旅游业蓬勃发展的时代&#xff0c;景区面临着越来越多的挑战和机遇。如何提供更优质、更高效的服务&#xff0c;满足游客日益增长的需求&#xff0c;成为了景区管理者们关注的焦点。客流统计系统作为一种创新的技术手段&#xff0c;正逐渐成为优化景区服务流程、增强游客…

【入门级】docker

开头处生动的描述一下”码头工人”吧&#xff1a;小鲸鱼&#xff08;登记处Registry&#xff1a;比如docker hub官方&#xff09;背着好多集装箱&#xff08;仓库repository&#xff1a;存放各种各样的镜像&#xff0c;一般存放的是一类镜像&#xff0c;这一类镜像中通过tag 版…

【C++】题解:P1259 黑白棋子的移动_递归+模拟_算法竞赛_洛谷

文章目录 P1259 黑白棋子的移动 题解题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示解题思路AC CodeEnd P1259 黑白棋子的移动 题解 Link&#xff1a;Luogu - P1259 题目描述 有 2 n 2n 2n 个棋子排成一行&#xff0c;开始为位置白子全部在左边&#xff0c;黑…

fastapi入门教程

☆ FASTAPI 前期准备 运行环境和安装 安装python环境安装fastapi安装uvicron 开始使用fastapi 01.第一个简单程序 from fastapi import FastAPI app FastAPI() app.get("/") def read_root():return {"Hello": "World"}运行&#xff1a;…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【获取密钥属性(ArkTS)】

获取密钥属性(ArkTS) HUKS提供了接口供业务获取指定密钥的相关属性。在获取指定密钥属性前&#xff0c;需要确保已在HUKS中生成或导入持久化存储的密钥。 开发步骤 指定待查询的密钥别名keyAlias&#xff0c;密钥别名最大长度为64字节。调用接口[getKeyItemProperties]&…

Large Language Model系列之一:语言模型与表征学习(Language Models and Representation Learning)

语言模型与表征学习&#xff08;Language Models and Representation Learning&#xff09; 1 语言模型 N-Gram模型 from collections import defaultdictsentences [The swift fox jumps over the lazy dog.,The swift river flows under the ancient bridge.,The swift br…

羊大师提醒:夏日防溺水,安全记心间

夏日炎炎&#xff0c;阳光洒满大地&#xff0c;带来了无尽的活力与欢乐&#xff0c;但在这欢快的季节里&#xff0c;也潜藏着不容忽视的安全隐患——溺水事故。为了您和家人的幸福安康&#xff0c;我们特别提醒&#xff1a;“夏日防溺水&#xff0c;安全记心间”。 夏日是游泳戏…

快手开源LivePortrait,实现表情姿态极速迁移,GitHub 6.5K Star

近日&#xff0c;快手可灵大模型团队开源了名为LivePortrait的可控人像视频生成框架&#xff0c;能够准确、实时地将驱动视频的表情、姿态迁移到静态或动态人像视频上&#xff0c;生成极具表现力的视频结果。如下动图所示&#xff1a; 来自网友测试LivePortrait 来自网友测试Li…

世界启动Ⅱ--LLM的隐私问题

前言 本文的目的是关注大语言模型 (LLM)所面临的挑战以及便利性和隐私性之间的权衡&#xff0c;以帮助您决定哪种途径最适合您。 在处理传统软件时&#xff0c;隐私问题通常围绕数据存储、传输和访问控制。我们实施加密、设置安全数据库并谨慎管理用户权限。然而&#xff0c;…

JAVA零基础学习1(CMD、JDK、环境变量、变量和键盘键入、IDEA)

JAVA零基础学习1&#xff08;CMD、JDK、环境变量、变量和键盘键入、IDEA&#xff09; CMD常见命令配置环境变量JDK的下载和安装变量变量的声明和初始化声明变量初始化变量 变量的类型变量的作用域变量命名规则示例代码 键盘键入使用 Scanner 类读取输入步骤示例代码 常用方法处…

世界启动Ⅲ--什么是 Transformer?

前言 Transformer 本质上是神经网络。专门从数据中学习上下文的神经网络。 但它们的特殊之处在于存在一些机制&#xff0c;可以消除对标记数据集以及网络中的卷积或循环的需求。 这些特殊机制是什么&#xff1f; 有很多。但真正推动 Transformer 发展的两种机制是注意力加权…

git 代理错误拒绝连接

git 克隆项目拒绝连接 现象 Failed to connect to 127.0.0.1 port 15732: 拒绝连接 问题描述 代理错误解决方法 取消代理 git config --global --unset http.proxy