首页 > 其他分享 >flex布局

flex布局

时间:2023-04-27 11:44:21浏览次数:30  
标签:flex 元素 space 布局 content width justify

flex布局

在CSS3中flex可以非常便捷的可以帮助我们实现对页面的布局。

  • 传统的页面布局,基于div+float来实现。
  • flex可以快速实现页面的布局(很方便)。

关于flex布局你必须要了解的有一下几点:

<div class="menu" 样式>
    <div class="item" 样式>112</div>
    <div class="item">113</div>
</div>

7.1 容器

7.1.1 flex布局

在容器元素上应用

<div class="menu">
    <div class="item">112</div>
    <div class="item">113</div>
</div>

<style>
    .menu{
        border: 1px solid red;
        width: 500px;
        display: flex;         // 表示flex布局
    }
</style>

7.1.2 元素的方向(主轴和副轴)

<div class="menu">
    <div class="item">112</div>
    <div class="item">113</div>
</div>
<style>
    .menu{
        border: 1px solid red;
        width: 500px;
        
        display: flex;         // 表示flex布局
        flex-direction: row;   // 主轴是横向,副轴是纵向。
    }
</style>

7.1.3 元素排列方式

justify-content,主轴上的元素的排列方式
align-items,副轴上的元素的排列方式。
<div class="menu">
    <div class="item">11</div>
    <div class="item">112</div>
    <div class="item">112</div>
</div>
<style>
    .menu {
        width: 500px;
        border: 1px solid red;
        display: flex;

        flex-direction: row;
        justify-content: flex-start;     /* 主轴=横向,横向从左开始 */
        justify-content: flex-end;       /* 主轴=横向,横向从右开始 */
        justify-content: space-between;   /* 主轴=横向,左右定格,中间元素等分空白 */
        justify-content: space-around;   /* 主轴=横向,所有元素等分空白 */
        justify-content: space-evenly;   /* 主轴=横向,元素间距一样 */
    }

    .item {
        border: 1px solid green;
        padding: 5px 50px;
        height: 50px;
        width: 40px;
    }
</style>
<div class="menu">
    <div class="item">11</div>
    <div class="item">112</div>
    <div class="item">112</div>
</div>
<style>
    .menu {
        width: 500px;
        height: 300px;
        border: 1px solid red;
        display: flex;

        flex-direction: row;
        justify-content: flex-start;     /* 主轴=横向,横向从左开始 */
        justify-content: flex-end;       /* 主轴=横向,横向从右开始 */
        justify-content: space-between;   /* 主轴=横向,左右定格,中间元素等分空白 */
        justify-content: space-around;   /* 主轴=横向,所有元素等分空白 */
        justify-content: space-evenly;   /* 主轴=横向,元素间距一样 */

        align-items: center;             /* 副轴=纵向,元素居中*/
        align-items: flex-start;         /* 副轴=纵向,元素顶部*/
        align-items: flex-end;           /* 副轴=纵向,元素底部*/
    }

    .item {
        border: 1px solid green;
        padding: 5px 50px;
        height: 50px;
        width: 40px;
    }
</style>

7.1.4 换行

  • flex-wrap: nowrap; 元素超过容器,不换行
  • flex-wrap: wrap; 元素超过容器,换行

示例1:不换行

<div class="menu">
    <div class="item">11</div>
    <div class="item">112</div>
    <div class="item">112</div>
    <div class="item">112</div>
    <div class="item">112</div>
</div>
<style>
    .menu {
        width: 500px;
        height: 200px;
        border: 1px solid red;
        display: flex;

        flex-direction: row;
        justify-content: space-evenly;   /* 主轴=横向,元素间距一样 */
        align-items: flex-start;         /* 副轴=纵向,元素顶部*/

        flex-wrap: nowrap;

    }

    .item {
        border: 1px solid green;
        padding: 5px 50px;
        height: 50px;
        width: 40px;
    }
</style>

示例2:换行

<div class="menu">
    <div class="item">111</div>
    <div class="item">112</div>
    <div class="item">112</div>
    <div class="item">112</div>
    <div class="item">112</div>

