热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

css3系列之弹性盒子flex

弹性盒子(伸缩盒)注意,本篇会很长,非常长,因为弹性盒子的知识点比较多搜索弹性盒子的属性ctrlF如果觉得图太小,ctrl键

弹性盒子(伸缩盒)

注意,本篇会很长,非常长, 因为弹性盒子的知识点比较多

搜索 弹性盒子的属性  ctrl + F   如果觉得图太小, ctrl + +键

主要的属性有:  (主要分两部分讲, 一部分讲 设置在父元素上的属性,一部分讲 设置在子元素上的属性, 还有最后一些简单的应用)

  flex

  flex-grow

  flex-shrink  (真实计算公式)

  flex-basis

  flex-direction

  flex-wrap

  align-content

  align-items

  align-self

  justify-content

  order

设置弹性盒子的属性:

  display:flex    inline-flex  (这两者的区别就是, 一个是 block   一个是 inline-block)

首先要注意的是:

  你给父元素设置了 display:flex  子元素们并不会改变成内联元素。  虽然他们的效果看起来是, 但是实际上并不会改变。该是啥,还是啥

接下来来看一下,他的效果,及属性和应用:

 

  首先,display: flex  是设置在 父元素上面的,设置之后, 他里面的子元素,就会变成 弹性盒子了。(有些人,把父元素叫做盒子,把里面的子元素叫做 项目)

接下来,几个属性, 都是设置在 父元素上面的:↓  

  flex: direction

 设置主轴的方向。 默认的主轴是 横向 的,从左到右排列,另一条轴叫做 交叉轴,  也就是我们理解的纵向,

参数:

  row:默认值,主轴横向的,从左向右排列

  row-reverse:主轴还是横向的,只是里面项目的 排列方式不一样, 是从右向左的。

  column:把主轴变成 纵向的,排列方式 也就变成了,从上向下

  column-reverse:主轴变成 纵向的,排列方式颠倒, 从下向上排列。

 

  flex-wrap:
设置,子元素溢出,是否换行。

参数:

  nowrap:默认值(也就是不换行。子元素如果的宽  大于父元素的,会压缩子元素)  把所有子元素排列在一行

  wrap:子元素溢出,会换行,变成多行的形式

  wrap-reverse:颠倒 wrap 的排列方式 (也会变成多行的形式)

 

  justify-content:

设置横轴(横向)的对齐方式

参数:

  flex-start:默认值 对齐起始位置,第一个子元素的起始位置,然后其他子元素向它看齐

  flex-end:跟上面相反的,也就是说,人家对齐在开始,这个对齐在 最后面

  center:居中对齐

  space-between:如果有多余的空间,就会平均分布,每个子元素的 两边空白空间保持一致(头尾的子元素贴边)

  space-around:如果有多余的空间,就会平均分布,每个子元素的 两边空白空间保持一致(头尾的子元素不会贴边)

 

  align-items: 

设置(纵轴)纵向的对齐方式:(单行)

参数:

   flex-start:默认值 对齐起始位置

  flex-end:跟上面相反的,也就是说,人家对齐在起始位置,这个对齐在 最下面

  center:居中对齐

  baseline:   基线对齐

  stretch:   如果没有设置子元素高度,那么全部子元素的高度都会被拉伸

 

既然学了纵向 和  横向的对齐方式, 那么现在就用他来设置 一下,我们平常的 居中功能

我们平常设置居中, 是不是要设置 position: 然后就left  calc  50% - 去子元素的 宽一半,  然后再去计算 top?  很麻烦对吧。 

看看以下的方法,是不是简单了许多

 

  align-content:

align-content 跟上面的 align-items 的区别就是,一个是操作单行的,一个是操作多行的。  参数都是一样的设置, 除了多了两个 space-betwwen  ,space-around   

设置纵向的对齐方式(多行)

参数:

  flex-start:

  flex-end:

  center:  

  space-betwwen  

  space-around   

  stretch

 

接下来的几个属性,都是设置在 子元素上的

   align-self:

单独设置对齐方式。如果父元素有设置 align-items的话, 会被子元素给替代掉,也就是,align-self 和 align-items同时设置, 会采用子元素的align-self 对齐方式

但是,如果是  align-self 和 align-content 同时设置, 会采用 父元素的 align-content的 对齐方式

参数:

  auto:默认值,也就是遵从 父元素 align-items 的对齐方式。

  flex-start:对齐起始位置

  flex-end:跟上面相反的,也就是说,人家对齐在起始位置,这个对齐在 最下面

  center:居中对齐

  baseline:   基线对齐

  stretch:   如果没有设置子元素高度,那么全部子元素的高度都会被拉伸

 

  order:

设置数值,来决定他们的排列顺序

参数:

  0:默认值

  数值越小,越靠前  支持负数(-1)

 

  flex-grow:

设置数值来 自定义 扩展的比例,(不支持负值)

参数:

  默认值:0 (也就是,不用扩展)

 

  flex-shrink: (flex-shrink的真实计算公式)

设置子元素们的宽加起来大于 父元素宽时,要怎么压缩 成一行,

参数:

  1:默认值(超出的话,就按照 比例1 压缩)

学了上面的那个 grow之后, 是不是觉得,他的计算公式那么简单, 那么跟他对应的 shrink 计算公式也一样?其实不是的,他的计算公式,有点冷门,乃至于w3c 都没有公式,那么多他的计算公式怎么样呢? 看下面的例子吧~

 

 

 还有最后一点,这也是最冷门的知识点。flex-shrink 参与计算的不是盒子的宽, 而是内容区的宽, border 和  padding 都不用加进去计算的。只计算content

 

  flex-basis:(如果使用了flex-direction 改变了主轴的方向,那么他控制的,就变成了高度。不是宽度,也就是说,横向控制宽度,纵向控制高度)

如果这个属性呢, flex-basis: 100px  你这样设置,他跟 width: 100px的效果是一样的。 

其实把,flex-basis 和 width 两个一起设置,是有用意的。flex-basis 是决定了 元素宽度的 最小值, width,是决定了元素宽度可撑开的 最大值。

 

还有最后的一个值:

  flex:

他是 flex-grow  flex-shrink flex-basis 的缩写形式

  flex:1  1  20%;

代表的是,可以伸缩,该元素的最小宽度是 20%。

  

我们来利用,今天的全部内容来实现几个案例。

  第一个:居中

  

    第二个:几等分。

  第三个:其中一个固定宽度的布局

 

  第四个:浮动

有人可能会问, float 不好吗?  emmm 确实不好, 因为 父级会受浮动流的影响,而且会触发bfc 等等。

 

  第五个: 圣杯布局

 

转:https://www.cnblogs.com/yanggeng/p/11212526.html



推荐阅读
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文介绍如何使用JPA Criteria API创建带有多个可选参数的动态查询方法。当某些参数为空时,这些参数不会影响最终查询结果。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文详细介绍了 BERT 模型中 Transformer 的 Attention 机制,包括其原理、实现代码以及在自然语言处理中的应用。通过结合多个权威资源,帮助读者全面理解这一关键技术。 ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
author-avatar
我还没公主
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有