0

0

用auto margins来布局flexbox吧!以及学术一点儿的对比研究:auto margins与align-self_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-24 11:20:00

|

1075人浏览过

|

来源于php中文网

原创

常见的margin: 0 auto;可以将block元素水平居中,实际上auto margins可不止这一点用处呢。在flexbox布局中,auto margins不仅能实现左、右对齐和水平居中,还能实现上、下对齐和垂直居中,甚至可以在同一个container中同时实现多种对齐方式,布局功能颇为强大。在很多情况下,auto margins比align与justify系列对齐属性(alignment properties)更加简洁和巧妙,还不容易出错!

在flexbox布局中,auto margins之所以有这么强大的功能,是因为它能够将剩余空间(free space)全部“吃掉”。没有了剩余空间,justify-content与align-self属性也无从下手,自然变得无效了。

来看几个例子吧~

Example 1: 实现flex元素的响应式水平垂直居中

    
Item 1
Item 2
Item 3
Item 4
Item 1
Item 6

MCP官网
MCP官网

Model Context Protocol(模型上下文协议)

下载

Example 1-1.png 窗口宽800px

立即学习前端免费学习笔记(深入)”;

Example 1-2.png 窗口宽350px

Example 2: 实现同一个flex container中多种对其方式并存。特别适用于导航栏或表单栏,可将某些元素左对齐,另一些元素右对齐。

      
CONTENT

Example 2-1.png

类似的,使用auto margins可以更加简单地实现如下图的常见效果。图片出自http://www.flexboxpatterns.com/home,原效果并没有使用auto margins实现。

Example 2-2.png

Example 2-3.png

Example 2-4.png


关于auto margins算法的一点想法

下面的内容有点学术啦,请做好心理准备~

Flex布局算法中对auto margins的对齐原理有如下解释,原文是英文,我尽量准确翻译:

在主轴(main axis)方向 如剩余空间为正数,则剩余空间会被平均分配在拥有主轴方向auto margin(s)的flex元素之间。 如剩余空间为负数,则将主轴方向的auto margin(s)设定为‘0’。 在侧轴(cross axis)方向 如果拥有侧轴方向auto margins(s)的元素的outer cross size(计算时将auto margins(s)作‘0’计算)小于其所在的flex line的cross size,则将剩余空间平均分配给auto margin(s)。 否则,如果侧轴方向block-start或inline-start方向的margin为auto,则将其设定为‘0’。设置相对方向的margin值,使此元素的outer cross size等于其所在的flex line的cross size。

我不太明白算法解释最后一句“设置相对方向的margin值,使此元素的outer cross size等于其所在的flex line的cross size”的意思,“请英文好的小伙伴先帮我检查一下翻译是否准确。”

补充知识:

在CSS Writing Modes中,block-start方向是根据书写模式属性(writing-mode)定义的block flow direction的开始端,在上至下书写模式下定义为顶端,在左至右书写模式下定义为左端,在右至左书写模式下定义为右端,inline-start方向由inline base direction属性定义,左至右则开始端定义为左端,右至左则开始端定义为右端。

从字面上分析,刚刚那最后一句的意思似乎是如果flex元素超高10px,相对方向的margin则会被设置为-10px,从而将outer cross size减小10px至与flex line的cross size相等,但我目前不知该如何核实这个理解。能够看到的结果是,侧轴(cross axis)方向的margin: auto与align-self: center产生了不同的效果。

Example 3: auto margins 与align-self: center的区别。

    
margin: auto
Item_1
Item_2_LongLongLongLongLongLong
Item_3
align-self: center
Item_4
Item_5_LongLongLongLongLongLong
Item 6

Example 3.png

在这个例子中,两个蓝色box的cross axis均为水平方向,上方box中元素使用margin: auto进行水平居中,下方box中元素使用align-self: center进行水平居中。margin: auto(margin-left: auto或margin-right: auto也可实现,但将会影响普通长度元素的水平居中)可将超长元素block-start方向、即左边的margin设定为‘0’,从而使元素具有完全的可读性;而align-self: centre将超长元素进行了绝对居中,在不需要可读性的情况下可能更有优势。

什么?你们还想拿它俩和verticle-align: middle做对比?饶了我吧,关于verticle-align和baseline的确定就可以讲到明天啦~下次下次喽^_^


看过这些例图,auto margins的使用方法应该不会忘了吧,最后的最后,再来提个醒儿:

  • auto margins仅针对当前的flex item,对其子元素无效。
  • 在计算flex-bases与flexible lengths (main size与cross size)时,auto margins取值为0。
  • auto margins优先于justify-content与align-self。由于相应方向上的剩余空间已分配给auto margins,justify-content与align-self将无效。
  • auto margins对溢出的(overflowing)flex item无效。

The end.

//如需转载,请联系作者//

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

43

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

35

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

204

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号