草庐IT

前端知识——css之flex布局

Caleb-niu 2023-09-16 原文

1.基本概念

flex布局是一种布局模型,经常被称之为flexbox,使用flex布局之后,他会给子元素提供强大空间分配和对齐能力。
            
在没有使用flex布局之前,常用布局有:流式布局,浮动布局,定位布局等等。缺陷是子元素需要自己控制自己在父元素中的位置,还要注意父元素高度坍塌。
            
flex的优点就是避免不灵活的布局形式,创建更多种布局模式供你选择,解决了子元素的对齐和分布与 响应式等问题。缺点是只能依靠自身的布局模式,稍有变化则无法改变。 

2.flex的指定

 (1)display属性
            
给任意元素声明display:flex或者声明display:inline-flex(保持内联特性,用的很少)都会创建弹性布局。 

  • 如果你使用flex,那么你先要知道布局结构
  • 给外层元素定义flex,把外层元素当“容器”元素,来控制其内部的子项元素“项目”的排列方式

                
(2)注意事项
            

  • 依靠容器元素的属性,控制的是项目的排列方式,也就是说控制的不是自身,而是子元素            
  • 设置为flex布局以后,子元素的float,clear都失效了,换言之子元素不用浮动了,父元素也不用清除浮动了         
  • 设置了flex的元素,子元素会“块状化”。换言之,父元素使用了display:flex其子元素都会变成块级元素。 

3.主轴的排列方向 

(1)行模式和列模式
                

  • 行模式就是子元素(项目)在容器中以行(x轴)方向排列的模式 
  • 列模式就是子元素(项目)在容器中以列(y轴)方向 

 

 4.主轴排序

主轴方向可以取四个值,注意这四个值都要在容器中写的

flex-direction: row;  /* 默认行模式下从左(开始)至右(结束) */
flex-direction: row-reverse;  /* 行模式下从右(结束)至左(开始) */
flex-direction: column;  /* 列模式下从上(开始)至下(结束) */
flex-direction: column-reverse;  /* 列模式下从下(结束)至上(开始) */

 5.换行模式

flex-wrap 属性来控制flex子项(项目)单行显示换行和不换行,默认情况不换行,即使容器无法承受所有项目,他们会按照等比例压缩,强制在主轴方向显示。

/* 默认不换行 */
flex-wrap: nowrap;
/* 换行 */
flex-wrap: wrap;

 6.主轴上的对齐方向

justify-content  定义了项目在主轴方向上的对齐方式,需要注意的是,要区别行模式和列模式,当然主要可以以行模式为例。

/*主轴对齐方式*/
/*默认起点对齐*/
justify-content: flex-start;
/*结束点对齐*/
justify-content: flex-end;
/*居中对齐*/
justify-content: center;
/*两端对齐*/
justify-content: space-between;
/*周围分布相同空间*/
justify-content: space-around;
/*均匀分布*/
justify-content: space-evenly;

 

7.交叉轴对齐方式

 align-items指的是交叉轴的对齐方式,如果没有指定交叉轴对齐方式默认是 normal 项目无高度,默认撑满容器高度。

/*交叉轴对齐*/
/*起点对齐*/
align-items: flex-start;
/*终点对齐*/
align-items: flex-end;
/*居中对齐*/
align-items: center;

 

8.多轴线对齐 

align-content属性设置浏览器如何沿着弹性布局的横纵项,多轴线分布的空间方式。

/* 多轴线对齐 */
/* 多轴线,交叉轴起点 */
 align-content: flex-start; 
/*多轴线,交叉轴结束 */
 align-content: flex-end; 
/* 多轴线,居中 */
 align-content: center; 
/* 多轴线,两端对齐 */
align-content: space-between;
/* 多轴线,周围分布 */
align-content: space-around;
/*多轴线,均分*/
align-content: space-around;

9.多轴线对齐 

(1)项目的排序顺序
order项目在布局时的顺序,数值越小,,排列越靠前,默认值为0,可以是负数,数值没有单位。
(2)项目的增长规则:flex-grow规定了项目在flex容器中分配剩余空间的比例。负值无效,默认值0,数值不需要单位。

  • flex给某项目,前提容器中主轴方向是有剩余空间的
  • 项目本身是有自己的尺寸的,不放大时使用自身的长度尺寸。如:宽度设置了增长规则之后,原本尺寸失效了,使用增长规则的系数
  • 剩余空间的比重分配,是所有项目的flex-grow系数相加,之后再按比例分配
flex-gorw:1;
分配比例
.item:nth-child(2){
  /*放大规则,默认值0*/
  flex-grow: 1;  /*1/6*/
}
.item:nth-child(3){
  /*放大规则,默认值0*/
  flex-grow: 5;  /*5/6*/
}

 

(3)项目的收缩规则

 flex-shrink指定了flex项目的收缩规则,默认值1,不允许负值,没有任何单位
收缩前提,容器中无剩余空间,项目才会被压缩            

  • 设置了收缩比例后,元迟勋会在压缩时失效,而使用收缩系数                  
  • 收缩数值越大,压缩比例就越大             
  • 压缩的分配比重,缩小的尺寸是所有项目缩小系数之和,再按比例分配   
  • 强制不缩小,flex-shrink:0;
