목차
基本概念和属性
属性
flex container属性
flex-direction属性
order属性
flex-wrap属性
flex-flow属性
justify-content属性
align-items属性
align-content属性
子元素属性
flex-grow属性
flex-shrink属性
flex-basis属性
flex属性
align-self属性
实例
总结
웹 프론트엔드 HTML 튜토리얼 前端基础(二)快速布局神器Flexbox布局_html/css_WEB-ITnose

前端基础(二)快速布局神器Flexbox布局_html/css_WEB-ITnose

Jun 24, 2016 am 11:18 AM

在上一篇文章中,我们知道CSS布局传统的布局方式是基于盒模型,主要依赖 display属性 + position属性 + float属性。这种盒模型对于一些复杂的布局解决起来比较麻烦,所以一种新的布局方式应运而生。

2009年,W3C提出了一种新的方案–Flexbox布局(弹性布局),可以简便、完整、响应式地实现各种页面布局。Flex布局模型不同于块和内联模型布局,块和内联模型的布局计算依赖于块和内联的流方向。

并且React Native也是使用的Flex布局,对于客户端开发来说学习Flex大有裨益。

基本概念和属性

Flexbox布局依赖于 flex directions,简单的说: Flexbox是布局模块,而不是一个简单的属性。采用Flex布局的元素,称为 Flex容器(flex container),它的所有 子元素(flex item)自动成为容器成员。

Flexbox布局很像 Android开发中的 LinearLayout布局,但是要比 LinearLayout要强大。跟 LinearLayout类似, Flexbox也存在两个方向的布局–主轴(main axis)和副轴(cross axis),可以简单的理解为 LinearLayout的水平布局和垂直布局。主轴的开始位置(与边框的交叉点)叫做 main start,结束位置叫做 main end;交叉轴的开始位置叫做 cross start,结束位置叫做 cross end。项目默认沿主轴排列。单个项目占据的主轴空间叫做 main size,占据的交叉轴空间叫做 cross size。

属性

属性分为 flex container属性和 flex item属性。对应父容器和子元素。

flex container属性

以下几个属于 flex container属性

  • flex container 属性
  • order
  • flex-wrap
  • flex-flow
  • justify-content
  • align-content
  • align-items

flex-direction属性

flex-direction属性决定主轴的方向(即项目的排列方向)。类似 LinearLayout的 verticalor Horizontal。

flex-direction: row | row-reverse | column | column-reverse
로그인 후 복사

有四个值可以选择:

  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

order属性

默认情况下子元素的排列方式按照文档流的顺序依次排序,而 order属性可以控制排列的顺序,负值在前,正值灾后,按照从小到大的顺序依次排列。我们说之所以 flex box相对 LinearLayout强就是因为一些属性比较给力, order就是其中之一。

flex-wrap属性

默认情况下 Flex跟 LinearLayout一样,都是不带换行排列的,但是 flex-wrap属性可以支持换行排列。这个也比 LinearLayout吊啊有三个值:

flex-wrap: nowrap | wrap | wrap-reverse;
로그인 후 복사

  • nowrap :不换行
  • wrap:按正常方向换行
  • wrap-reverse:按反方向换行

flex-flow属性

flex-flow属性是 flex-direction属性和 flex-wrap属性的简写形式,默认值为 row nowrap。

flex-flow: <flex-direction> || <flex-wrap>;
로그인 후 복사

justify-content属性

justify-content属性定义了项目在主轴上的对齐方式。

justify-content: flex-start | flex-end | center | space-between | space-around;
로그인 후 복사

  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

align-items属性

align-items属性定义项目在副轴轴上如何对齐。

align-items: flex-start | flex-end | center | baseline | stretch;
로그인 후 복사

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

align-content属性

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

align-content: flex-start | flex-end | center | space-between | space-around | stretch;
로그인 후 복사

  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

子元素属性

以下几个属性设置在子元素上。

  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

flex-grow属性

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。一张图看懂。跟 LinearLayout中的 weight属性一样。

.item {  flex-grow: <number>; /* default 0 */}
로그인 후 복사

如果所有项目的 flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的 flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {  flex-shrink: <number>; /* default 1 */}
로그인 후 복사

