flex给我实现一个对角线布局

简介: flex在css布局中的是一个经常考察的知识点,虽然垂直居中问题已经问得快烂大街了,flex你虽然总是在用,但是总会有你不知道的盲点

01d6e67c859fe954d709d162a559cc90.jpg

flex在css布局中的是一个经常考察的知识点,虽然垂直居中问题已经问得快烂大街了,flex你虽然总是在用,但是总会有你不知道的盲点


本文是一篇关于flex布局相关的总结笔记,遇到比较刁钻的问题,就当个知识拓展吧

在阅读本文之前,主要从以下几个方向去探讨flex


  • flex布局又称为弹性布局,有何特征
  • 关于flex的一些属性值
  • flex如何实现垂直居中,如何实现一个对角排列布局


flex特征


当我们对一个元素设置flex后,其子元素所有的floatcleanvertical-align属性都会失效,并且默认水平排列,并且宽度由自身元素内容决定。


影响主轴与交叉轴的属性


  • flex-direction


主要影响水平轴排列还是交叉轴排列

.wrap-box {
  display: flex;
  // flex-direction: row; 默认从左往右
  flex-direction: row-revers; 顺序从右往左 
  flex-direction: column; 从上往下 
  flex-direction: column-reverse; 从下往上 
}

365fbe046a0091ca7eaf6bd7263c8740.png

  • flex-wrap 主要影响水平轴元素是否换行,默认不换行flex-wrap:nowrap

.wrap-box {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap // 不换行
  // flex-wrap: wrap // 换行
  // flex-wrap: wrap-reverse 换行从下往上依次排列
}
  • flex-flow


这个属性主要是flex-directionflex-wrap的结合体

.wrap-box {
  display: flex;
  flex-flow: row nowrap // 默认
}
  • justify-content


主要影响水平主轴的排列顺序

.wrap-box {
  display: flex;
  justify-content: flex-start // 左对齐排列
  // justify-content: center // 居中排列
  // justify-content: space-between // 两端对齐排列
  // justify-content: space-around // 间隔相等排列
  // justify-content: flex-end // 居右排列
}
  • align-items


主要影响交叉轴垂直方向的排列

.wrap-box {
  display: flex;
  align-items: flex-start; // 垂直方向从上往下排列
  // align-items: center 垂直方向居中排列
  // align-items: flex-end 垂直方向从下往上排列
  // align-items: stretch 会将子元素高度拉伸父元素一致(子元素未设置高度)
}

f20a64b8e9f9d1c720cc9bf25a4bbebe.png


关于item项目设置的属性


  • order


决定子项目的顺序,order越小,越是排列在最前面


假设现在有个需求,css实现简单的跑马灯

<div class="wrap-box">
    <div class="item-1">1</div>
    <div class="item-2">2</div>
    <div class="item-3">3</div>
 </div>

对应的css

@keyframes ani-1 {
        0% {
          order: 0;
        }
        50% {
          order: 1;
        }
        100% {
          order: 2;
        }
      }
      @keyframes ani-2 {
        0% {
          order: 1;
        }
        50% {
          order: 0;
        }
        100% {
          order: 1;
        }
      }
      @keyframes ani-3 {
        0% {
          order: 2;
        }
        50% {
          order: 2;
        }
        100% {
          order: 0;
        }
      }
  .wrap-box {
        width: 500px;
        height: 500px;
        overflow: hidden;
        display: flex;
        background-color: green;
        align-items: stretch;
      }
      .wrap-box .item-1,
      .wrap-box .item-2,
      .wrap-box .item-3 {
        width: 100px;
        height: 100px;
        background-color: red;
      }
      .wrap-box .item-1 {
        animation: ani-1 5s infinite;
        transition: order 1s ease;
      }
      .wrap-box .item-2 {
        animation: ani-2 5s infinite;
        transition: order 1s ease;
      }
      .wrap-box .item-3 {
        animation: ani-3 5s infinite;
        transition: order 1s ease;
      }

我们利用css3的动画帧,改变order的顺序,因此一个简易的css跑马灯就实现了,而且并没有改变dom的结构和顺序

52cd99f61a304c6a172279f8d956c6b3.jpg

  • flex-basis


设置当前的item的固定宽度

.wrap-box .item-3{
  flex-basis: 200px;
}

b862b75626b20e5e07ecaa42cb4c3078.png

  • flex-grow


该属性是决定当前item的放大比例,默认是0

1242fc2e20ab6c0439c265b6580639cc.png

比如三个div,左右固定,中间内容自动撑开

b19c054035fccab185146a6386a9e93e.png


  • flex-shrink


当前item的缩小比例,默认的是0


  • align-self


能控制单个item的排列,这个属性通常不是很常用,面试曾被这个css的属性布局问题给跪了