flex-shrink: 1; /*默认值1*/
flex-shrink: 2;/*缩小系数*/
flex-shrink: 0;/*坚决不缩小*/

(4)项目的初始化规则
flex-basis指定了flex项目元素在主轴方向上的初始化大小(尺寸),不允许负值,默认auto,如果指定该属性,则原本尺寸,将失效。

flex-basis:200px;

(5)项目的flex简写❤

 flex属性指的是,增长规则,缩小规则,初始化尺寸的集合写法。           

  • 默认flex:0 1 auto;                  
  • flex:1; 指增长规则系数                      
  • flex:0 0 200px; 指新项目在容器中不放大,也不缩小,初始化尺寸200px

【总结】         

  1. 用于容器的属性

  • display:flex 指定flex布局                       

  • flex-direction 主轴的排序(主轴方向),默认值row                        

  • flex-warp:nowarp 项目在容器中是否换行显示,常用之warp                        

  • justify-content 主轴的对齐方式                        

  • align-items交叉轴的对齐方式(一般用于单轴线)                        

  • align-content多轴线对齐方式

  1. 用于项目的属性

  • order:0项目的排序                       

  • flex-grow:0放大规则,默认0,不放大                      

  • flex-shrink:1 收缩规则,默认1,缩小;0,不缩小。                        

  • flex-basis:200px 指定主轴长度尺寸,不允许负值,默认值auto,优先级比主轴的尺寸高    

  • flex集合写法,放大,缩小,初始尺寸,默认0  1  auto。flex:1指放大,flex:0  0不放大不缩小    

 

 

有关前端知识——css之flex布局的更多相关文章

  1. ruby - capybara field.has_css?匹配器 - 2

    我在MiniTest::Spec和Capybara中使用以下规范:find_field('Email').must_have_css('[autofocus]')检查名为“电子邮件”的字段是否具有autofocus属性。doc说如下:has_css?(path,options={})ChecksifagivenCSSselectorisonthepageorcurrentnode.据我了解,字段“Email”是一个节点,因此调用must_have_css绝对有效!我做错了什么? 最佳答案 通过JonasNicklas得到了答案:No

  2. ruby - nanoc 和多种布局 - 2

    是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'

  3. css - 用 watir 检查标签类? - 2

    我有一个div,它根据表单是否正确提交而改变。我想知道是否可以检查类的特定元素?开始元素看起来像这样。如果输入不正确,添加错误类。 最佳答案 试试这个:browser.div(:id=>"myerrortest").class_name更多信息:http://watir.github.com/watir-webdriver/doc/Watir/HTMLElement.html#class_name-instance_method另一种选择是只查看具有您期望的类的div是否存在browser.div((:id=>"myerrortes

  4. ruby-on-rails - Assets 管道损坏 : Not compiling on the fly css and js files - 2

    我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1

  5. ruby-on-rails - Rails - 理解 application.js 和 application.css - 2

    rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:

  6. css - Rails 4.1 和 Bootstrap 3 字形图标不工作 - 2

    我正在尝试消除使用Bootstrap3的Rails4元素中的glyphicon错误。我没有使用任何Bootstrapgem将其添加到Assets管道中。我手动将bootstrap.css和bootstrap.js添加到各自的app/assets目录下,分别添加到application.css和application.js什么的我现在在网络浏览器的控制台中看到以下内容:GEThttp://localhost:3000/fonts/glyphicons-halflings-regular.woff404(NotFound)localhost/:1GEThttp://localhost:30

  7. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  8. css - rails 萨斯 : variables are not passed with @import - 2

    我有一个使用twitterbootstrap和sass的Rails元素。scss文件结构化到文件夹中,所以我有更好的概述。现在我想为包含我的颜色等的全局变量定义一个文件,并将这些值传递给其他文件,这样我就有更少的冗余代码。虽然所有代码都已正确导入和应用,变量不起作用。这是当前的设置:样式表/application.css.scss/**=require_self*=require_tree*//*stylesheets/||–base/||–_reset.scss#Reset/normalize||–_typography.scss#Typographyrules||–componen

  9. css - Jekyll 和自定义 CSS - 2

    有没有一种方法可以在jekyll站点中包含自定义css标签,同时将markdown用于入口文件?例如,当我想突出显示某个段落时? 最佳答案 Markdown和YAMLFrontMatter都内置了这个。但你可以自己制作。比如说,您有foo.css想要包含在某些帖子中。在_posts/2013-02-03-higligting-foo.markdown中:---css:footitle:"DrupalImagecachesecurityvulnarabilitywithDDOSattackexplained"tags:[drupal,

  10. css - 检测到 Sass 更改但 style.css 仅在我保存时每 5 到 7 次被覆盖 - 2

    我在一台Windows764位机器上使用Sass和Ruby(最新版本),我正在我的家庭服务器上处理一个共享文件夹。(但是,我不得不承认问题本身也出现在服务器上,因为我试图安装Ruby并直接-watch服务器上的文件)。问题如下:如果我第一次保存,检测到变化,我的style.css被直接覆盖。之后,我总是需要保存多达7次才能覆盖style.css。每次都会检测到更改,但不会编译任何内容。这是一个屏幕:>>>Sassiswatchingforchanges.PressCtrl-Ctostop.overwritestyle.css>>>Changedetectedto:E:/Websites

随机推荐