【CSS in Depth 2 精译_026】4.4 Flexbox 元素对齐、间距等细节处理(上)

news2024/9/20 5:43:12

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

  • 第一章 层叠、优先级与继承(已完结)
    • 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.2 盒模型
    • 3.3 元素的高度
    • 3.4 负的外边距
    • 3.5 外边距折叠
    • 3.6 容器内的元素间距问题
    • 3.7 本章小结
  • 第四章 Flexbox 布局
    • 4.1 Flexbox 布局原理(已完结)
      • 4.1.1 创建一个基础的 Flexbox 菜单
      • 4.1.2 添加内边距与间隔
    • 4.2 弹性子元素的大小(已完结)
      • 4.2.1 使用 flex-basis 属性
      • 4.2.2 使用 flex-grow 属性
      • 4.2.3 使用 flex-shrink 属性
      • 4.2.4 实际应用
    • 4.3 弹性布局的方向(已完结)
      • 4.3.1 变更弹性布局的方向
      • 4.3.2 登录表单的样式设计
    • 4.4 对齐、间距等细节处理 ✔️
      • 4.4.1 理解弹性容器的属性 ✔️
      • 4.4.2 理解弹性子元素的属性(精译中 ⏳)
      • 4.4.3 使用对齐属性(精译中 ⏳)
    • 4.5 本章小结(精译中 ⏳)

文章目录

    • 4.4 对齐、间距等细节处理
      • 4.4.1 理解弹性容器的属性
        • 1 flex-wrap 属性
        • 2 flex-flow 属性
        • 3 justify-content 属性
        • 4 align-content 属性
        • 5 align-items 属性

4.4 对齐、间距等细节处理

至此,我们已经对 Flexbox 最为核心的知识点有了全面深入的了解。不过前面提到过,还有很多设置项偶尔也能派上用场,它们大多与弹性子元素在弹性容器中的对齐方式或间距设置有关。还有一些设置用于控制换行,或者重新对子元素单独排序。

这些控制属性都罗列在了以下几张图表中:图 4.18 和图 4.19 列出了可在弹性容器上设置的所有属性;图 4.20 则列出了弹性子元素的所有属性。这些属性中很多也适用于下一章将要重点介绍的 网格布局(grid layout)

图 4.18 弹性容器的属性

图 4.18 弹性容器的属性

图 4.19 弹性容器的属性(续)

图 4.19 弹性容器的属性(续)

图 4.20 弹性子元素的属性

图 4.20 弹性子元素的属性

通常情况下,创建一个弹性盒子需要用到前面介绍的以下方法:

  • 选定一个容器及其子元素,并给容器设置 display: flex
  • 如有必要,再对容器设置 gap 和/或 flex-direction 属性;
  • 必要时,为弹性子元素设置 flex 属性值来控制尺寸大小。

待元素大致摆放就位后,就可以按需设置其他 Flexbox 属性了。我建议先熟悉迄今为止学过的知识点,然后再继续本章后续内容,了解 Flexbox 提供的这些功能属性,等到用得着的时候再来记住它们,毕竟一口气记住所有这些以 align-*justify-* 开头的属性名绝非易事。什么时候用得上了,再回过头来参考参考就行了。剩下的大部分属性其实都比较简单。

4.4.1 理解弹性容器的属性

弹性容器上有好几个属性可以控制弹性子元素的布局,首先是前面 4.3 小节介绍过的 flex-direction,本节再来看看其他属性。

1 flex-wrap 属性

flex-wrap 属性可以让弹性子元素换到新的一行或多行显示,其属性值可以是 nowrap(初始值)、wrapwrap-reverse。启用换行后,子元素不再随指定的 flex-shrink 值收缩;相反,任何溢出弹性容器的子元素都将换行显示。

如果弹性布局的方向是 columncolumn-reverseflex-wrap 也能让弹性子元素换到下一列展示,只不过是在容器高度被限制的情况下才会发生;否则容器会纵向延展来包含溢出的子元素。

2 flex-flow 属性

flex-flow 属性是 flex-directionflex-wrap 的简写形式。例如 flex-flow: column wrap 指定弹性子元素从上到下排列,必要时换到下一列显示。

3 justify-content 属性

当弹性子元素未填满容器时,可以用 justify-content 属性来控制子元素沿主轴方向的间距。支持的属性值还有几个新关键字:flex-startflex-endcenterspace-betweenspace-around 以及 space-evenly。当值为默认的 flex-start 时,各子元素将从主轴的起始位置顺序排列。例如主轴方向通常为从左至右,起始位置就是左侧。如果不设置 gap 或外边距,子元素间就不存在间距。若值为 flex-end,则从主轴终点位置开始排列,center 则让子元素整体居中。

注意,这里的 startend 其实是让子元素靠左或靠右排列的逻辑值,它们取决于具体的书写模式,而与主轴方向无关;而 leftright 则是绝对值,始终按靠左和靠右排列执行,与书写模式及弹性布局方向无关。

