如何做网站的seo/写软文怎么接单子
前言
本文收录于CSS系列文章中,欢迎阅读指正
接着上篇布局文章继续介绍当前流行的布局方式
Flexbox布局
长久以来,CSS 布局中唯一可靠且跨浏览器兼容的创建工具只有floats和positioning。这两个工具大部分情况下都很好使,但是在某些方面它们具有一定的局限性,让人难以完成任务,于是就有了Flexbox布局
Flexbox,也称为弹性盒子布局,是一种CSS3的布局方式,它提供了一种更加有效的方式来布置、对齐和分散容器内的项,即使它们的尺寸是未知或是动态的。Flexbox布局主要目的是提供一个更加灵活的布局机制,特别是当涉及到动态或未知大小的布局时。上图可以看到Flexbox的属性分为两类,一种是设置在父元素上的container(容器)属性,另一类是设置在子元素中的item(项目)属性,其中容器属性影响所有子元素(即flex item)的布局方式;项目属性主要影响子元素本身在Flex容器(container)中的行为和排列
特点
- 灵活性:Flex容器的子元素能够根据可用空间自动伸缩。它们可以根据需要扩展以占据可用空间,或收缩以防止溢出。
- 简洁的对齐和分布:Flexbox提供了多种对齐选项,可以轻松地在水平和垂直方向上对齐项目,例如align-items,align-content,justify-content等属性。
- 方向独立性:与传统布局不同,在Flexbox中,可以很容易地更改布局的方向,通过修改flex-direction属性的值,可以在行或列方向上排布子元素。
- 源顺序独立:项目的视觉顺序可以独立于它们在源代码中的顺序。
不足
-
浏览器的兼容性问题:虽然大多数现代浏览器都支持Flexbox,但在某些较老版本的浏览器或者特定的浏览器中可能存在兼容性问题。
-
复杂性:对于初学者来说,Flexbox的概念和属性可能相对复杂,需要一定的时间学习掌握。
容器属性
容器属性指的是设置在父元素中的属性
display
这个属性决定了一个元素是否应该成为一个Flex容器。它有两个值:flex或者inline-flex。
- flex:使得元素成为块级Flex容器。
- inline-flex:使得元素成为行内Flex容器。
flex-direction
这个属性决定了主轴的方向,即:Flex项目的排列方向。
- row(默认值):主轴为水平方向,起点在左端。
- row-reverse:主轴为水平方向,起点在右端。
- column:主轴为垂直方向,起点在上沿。
- column-reverse:主轴为垂直方向,起点在下沿。
flex-wrap
当Flex项目一行放不开时,这个属性决定了项目是否换行及换行的方式。
- nowrap(默认值):不换行,所有项目都挤在一行里。
- wrap:换行,第一行在上方。
- wrap-reverse:换行,第一行在下方。
justify-content
定义了项目在主轴上的对齐方式。
- flex-start (默认值):项目位于容器的起始位置。
- flex-end:项目位于容器的结束位置。
- center:项目位于容器中心。
- space-between:项目在主轴线均匀分布,第一个项目在起始位置,最后一个项目在结束位置。
- space-around:项目平均分布在行里,周围留有空白。
- space-evenly:所有项目和容器边缘之间的距离都相等。
align-items
这个属性定义了项目在交叉轴上如何对齐。
- stretch (默认值):如果项目未设置高度或设置为auto,将占满整个容器的高度。
- flex-start:项目位于交叉轴的起点。
- flex-end:项目位于交叉轴的终点。
- center:项目位于交叉轴的中点。
- baseline:项目的第一行文字的基线对齐。
align-content
当存在多行时,这个属性用来对齐整个Flex容器中的Flex项目。此属性对单行Flex容器没有效果。
- stretch (默认值):行将占满交叉轴的剩余空间。
- flex-start:行紧靠交叉轴的起点。
- flex-end:行紧靠交叉轴的终点。
- center:行位于交叉轴的中心。
- space-between:行在交叉轴上均匀分布。
- space-around:行在交叉轴上均匀分布,两边留有空间。
- space-evenly:行在交叉轴上均匀分布,包括与容器边缘。
项目属性
项目属性也就是容器中子元素的属性
flex-grow
这个属性定义了Flex项目在必要的情况下能否放大来填充父容器的剩余空间。它接受一个无单位的数值,这个数值代表了放大的比例。默认值为0,意味着项目不会放大。如果所有项目的flex-grow属性值都为1,那么它们将会等分剩余空间。如果某个项目的flex-grow值大于1,那么这个项目将相对于其他项占有更多的剩余空间。
flex-shrink
与flex-grow相对,这个属性定义了当Flex容器的空间不足时,项目的缩小比例。同样,它接受一个无单位的数值,默认值为1。意味着如果空间不足,Flex项目将会相等比例地缩小。一个值为0将阻止项目在空间不足时缩小。
flex-basis
这个属性指定了Flex项目在分配多余空间之前应占据的主轴空间。它可以设为auto(自动大小),也可以设置为任何长度单位,例如px,em,%等。默认值auto基于项目内容或者宽度/高度属性的大小。
flex
这是flex-grow, flex-shrink和flex-basis的简写,默认值为0 1 auto。它是一种方便的方法,可以一次性设置三个属性。举个例子,flex: 1等同于flex: 1 1 0%,这表示项目将会以1的比例放大和缩小,并且flex-basis为0%,意味着它的起始大小是0,完全依赖于剩余空间的分配。
align-self
允许单独的Flex项目覆盖Flex容器上的align-items属性。这意味着你可以单独调节某个项目的垂直对齐方式。它可以取如下值:
- auto: 项目继承其父容器的align-items属性,如果父容器没有设置,则表现为stretch。
- flex-start: 项目对齐于交叉轴的起点。
- flex-end: 项目对齐于交叉轴的终点。
- center: 项目在交叉轴上居中对齐。
- baseline: 项目基于文字基线对齐。
- stretch: 项目被拉伸填充容器,如果未设置高度或设置为auto的话。
属性示例
我将上面的各类属性整合成了一个可操作的HTML页面,可以更加直观的观察弹性盒相关属性的效果
<!DOCTYPE html>
<html lang="zh"><head><meta charset="UTF-8"><title>Flexbox</title><style>ul {list-style: none;}.flex-container {background: #f7f7f7;padding: 10px;overflow-y: auto;height: 300px;}.flex-item {background: #6495ED;color: white;padding: 10px;margin: 5px;text-align: center;}.flex-item:nth-child(2n) {padding: 20px;}.button {display: flex;}.button h3 {text-align: center;background: lightgreen;margin: 5px;padding: 5px;}.button div {padding: 5px;background: #aaa;margin: 5px;text-align: center;cursor: pointer;}</style>
</head><body><div class="flex-container" id="flex-container"></div><ul class="button" id="button-container"></ul><ul class="button" id="button-item"></ul><script>// 创建标签const createElement = ({ ele, style, attr, parent }) => {const element =ele instanceof HTMLElement ? ele : document.createElement(ele ?? "div");style &&Object.keys(style)?.forEach((key) => (element.style[key] = style[key]));attr && Object.keys(attr)?.forEach((key) => (element[key] = attr[key]));parent && parent.appendChild(element);return element;};const containerConfig = [{name: "display",attr: ["flex", "block", "inline-flex"]},{name: "flex-direction",attr: ["row", "row-reverse", "column", "column-reverse"]},{name: "flex-wrap",attr: ["nowrap", "wrap", "wrap-reverse"]},{name: "flex-flow",attr: ["flex-direction", "flex-wrap"]},{name: "justify-content",attr: ["flex-start", "flex-end", "center", "space-between", "space-around", "space-evenly"]},{name: "align-items",attr: ["stretch", "flex-start", "flex-end", "center", "baseline"]},{name: "align-content",attr: ["stretch", "flex-start", "flex-end", "center", "space-between", "space-around", "space-evenly"]}]const itemConfig = [{"name": "order","attr": [0, 1, -1, 2] // 整数值,可以是任意整数,包括负数},{"name": "flex-grow","attr": [0, 1, 2, 3] // 无单位数,定义项目的放大比例},{"name": "flex-shrink","attr": [1, 2, 3, 0] // 无单位数,定义项目的缩小比例},{"name": "flex-basis","attr": ["50px", "20%", "auto", "0"] // 长度值或“auto”,定义项目在分配多余空间之前的默认大小},{"name": "flex","attr": ["0 1 auto", "1 0 50px", "3 2 25%", "none"] // 是flex-grow, flex-shrink 和 flex-basis的组合},{"name": "align-self","attr": ["auto", "flex-start", "flex-end", "center", "baseline", "stretch"] // 允许单独的项目与其他项目有不同的对齐方式}]const itemLength = 8const itemSplit = 3//分割项目属性标签,只有前面几个生效,更好看出效果const flexContainer = document.querySelector("#flex-container")const createContainer = (length) => {Array(length).fill("").forEach((_, i) => {let className = "flex-item"const it = createElement({parent: flexContainer, attr: {textContent: `第${i}项`}})if (i <= itemSplit) {className += " active"}it.setAttribute("class", className)})}createContainer(itemLength)const buttonContainer = document.querySelector("#button-container")const buttonItem = document.querySelector("#button-item")const flexItem = document.querySelectorAll(".flex-item.active")const styleBtnTemp = (target, config, parent) => {config.forEach(conf => {const { name, attr } = confconst li = createElement({ele: "li", parent})createElement({ele: "h3", parent: li, attr: {textContent: name}})attr.forEach(it => {createElement({parent: li, attr: {textContent: it}}).addEventListener("click", () => {console.log(target);target.forEach(elem => {elem.style[name] = it})})})})}styleBtnTemp([flexContainer], containerConfig, buttonContainer)styleBtnTemp(flexItem, itemConfig, buttonItem)</script></body></html>
demo效果如下,这个页面可玩性还是很高的
总结
Flexbox的设计初衷是为了应对传统布局方式(如浮动布局、定位布局)难以处理的一些场景,尤其是在动态变化的视口大小和不确定长度的内容中实现灵活的布局。
感谢你看到这里,以上就是文章全部内容了,如果觉得文章不错的话,还请三连鼓励一下,你的支持就是我创作的最大动力,谢谢!
相关代码
myCode: 基于js的一些小案例或者项目 - Gitee.com
参考
A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks
A CSS Flexbox Cheatsheet | DigitalOcean
弹性盒子 - 学习 Web 开发 | MDN
CSS 弹性盒子布局 - CSS:层叠样式表 | MDN
相关文章:

重拾CSS,前端样式精读-布局(弹性盒)
前言 本文收录于CSS系列文章中,欢迎阅读指正 接着上篇布局文章继续介绍当前流行的布局方式 Flexbox布局 长久以来,CSS 布局中唯一可靠且跨浏览器兼容的创建工具只有floats和positioning。这两个工具大部分情况下都很好使,但是在某些方面它…...

Python 使用 LSTM 进行情感分析:处理文本序列数据的指南
使用 LSTM 进行情感分析:处理文本序列数据的指南 长短期记忆网络(LSTM)是一种适合处理序列数据的深度学习模型,广泛应用于情感分析、语音识别、文本生成等领域。它通过在训练过程中“记住”过去的数据特征来理解和预测序列数据的…...

MySQL:INSERT IGNORE 语句的用法
INSERT IGNORE 语句 在MySQL中,INSERT IGNORE 语句用于尝试向表中插入一行数据,但如果插入操作会导致表中唯一索引或主键的冲突,MySQL将忽略该操作并继续执行,而不会引发错误。这意味着,如果表中已经存在具有相同唯一…...

java模拟进程调度
先来先服务优先级调度短作业优先调度响应比优先调度 代码 import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner;class Main {static class tasks{int id;//序号char jinchengname;//进程名int jinchengId;//double a…...

大模型AI在教育领域有哪些创业机会?
大模型AI在教育领域有很多创业机会,尤其是在个性化学习、教学辅助、教育资源优化等方面。以下是一些潜在的创业机会: 个性化学习平台 学习路径定制:根据学生的学习数据与兴趣,为他们设计个性化的学习路径,提供适合的课…...

网页上视频没有提供下载权限怎么办?
以腾讯会议录屏没有提供下载权限为例,该怎么办呢? 最好的办法就是找到管理员,开启下载权限。如果找不到呢,那就用这个办法下载。 1.打开Microsoft Edge浏览器的扩展 2.搜索“视频下载”,选择“视频下载Pro” 3.点击“…...

【去哪里找开源商城项目】
有很多途径可以找到开源项目,以下是一些常用的方法: 开源代码托管平台:许多开源项目都托管在平台上,例如GitHub、GitLab和Bitbucket。你可以在这些平台上浏览项目,搜索关键词,查看项目的星级和贡献者数量等…...

ei会议检索:第二届网络、通信与智能计算国际会议(NCIC 2024)
第二届网络、通信与智能计算国际会议(NCIC 2024)将于2024年11月22-25日在北京信息科技大学召开,聚焦网络、通信与智能计算,欢迎国内外学者投稿交流,录用文章将在Springer出版,并提交EI等检索。 NCIC 2024&a…...

vue添加省市区
主要参考“element”框架:Element - The worlds most popular Vue UI framework <div class"block"><span class"demonstration">默认 click 触发子菜单</span><el-cascaderv-model"value":options"optio…...

运维监控丨16条常用的Kafka看板监控配置与告警规则
本期我们针对企业运维监控的场景,介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求,灵活调整和扩展这些监控配置及告警规则。在实际应用场景中,需要综合运用多种监控工具(例如Prometheus、Grafana、Zabbix等&#…...

ECharts饼图,配置标注示例
const color ["#00FFB4", "#5498FD", "#6F54FD", "#FD5454", "#FDA354",]const datas [{ value: 100, name: "一年级" },{ value: 70, name: "二年级" },{ value: 184, name: "三年级" },{…...

【大象数据集】大象图像识别 目标检测 机器视觉(含数据集)
一、背景意义 在信息时代,数据的收集和分析技术得到了飞速发展。深度学习算法的出现,为处理和分析这些复杂的鱼类数据集提供了强大的工具。深度学习具有强大的模式识别和特征提取能力,能够从海量的数据中自动学习和发现规律,为鱼…...

LN 在 LLMs 中的不同位置 有什么区别么
Layer Normalization(LN)是一种在深度学习中用于稳定和加速神经网络训练的归一化技术。它通过对单个样本的所有激活进行归一化来工作,与Batch Normalization(BN)不同,BN是对一个mini-batch中的所有样本的激…...

【代码随想录Day57】图论Part08
拓扑排序精讲 题目链接/文章讲解:代码随想录 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取文件数量 n 和依赖关系数量 mint n scanner.nextInt();int m scanner.nextInt()…...

记录一次mmpretrain训练数据并转onnx推理
目录 1.前言 2.代码 3.数据形态【分类用】 4.配置文件 5.训练 6.测试-分析-混淆矩阵等等,测试图片效果等 7.导出onnx 8.onnx推理 9.docker环境简单补充 1.前言 好久没有做图像分类了,于是想用商汤的mmclassification快速搞一波,发现已…...

shodan5,参数使用,批量查找Mongodb未授权登录,jenkins批量挖掘
查找美国安全局漏洞 nww.nsa.gov(美国安全局官方网站) net参数使用 搜索指定的ip网段 shodan search --limit 10 --fields ip_str,port net:208.88.84.0/24 (老美国家安全局的一个网段)可能直接访问不太行,可以使用host参数,得到域名再去…...

telnet 密码模式 访问路由器
telnet 密码访问华为路由器 模拟被访问路由 sy [Huawei]int g0/0/0 //选中 g0/0/0端口 [Huawei-GigabitEthernet0/0/0]ip add 192.168.1.1 24 //设置端口ip [Huawei]user-interface vty 0 4 //配置vty [Huawei-ui-vty0-4]set authentication password cipher huawei123 //设置…...

文心一言 VS 讯飞星火 VS chatgpt (380)-- 算法导论24.4 12题
十二、给出一个有效算法来解决 A x ⩽ b Ax⩽b Ax⩽b 的差分约束系统,这里 b b b 的所有元素为实数,而变量 x i x_i xi 中某个给定的子集是整数。如果要写代码,请用go语言。 文心一言: 差分约束系统问题通常用于解决带有约…...

Unity自定义数组在Inspector窗口的显示方式
了解 单行高度:EditorGUIUtility.singleLineHeight获取 PropertyField 控件所需的高度:EditorGUI.GetPropertyHeight属性是否在Inspector窗口展开:SerializedProperty.isExpanded可重新排序列表类:ReorderableList绘制纯色矩形:EditorGUI.Dr…...

ERC论文阅读(03)--SPCL论文阅读笔记(2024-10-29)
SPCL论文阅读笔记 论文中心思想 这篇论文是研究ERC任务的论文,作者提出了监督原型对比学习的方法用于ERC任务。 论文 EMNLP2022 paper “Supervised Prototypical Contrastive Learning for Emotion Recognition in Conversation” 现存问题 现存的使用监督对…...

Straightforward Layer-wise Pruning for More Efficient Visual Adaptation
对于模型中冗余的参数,一个常见的方法是通过结构化剪枝方法减少参数容量。例如,基于幅度值和基于梯度的剪枝方法。尽管这些方法在传统训练上通用性,本文关注的PETL迁移有两个不可避免的问题: 显著增加了模型存储负担。由于不同的…...

喜讯 | 创邻科技杭州电子科技大学联合实验室揭牌成立!
近日,杭州电子科技大学图书情报专业硕士行业导师聘任仪式暨杭电-创邻图技术与数字化联合实验室(图书档案文物数字云联合研发中心)揭牌仪式在杭州电子科技大学隆重举行。杭州电子科技大学原副校长吕金海、研究生院副院长潘建江,科研…...

海外媒体发稿:如何打造媒体发稿策略
新闻媒体的发稿推广策略对于提升品牌知名度、吸引流量以及增加收入非常重要。本文将介绍一套在21天内打造爆款新闻媒体发稿推广策略的方法。 第一天至第七天:明确目标和定位 在这个阶段,你需要明确你的目标和定位,以便为你的新闻媒体建立一个…...

PyTorch模型保存与加载
1.保存与加载的概念(序列化与反序列化) 模型训练完毕之后,肯定想要把它保存下来,供以后使用,不需要再次去训练。 那么在pytorch中如何把训练好的模型,保存,保存之后又如何加载呢? 这就用需要序列化与反序列化,序列化与反序列化的概念如下图所示: 因为在内…...

CH569开发前的测试
为了玩转准备Ch569的开发工作 ,准备了如下硬件和软件: 硬件 1.官方的 Ch569 开发板,官方买到的是两块插接在一起的;除了HSPI接口那里的电阻,这两块可以说是一样的。也意味着两块板子的开发也需要烧录两次;…...

MySQL中表的外连接和内连接
内连接和外连接 表的连接分为内连接和外连接,内连接就是将需要连接的表形成笛卡尔积筛选;外连接分为左外连接和右外连接,左外连接为左侧的表需要完全显示,右外连接为右侧的表现需要完全显示。 文章目录 内连接和外连接内连接外…...

Ubuntu 上安装 Redmine 5.1 指南
文章目录 官网安装文档:命令步骤相关介绍GemRubyRailsBundler 安装 Redmine更新系统包列表和软件包:安装必要的依赖:安装 Ruby:安装 bundler下载 Redmine 源代码:安装 MySQL配置 Redmine 的数据库配置文件:…...

从变量的角度理解 Hooks , 变得更简单了
从变量角度理解Hooks 在React的世界里,Hooks的引入为函数式组件带来了前所未有的灵活性和能力。它们让我们得以完全摆脱class式的写法,在函数式组件中完成生命周期管理、状态管理、逻辑复用等几乎全部组件开发工作。这次,我们就从变量的角度…...

LabVIEW Modbus通讯稳定性提升
在LabVIEW开发Modbus通讯程序时,通讯不稳定是一个常见问题,可能导致数据丢失、延迟或错误。为了确保通讯的可靠性,可以从多个角度进行优化,以下是一些有效的解决方案,结合实际案例进行分析。 1. 优化通讯参数设置 通讯…...

(8) cuda分析工具
文章目录 Nvidia GPU性能分析工具Nsight SystemNvidia GPU性能分析工具Nsight System Nvidia GPU性能分析工具Nsight System NVIDIA Nsight Systems是一个系统级的性能分析工具,用于分析和优化整个CUDA应用程序或系统的性能。它可以提供对应用程序整体性能的全面见…...