</div>

<style>
    body{
        margin: 0;
    }
    .menu {
        width: 500px;
        height: 200px;
        border: 1px solid red;
        display: flex;

        flex-direction: row;
        justify-content: space-evenly;   /* 主轴=横向,元素间距一样 */
        align-items: flex-start;         /* 副轴=纵向,元素顶部*/

        flex-wrap: wrap;

    }

    .item {
        border: 1px solid green;
        padding: 5px 50px;
        height: 50px;
        width: 40px;
    }
</style>

7.1.5 多行对齐方式

align-content用于控制多行元素的对齐方式,如果元素只有一行则不会起作用;默认stretch,即在元素没设置高度,或高度为auto情况下让元素填满整个容器。

flex-start | flex-end | center | space-between | space-around | space-evenly | stretch(默认);

7.2 元素

7.2.1 顺序

order,默认0,用于决定项目排列顺序,数值越小,项目排列越靠前。

<div class="father">
    <div class="son" style="order: 2">11</div>
    <div class="son" style="order: 0">22</div>
    <div class="son" style="order: 1">33</div>
</div>

<style scoped>
    .father {
        border: 1px solid red;
        width: 500px;
        height: 300px;
        display: flex;
        flex-direction: row;
        justify-content: flex-start;
    }

    .father .son {
        border: 1px solid saddlebrown;
        width: 20px;
        height: 18px;
    }
</style>

7.2.2 剩余空间

flex-grow,默认0,用于决定项目在有剩余空间的情况下是否放大,默认不放大;

<div class="father">
    <div class="son">Redmi k60</div>
    <div class="son" style="flex-grow: 1">Xiaomi 13</div>
    <div class="son" style="flex-grow: 1">Redmi Note 12</div>
	<div class="son" style="flex-grow: 1">Redmi K60</div>	    
	<div class="son" style="flex-grow: 1">Redmi k60 Pro</div>
</div>

案例:flex页面布局小米商城

<template>
    <div>
        <div class="row1">
            <div class="company"></div>
            <div class="pic"></div>
            <div class="pic"></div>
            <div class="pic"></div>
        </div>
        <div class="row2">
            <div class="title">
                <div>手机</div>
                <div>查看更多</div>
            </div>
            <div class="pic-list">
                <div class="big"></div>
                <div class="right-list">
                    <div class="group">
                        <div class="phone"></div>
                        <div class="phone"></div>
                        <div class="phone"></div>
                        <div class="phone"></div>
                    </div>
                    <div class="group">
                        <div class="phone"></div>
                        <div class="phone"></div>
                        <div class="phone"></div>
                        <div class="phone"></div>
                    </div>

                </div>
            </div>
        </div>

        <div class="course-list">
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>

        </div>
    </div>
</template>

<script>
    export default {
        name: "Mi"
    }
</script>

<style scoped>
    .row1 {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
    }

    .row1 .company {
        width: 210px;
        height: 180px;
        background-color: saddlebrown;
    }

    .row1 .pic {
        width: 266px;
        height: 180px;
        background-color: cadetblue;
    }

    .row2 .title {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
    }

    .row2 .pic-list {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
    }

    .row2 .pic-list .big {
        background-color: aquamarine;
        height: 610px;
        width: 210px;
        margin-right: 20px;
    }

    .row2 .pic-list .right-list {
        /*background-color: antiquewhite;*/
        flex-grow: 1;
    }

    .row2 .pic-list .right-list .group {


        display: flex;
        flex-direction: row;
        justify-content: space-between;
        flex-wrap: wrap;
    }

    .row2 .pic-list .right-list .phone {
        margin-bottom: 10px;
        border: 1px solid red;
        width: 200px;
        height: 300px;
    }

    .course-list {
        display: flex;
        justify-content: space-between;
        flex-wrap: wrap;
    }

    .course-list .item {
        width: 24%;
        height: 100px;
        background-color: skyblue;
        margin-top: 15px;
    }
	
	// 如果最后一个元素,是第3个,右边距=一个位置 + 所有空白位置/3(有三个空白位置)
    .course-list .item:last-child:nth-child(4n - 1) {
        margin-right: calc(24% + 4% / 3);
    }

	// 如果最后一个元素,是第2个,右边距=两个位置 + 所有空白位置/3*2(有三个空白位置)
    .course-list .item:last-child:nth-child(4n - 2) {
        margin-right: calc(48% + 8% / 3);
    }