如果所有项目的 flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的 flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

负值对该属性无效。

flex-basis属性

flex-basis属性定义了在分配多余空间之前,子元素占据的 main size主轴空间,浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为 auto,即子元素的本来大小。

.item {  flex-basis: <length> | auto; /* default auto */}
로그인 후 복사

flex属性

flex属性是 flex-grow, flex-shrink和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

.item {  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]}
로그인 후 복사

该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。

align-self属性

align-self属性允许单个子元素有与其他子元素不一样的对齐方式,可覆盖 align-items属性。默认值为 auto,表示继承父元素的 align-items属性,如果没有父元素,则等同于 stretch。

.item {  align-self: auto | flex-start | flex-end | center | baseline | stretch;}
로그인 후 복사

该属性可能取6个值,除了 auto,其他都与 align-items属性完全一致。

实例

属性基本都讲完了,下面进入实战。百度前端学院的其中一个任务:

  • 学习如何flex进行布局,学习如何根据屏幕宽度调整布局策略。
  • 屏幕宽度小于 640px 时,调整 Flexbox 的属性以实现第四个元素移动到最前面的效果,而不要改动第一个元素的边框颜色与高度实现效果图。

效果图

分析:

  1. 屏幕宽度小于640px时,调整主轴对齐方式justify-content属性为space-between,在副轴对齐方式align-items为center
  2. 屏幕宽度大于640px,要有换行,并且动态调整 order属性,调整第四个子元素的排列位置。并且调整align-items为flex-start;

效果图和 代码

总结

可以看到, Flex box布局方式相比传统的盒模型布局方式要快速很多,对于一些复杂的页面也可以很快速的开发。而且由于 React Native的支持并使用,相信会有跟多开发者使用这种布局方式进行开发。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML은 초보자를 위해 쉽게 배우나요? HTML은 초보자를 위해 쉽게 배우나요? Apr 07, 2025 am 12:11 AM

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

HTML, CSS 및 JavaScript의 역할 : 핵심 책임 HTML, CSS 및 JavaScript의 역할 : 핵심 책임 Apr 08, 2025 pm 07:05 PM

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

HTML, CSS 및 JavaScript 이해 : 초보자 안내서 HTML, CSS 및 JavaScript 이해 : 초보자 안내서 Apr 12, 2025 am 12:02 AM

WebDevelopmentReliesonHtml, CSS 및 JavaScript : 1) HtmlStructuresContent, 2) CSSSTYLESIT, 및 3) JAVASCRIPTADDSINGINTERACTIVITY, BASISOFMODERNWEBEXPERIENCES를 형성합니다.

Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Apr 04, 2025 pm 11:54 PM

GiteEpages 정적 웹 사이트 배포 실패 : 404 오류 문제 해결 및 해결시 Gitee ...

HTML의 시작 태그의 예는 무엇입니까? HTML의 시작 태그의 예는 무엇입니까? Apr 06, 2025 am 12:04 AM

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

CSS3 및 JavaScript를 사용하여 클릭 후 주변 사진을 흩어지고 확대하는 효과를 얻는 방법은 무엇입니까? CSS3 및 JavaScript를 사용하여 클릭 후 주변 사진을 흩어지고 확대하는 효과를 얻는 방법은 무엇입니까? Apr 05, 2025 am 06:15 AM

이미지를 클릭 한 후 주변 이미지를 산란 및 확대하는 효과를 얻으려면 많은 웹 디자인이 대화식 효과를 달성해야합니다. 특정 이미지를 클릭하여 주변을 만들 수 있습니다 ...

HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구 HTML, CSS 및 JavaScript : 웹 개발자를위한 필수 도구 Apr 09, 2025 am 12:12 AM

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

웹 주석에서 y 축 위치의 적응 형 레이아웃을 구현하는 방법은 무엇입니까? 웹 주석에서 y 축 위치의 적응 형 레이아웃을 구현하는 방법은 무엇입니까? Apr 04, 2025 pm 11:30 PM

웹 주석 기능에 대한 Y 축 위치 적응 알고리즘이 기사는 Word 문서와 유사한 주석 기능을 구현하는 방법, 특히 주석 간격을 다루는 방법을 모색합니다 ...

See all articles