面试题大概是这样的,3个子div实现一个对角线布局,用flex布局,如果没想到这个align-self大概是实现不了

.wrap-box {
    width: 500px;
    height: 500px;
    overflow: hidden;
    background-color: green;
    display: flex;
    justify-content: space-between;
}
 .wrap-box .item-1,
  .wrap-box .item-2,
  .wrap-box .item-3 {
    width: 100px;
    height: 100px;
    background-color: red;
}
.wrap-box .item-2 {
  align-self: center; // 垂直居中
}
.wrap-box .item-3 {
  align-self: flex-end; // 靠右
}

设置对应的item大概就是下面这样了

5d9d071738ddb88501e8511bb5103d23.png

479cbafaa36d9696eda7f74121798ed8.png


关于flex:1的详解


通常我们设置flex:1,其实本质上是替代了以下几个参数

.item3 {
  flex-grow:1;
  flex-shrink:1;
  flex-basis: 0%;
}


元素垂直居中


以下是一个基本的页面结构

<div class="wrap">
    <div class="inner-box"></div>
</div>

.wrap {
        width: 100px;
        height: 100px;
        display: flex;
        justify-content: center;
        align-items: center;
        background-color: red;
}
.wrap .inner-box {
  width: 50px;
  height: 50px;
  background: green;
}


572a6cdde51d0128337073956c596613.png


总结


  • 了解flex基本特征,影响水平轴与交叉轴的的属性主要受flex-direction这个属性的,默认水平row排列
  • 当一个父级元素设置flex后,子级的浮动clear,vertain-align属性都会失效,默认所有子级元素水平排列
  • flex的一些特性,比如放大flex-glow、缩小flex-shrink,还有影响水平轴排列just-content,以及交叉轴排列align-items属性的设置
  • align-self 这个属性可以单独控制当前元素的位置
  • flex实现一个垂直居中
  • 本文code example[1]
相关文章
|
3月前
|
前端开发 算法 Java
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
152 1
|
3月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
Flex 布局 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
305 1
|
7月前
|
设计模式 容器
13.HarmonyOS流式卡片列表实现指南:Flex多行布局详解
在现代移动应用开发中,流式卡片列表是一种常见且实用的UI设计模式。它能够自适应屏幕宽度,在有限空间内高效展示多个内容项。本教程将详细讲解如何使用HarmonyOS的ArkUI框架中的Flex组件实现一个灵活的流式卡片列表,重点关注多行布局与对齐策略的应用。
253 2
|
7月前
|
开发者 UED 容器
07.精通HarmonyOS Flex对齐:从基础到高级布局技巧(上)
在HarmonyOS Next的ArkUI框架中,Flex容器提供了强大而灵活的对齐系统,使开发者能够精确控制子元素在容器中的排列方式。掌握这些对齐技术,是构建专业级用户界面的关键。
241 0
|
7月前
|
UED 容器
5.HarmonyOS Next开发宝典:掌握Flex布局的艺术
Flex布局(弹性布局)是HarmonyOS Next中最强大的布局方式之一,它提供了一种更加高效、灵活的方式来对容器中的子元素进行排列、对齐和分配空间。无论是简单的居中显示,还是复杂的自适应界面,Flex布局都能轻松应对。
250 0
|
10月前
|
开发者 容器
鸿蒙开发:弹性布局Flex
在实际的开发中,需要掌握主轴与交叉轴的关系、换行规则及子元素属性,同时注意性能与兼容性问题,还有一点,Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。
281 10
鸿蒙开发:弹性布局Flex
|
7月前
|
UED 容器
10.HarmonyOS Next布局进阶:嵌套Flex容器与空间分配策略
在HarmonyOS Next的ArkUI框架中,Flex布局是构建用户界面的核心技术之一。通过嵌套使用Flex容器,我们可以创建复杂而灵活的界面结构,满足各种应用场景的需求。本教程将深入探讨如何在HarmonyOS Next中使用嵌套Flex容器实现复杂布局,以及如何合理分配和控制空间。
198 0
|
前端开发 容器
flex布局
【10月更文挑战第7天】
298 87
|
前端开发 UED 容器
使用 Flex 布局实现垂直居中效果
【10月更文挑战第7天】
1430 57
|
前端开发 UED 容器
在 CSS 中使用 Flex 布局实现页面自适应时需要注意什么?
【10月更文挑战第22天】在使用 Flex 布局实现页面自适应时,需要对其基本原理和特性有深入的理解,同时结合具体的布局需求和场景,进行细致的调整和优化。通过合理的设置和注意事项的把握,才能实现理想的自适应效果,提升用户体验。还可以根据实际情况进行更深入的探索和实践,以不断提升 Flex 布局的应用能力。

热门文章

最新文章