</style>

至此,结合以上的知识点,我们就可以来开发一个项目。

标签:flex,元素,space,布局,content,width,justify
From: https://www.cnblogs.com/huxiaofeng1029/p/17358517.html

相关文章

  • HTML5布局练习
    传统布局 HTML5布局新布局的意义 HTML5布局练习1结构层从上至下从左至右从外至里·······补充:li不利于搜索引擎收录,尽量少用2表现层熟练运用绝对定位排序:CSScomb插件:CSS属性排序工具。快捷键:ctrl+shift+C美化:ctrl+shift+H       ......
  • Java对象内存布局
    一、对象在堆内存中布局Objectobject=newObject()一般而言JDK8按照默认情况下,new一个对象占多少内存空间在HotSpot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头(Header)、实例数据(InstanceData)和对齐填充(Padding)。二、对象在堆内存中的存储布局下面......
  • qt 代码设置layout中的控件的比例,以水平布局为例
    voidDisplayPathFilename::mainlayout(){m_hboxlayout->addWidget(m_filenamelabel);m_filenamelabel->setText("配置文件:");m_hboxlayout->addWidget(m_filenamelineedit);m_hboxlayout->addWidget(m_displaypathlabel);m_dis......
  • 什么是弹性(display: flex)布局 ?
    display:flex意思是弹性布局,它能够扩展和收缩flex容器内的元素,以最大限度地填充可用空间。Flex是FlexibleBox的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。.box{display:flex;}注意,设为Flex布局以后,子元素的flo......
  • Element之container容器布局
    作用:用来快速搭建页面基本结构<el-container>:最外层容器标签<el-header>:头部容器标签<el-aside>:侧面容器标签<el-main>:主要内容容器标签<el-footer>:底部容器标签注:以上标签采用的是flex弹性盒布局,本人还是比较喜欢用的(不会的可以去搜索相关教程,还是比较实用的)常见......
  • 在VS中怎么查看单类布局报告?看了就可以直接看多态和菱形的类的继承情况了!
    1,打开文件所在路径  2.复制文件路径  3.打开vs开发者命令工具 4.进入到源文件目录   5.查看命令:cd /d1reportSingleClassLayout类名 "xxx.cpp" ......
  • ligerLayout布局(左右分栏)
    场景需求:左边框框用来放树菜单,右边就是点击菜单后显示的内容js$(function(){$("#layoutMain").ligerLayout({topHeight:80,leftWidth:180,height:'100%'});}); html<divid="layoutMain"style="wi......
  • 阮一峰 Flex 布局教程:语法篇
    网页布局(layout)是CSS的一个重点应用。布局的传统解决方案,基于盒状模型,依赖 display 属性+ position属性+ float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。2009年,W3C提出了一种新的方案----Flex布局,可以简便、完整、响应式地实现各种页面布局。......
  • 答题积分小程序云开发实战-界面交互篇:注册登录页布局样式与逻辑交互开发
    微信小程序云开发实战-答题积分赛小程序界面交互篇:注册登录页布局样式与逻辑交互开发写在前面-开发调试小技巧模拟器通常默认展示的页面是首页,那么如果我们想切换到其他页面呢,那怎么办?我这里教给初学者三种方式,方便大家在搭建页面过程中,进行开发调试。点击事件跳转给页面按钮添加一......
  • flex 简介
    RIA技术:学习Flex必须要了解RIA,RIA:RichInternetApplication,富客户端英特网应用程序,关键是富字。传统的HTML页面元素非常有限,开发人员在页面刷新和相应速度都会受到很大的困扰。随着3G的普及,网络带宽将得到非常大的改善,富互联网应用的时代也越来越近了,人们......