均匀分布弹性子元素的方法共有三种,每种方法在首个子元素之前、末尾子元素之后提供不同的空间:space-between 令首尾子元素分别紧贴主轴的起点与终点,其余间隙均匀分布;space-around 则令首尾子元素的外围空间等于各子元素间均布间隙的一半;而 space-evenly 则是令首尾子元素的外围空间与子元素间的均布间隙相等。

间距(spacing)是在算出外边距与 flex-grow 值之后生效的。换言之,如果任意子元素的 flex-grow 属性不为 0、或者任何子元素在主轴方向的外边距值为 auto,那么属性 justify-content 就失效了。

4 align-content 属性

若启用换行(即 flex-wrap),align-content 属性就可以控制弹性容器内沿副轴方向各行之间的间距。支持的属性值有 flex-startflex-endcenterstretch(初始值)、space-between 以及 space-around。这些值对间距的处理类似上面的 justify-content

此外还有一个 place-content 属性,它是 align-contentjustify-content 的简写形式。

5 align-items 属性

控制子元素主轴方向对齐方式的是 justify-content 属性;而控制它们在副轴方向对齐的则是 align-items 属性,其初始值为 stretch,可以让子元素在水平布局时填满容器高度,而在垂直布局时填满容器宽度,因此可用于实现等高列。

其他的属性值能让弹性子元素保留自身的大小,而不必填充容器大小(类似 vertical-align 的概念)

  • flex-startflex-end:令子元素与副轴的开始和结束位置对齐(分别对应水平布局时的顶部与底部)。
  • startend:均为逻辑值,根据弹性容器的书写模式对各子元素进行对齐。
  • self-startself-end:也是逻辑值;也是根据各子元素的书写模式来设置对齐方式;但仅在某弹性子元素的书写模式与弹性容器各异时,二者才会与 startend 不同。
  • center:令子元素居中。
  • baseline:让元素根据每个弹性子元素的首行文本的基线对齐。基线(baseline)是文本底边所在的参考线。

当想让一个弹性子元素中大字号标题的基线与其他子元素中的小号字的文本基线对齐时,baseline 就能大展身手了。另外,还可以在此基础上加注 firstlast 字样,指定要对齐到文本的哪一行。例如,align-items: last baseline 就能让各弹性子元素按各自文本的最后一行对齐。

提示

justify-contentalign-items 属性的名称很容易混淆。我是参考文本处理器中的文本样式的含义来分辨它们的:可以“调整”(justify)文字,使其在水平方向的两端之间均匀分布;而 align-items 更像 vertical-align,能让行内文本在垂直方向上“对齐”(align)。

最后还有一个 place-items 属性,它是 align-itemsjustify-items 的简写形式。特别注意,justify-items 只能在第 5 章即将介绍的 网格布局(grid layout) 中使用,而在弹性容器中会被忽略。

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

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

相关文章

HTML深度探索 :img应用与实践

HTML深度探索 &#xff1a;img应用与实践 1、定义和用法2、图像格式3、常用属性4、预加载和懒加载4.1 预加载4.2 懒加载 1、定义和用法 HTML 元素 <img>将一张图像嵌入文档。 从技术上讲&#xff0c;实际上并没有将图像插入到网页中&#xff0c;而是将图像链接到了网页。…

17种最佳的联盟营销工具,助你赚取更多佣金

通过最新、最先进的工具获得竞争优势&#xff0c;并启动你的联盟营销策略&#xff0c;以提高效率和节省&#xff08;大量&#xff09;时间。 如果你销售联盟产品或服务&#xff0c;你可能知道&#xff0c;当你意识到市场营销涉及大量工作&#xff08;有时还包括金钱&#xff0…

【算法思想·二叉树】后续篇

