这是一种全新的布局,在移动端非常实用,IE对此布局的相关的兼容不是很好,Firefox、Chrome、Safrai等需要加浏览器前缀。
先说说这种布局的特点:
1)移动端由于屏幕宽度都不一样,在布局的时候为了适配,如果用百分比,就得精确计算,而且如果有1px边框,计算会更加复杂难控制
2)如果有多列,要让所有列的高度一样,以前的话需要用各种计算或用子元素撑高等
3)上下居中,如果是在以前,那么用line-height或top绝对定位等计算
4)表单布局的时候,经常是左边和右边在一行上,以往是设置float或position与margin-left组合布局
5)网页有时候要有个底部,放些联系方式友情链接等,这个底部应该永远在下面,即使中间没内容,也不要移上来,以往的话是给中间赋个高等
而现在,用Flexible Box的几个属性就能完成上面的高难度动作。
一、新旧语法
1)几个基础概念
1. flex container(弹性容器),主要设置display为 flex 或 -webkit-flex ,那么这个容器中的子元素就是弹性的。
2. flex item(弹性子元素),尺寸可通过普通的width或height,或者使用高级的 flex 属性,自定义分配空间设置尺寸。
3. main axis(主轴或横轴)和cross axis(侧轴或纵轴),其中属性 flex-direction 、 justify-content 、 align-items 、 align-self 控制着轴的方向或对齐方式。
4. flex-wrap 属性可以控制弹性子元素的换行。
5. 有个 order 属性,用整数值来定义排列顺序,数值小的排在前面。
2)新旧属性对比
旧语法 | 新语法 |
旧版部分属性兼容性:
新版部分属性兼容性:
3)新旧属性对应
旧属性 | 新属性 | 定义或对比 |
box-orient box-direction | flex-direction | box-orient:horizontal + box-direction:normal = flex-direction:row box-orient:horizontal + box-direction:reverse = flex-direction:row-reverse box-orient:vertical + box-direction:normal = flex-direction:column box-orient:horizontal + box-direction:reverse = flex-direction:column-reverse |
box-flex | flex | flex有3个子属性,而box-flex只能设置一个数字 |
box-align | align-items align-content | 下面会分析align-items和align-content的区别 |
box-pack | justify-content | 效果相同 |
box-ordinal-group | order | 效果相同 |
box-lines (实验属性) | flex-wrap | 效果相同(Android的UC和微信浏览器没有换行效果) |
box-flex-group | 设置或检索伸缩盒对象的子元素的所属组 | |
flex-grow | flex子属性,设置或检索弹性盒的扩展比率 | |
flex-shrink | flex子属性,设置或检索弹性盒的收缩比率 | |
flex-basis | flex子属性,设置或检索弹性盒伸缩基准值 | |
flex-flow | flex-direction与flex-wrap的复合属性,设置或检索弹性盒模型对象的子元素排列方式 | |
align-self | 定义flex子项单独在侧轴(纵轴)方向上的对齐方式 |
4)align-content与align-items的区别
先看下面的对比图片,左边是align-content,右边是align-items( 在线代码请点击这里 ,用Chrome打开)
align-content 只有在多行的时候才会出现效果,如果只有一行就不会有效果,可以修改在线的代码看效果。此属性与在主轴上对齐方式的 justify-content 属性类似(Android上的UC和微信浏览器不显示flex-wrap效果)
align-items 在多行的时候,两列不是被当成了一个整体,但在一行的时候,效果很好。 align-self 修改的是父级 align-items 的效果。
5)子元素空间计算方式
新语法flex,里面包括 flex-grow 扩展比率、 flex-shrink 收缩比率和 flex-basis 起始数值。分两种情况:
1. 容器的宽度 > 子元素宽度总和, 查看在线源码 。
容器的宽度设置为500px, flex-basis 子元素起始宽度分别50px、80px、100px。
.flex li:nth-child(1) { flex: 1 1 50px; background:red;}.flex li:nth-child(2) { flex: 2 2 80px; background:blue;}.flex li:nth-child(3) { flex: 3 3 100px; background:black;}
先算出剩余空间为270px,用 flex-grow 来计算。
最终宽度 = flex-grow / flex-grow总和 * 剩余空间 + flex-basis
子元素1 = (1 / (1+2+3)) * 270 + 50= 95
子元素2 = (2 / (1+2+3)) * 270 + 80= 170
子元素3 = (3 / (1+2+3)) * 270 + 100= 235
2. 容器的宽度
容器的宽度设置为110px, flex-basis 子元素的属性和上面相同。
先算出溢出值120px,再根据收缩比率,计算出收缩总和 1*50 + 2*80 + 3*100 = 510px。
最终宽度 ≈ flex-basis - (收缩比率 * flex-basis) / 收缩总和 * 溢出值
子元素1 = 50 - (1*50 / 510) * 120 ≈ 38.23
子元素2 = 80 - (2*80 / 510) * 120 ≈ 42.35
子元素3 = 100 - (3*100 / 510) * 120 ≈ 29.40
三、实际应用
1)简单的网格系统
bootstrap2.3.2 中有个栅格系统,通过百分比或px与float结合产生栅格效果,并且是响应式的,CSS代码要300多行。
flex布局本来就是响应式的,这样会省掉不少代码, 查看在线代码 。
2)多列等高
等高的问题在国外叫《 Holy Grail Layout 》,名称挺高大上的,内容一大堆。
关于等高的技巧,有很多种,可以查看这篇《 八种创建等高列布局 》,方法各有优缺点,无论哪种但实现起来都需要些代码。
而flex布局,设置display=flex,各个子元素再个设置空间,他们的高度能够自动调整到相同, 查看在线源码 。
3)绝对底部
在网页上面,有时候底部那栏需要一直贴在下面,例如友情链接这些信息,而如果中间内容没有,就会塌陷上去。
下图中就是在没有内容的时候上来了,虽然可以在内容区域默认设置个高度,但是底部不会正正好贴到屏幕的最下面,除非精确计算。
国外管这个叫《 Sticky Footer 》
flex布局中只要设置下 flex-direction: column 方向,再设置下容器的高度与屏幕一样或更高,这样底部的子元素就会一直贴在下面。
查看在线代码 。更多的信息可以参考《 Solved by Flexbox 》,Github地址在 这里 。还有个 flexbugs 可以参考参考。
四、注意点
1) 多列布局 中的column-*属性对弹性子元素无效,这也是一种弹性布局,但是有效的场景比较简单
例如瀑布式照片墙(下图所示),需要弹性的内容只有一个img标签
2)曾经有一个场景(下图所示),Flex布局能够等高,但是当用::after设置了个钩后,会出现::after内容的高度还是原先的,导致了错位。
具体内容可以 点击这里查看 。
3) float 和 clear 对弹性子元素无效。
4) vertical-align 对弹性子元素的对齐无效
参考资料:
使用 CSS 弹性盒
Flex 布局教程:语法篇
css3 flex流动自适应响应式布局样式类
Flexbox——快速布局神器
解决Flexbox跨浏览器兼容Bug
flexbox布局的兼容性

HTML의 역할은 태그 및 속성을 통해 웹 페이지의 구조와 내용을 정의하는 것입니다. 1. HTML은 읽기 쉽고 이해하기 쉽게하는 태그를 통해 컨텐츠를 구성합니다. 2. 접근성 및 SEO와 같은 시맨틱 태그 등을 사용하십시오. 3. HTML 코드를 최적화하면 웹 페이지로드 속도 및 사용자 경험이 향상 될 수 있습니다.

"Code"는 "Code"BroadlyIncludeLugageslikeJavaScriptandPyThonforFunctureS (htMlisAspecificTypeofCodeFocudecturecturingWebContent)

HTML, CSS 및 JavaScript는 웹 개발의 세 가지 기둥입니다. 1. HTML은 웹 페이지 구조를 정의하고 등과 같은 태그를 사용합니다. 2. CSS는 색상, 글꼴 크기 등과 같은 선택기 및 속성을 사용하여 웹 페이지 스타일을 제어합니다.

HTML은 웹 구조를 정의하고 CSS는 스타일과 레이아웃을 담당하며 JavaScript는 동적 상호 작용을 제공합니다. 세 사람은 웹 개발에서 의무를 수행하고 화려한 웹 사이트를 공동으로 구축합니다.

HTML은 간단하고 배우기 쉽고 결과를 빠르게 볼 수 있기 때문에 초보자에게 적합합니다. 1) HTML의 학습 곡선은 매끄럽고 시작하기 쉽습니다. 2) 기본 태그를 마스터하여 웹 페이지를 만들기 시작하십시오. 3) 유연성이 높고 CSS 및 JavaScript와 함께 사용할 수 있습니다. 4) 풍부한 학습 리소스와 현대 도구는 학습 과정을 지원합니다.

anexampleStartingtaginhtmlis, whithbeginsaparagraph.startingtagsareessentialinhtmlastheyinitiate rements, definetheirtypes, andarecrucialforstructurituringwebpages 및 smanstlingthedom.

메뉴에서 점선 분할 효과를 설계하는 방법은 무엇입니까? 메뉴를 설계 할 때는 일반적으로 접시 이름과 가격 사이에 왼쪽과 오른쪽을 정렬하는 것이 어렵지 않지만 점선 또는 중간의 점은 어떻습니까?

웹 코드 편집기의 HTML 요소 분석 많은 온라인 코드 편집기를 사용하면 사용자가 HTML, CSS 및 JavaScript 코드를 입력 할 수 있습니다. 최근에 누군가가 제안했습니다 ...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

드림위버 CS6
시각적 웹 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음