本文参考labuladong算法笔记[二叉树心法&#xff08;后序篇 | labuladong 的算法笔记] 前序位置的代码只能从函数参数中获取父节点传递来的数据&#xff0c;而后序位置的代码不仅可以获取参数数据&#xff0c;还可以获取到子树通过函数返回值传递回来的数据。 那么换句话说&am…

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器 Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方…

在python里把图变成gif

import scipy.io import matplotlib.pyplot as plt import imageio import numpy as npdata scipy.io.loadmat("/文件路径/Sol.mat")# 提取数据 t_current data[t].flatten() XX, YY np.meshgrid(data[x].flatten(), data[y].flatten()) u_pred_plot_final data[…

轻松应对:环保专包二级资质续期常见问题解答

在环保专包二级资质续期过程中&#xff0c;企业可能会遇到一系列常见问题。以下是对这些问题的详细解答&#xff0c;旨在帮助企业轻松应对续期挑战&#xff1a; 一、政策理解与把握 问题&#xff1a;如何准确理解和把握最新的环保政策和资质续期要求&#xff1f; 解答&#x…

HCIA--实验十三:VLAN间通信子接口实验/双单臂路由实验

一、实验内容 1.需求/要求&#xff1a; 将两个单臂路由通过两台交换机连接起来&#xff0c;成为双臂路由&#xff0c;并探讨这么做的原因。实现全网通&#xff0c;让任何一台主机之间都可以通信。 二、实验过程 1.拓扑图&#xff1a; 2.步骤&#xff1a; 1.给PC配置ip地址…

传感器技术在构建实时监控系统中有什么作用

在无线传感器技术中&#xff0c;物联网生成的传感器数据通过无线方式传输到网络服务器&#xff0c;工程师可以在其中跟踪参数。远距离无线通信提高了工业 4.0 的成本效率并减少了人力。实时监控系统旨在显示传感器节点周围的快速变化&#xff0c;这需要快速、低延迟的数据传输。…

数据分析与挖掘课程相关资源

这是在gitee上整的关于这门课的一个开源项目。 https://gitee.com/rainpet/python-data-analysis-and-mining-demo 头歌平台。 常见问题&#xff1a; 1、如何确认conda的版本&#xff0c;执行如下命令&#xff1a; conda list anaconda$2、实验室登陆后&#xff0c;无法上网&a…

JAVA开源项目 大学生租房平台 计算机毕业设计

本文项目编号 T 019 &#xff0c;文末自助获取源码 \color{red}{T019&#xff0c;文末自助获取源码} T019&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

浅谈人工智能之基于ollama的常见变量设置

浅谈人工智能之基于ollama的常见变量设置 全局命令设置 现象&#xff1a;无法直接使用命令ollama 问题显示如下&#xff1a; [rootlocalhost LLM]# ollama -bash: ollama: command not found 解决方法一&#xff1a; 第一步&#xff1a;输入如下命令&#xff1a; [rootloca…

Android Studio偶尔打开Flutter项目没有智能提示的解决方案

Flutter支持多种IDE来编程&#xff0c;我曾使用过Android Studio和VSC两款软件&#xff0c;但因为长期使用Android Studio的原因&#xff0c;使用起来会比VSC顺手&#xff0c;然后就发现偶尔AS加载Flutter项目会无法使用智能提示&#xff0c;也没有代码高亮等 问题出现的原因&…

力扣面试150 三角形最小路径和 DFS 记忆化搜索 DP 滚动数组优化DP

Problem: 120. 三角形最小路径和 &#x1f469;‍&#x1f3eb; 甜姐题解 Code class Solution {// 朴素DP// public int minimumTotal(List<List<Integer>> triangle) {// int n triangle.size();// int[][] dp new int[n1][n1];// for(int i n-1; i > 0…

公积金基数两万,养了征信三个月之后,结果怎么样了?

近期&#xff0c;有幸与一位颇具代表性的信贷经历者&#xff0c;进行了深入的交流。她的故事&#xff0c;尤其是对那些在信贷领域迷茫徘徊的朋友来说&#xff0c;无疑是一盏警示灯&#xff0c;提醒我们如何在金融海洋中稳健航行。 黄女士的信贷迷航 黄女士&#xff0c;一位拥有…

SpringMvc 之处理器方法参数解析器(HandlerMethodArgumentResolver)

概述 HandlerMethodArgumentResolver 是 Spring MVC 框架中的一个关键组件&#xff0c;用于解析控制器&#xff08;Controller&#xff09;方法的参数。在 Spring MVC 中&#xff0c;当一个请求到达时&#xff0c;DispatcherServlet 会负责找到对应的处理器&#xff08;即控制器…

9月9日星期一今日早报简报微语报早读

9月9日星期一&#xff0c;农历八月初七&#xff0c;早报微语早读。 1、庆祝第40个教师节&#xff0c;全国585个单位、1790人受表彰&#xff1b; 2、中国残奥军团94金76银50铜收官&#xff1a;连续6届残奥会金牌和奖牌榜第一&#xff1b; 3、三部门&#xff1a;拟允许在京津沪…

1688电商运营到底怎么做竞品分析(超细节)

你得学会看同行数据&#xff0c;因为同行是蕞好的老师。你把同行分析透&#xff0c;把市场分析透以后&#xff0c;你才能真正的做好这个类目。我们就来详细的讲一下具体该怎么去分析同行&#xff0c;以及要看竞品的哪些数据。 一、分析市场 就是先看一下你的这个产品&#xf…

【go-zero】api与rpc使用k8s服务发现和部署

【go-zero】api与rpc使用k8s服务发现和部署 k8s安装 参考 debian12极简快速安装k8s 1、代码准备 参考上一篇【go-zero】api与rpc使用etcd服务发现 代码搬过来&#xff0c;因为要用到k8s环境换到linux了 &#xff0c;做一下修改 rpc 修改一下rpc的logic文件&#xff0c;增…

运放双电源供电和单电源供电的区别

运放是一种常见的电路元器件&#xff0c;广泛应用于模拟电路中。它可以使用不同的电源电压进行供电&#xff0c;其中最常见的是双电源供电和单电源供电。 下面将详细介绍它们之间的区别。 1.双电源供电 双电源供电意味着运放有两个电源引脚&#xff1a;正极和负极。正极一般连…

docker部署it工具箱,各种工具包

1.效果 2.步骤 2.1安装docker&&docker-compose 复制粘贴两脚本 bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrorsmain/DockerInstallation.sh)curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose…