zoukankan      html  css  js  c++  java
  • flex

     建议去看阮一峰的flex博客:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

    一、flex

    flex布局其实包括两个部分,一个是在父元素上添加属性,另一个是在子元素上添加属性。

    首先,添加在父元素上常见的属性:

    (1)【justigy-content】:item在主轴上的排列方式。space-bettween是顶着两端,space-around是在两端保留一段距离。

    (2)【align-items】:item在另一个主轴上的排列方式。

    (3)【flex-direction】:主轴的方向。

    然后,添加在子元素上常见属性:

    (1)【flex-grow】:默认为0,即使有多余空间也不放大。

    (2)【flex-shrink】:默认为1,当空间不足时缩小。

    (3)【flex-basis】:默认auto,自动获取元素应该占得大小。

    (4)【flex】:以上三种方式的缩写,最常见的样式写法应该是flex:1,表示子元素在父元素哪里获取到的长度是一样长的,即子元素平分父元素的长度。

    二、flex的应用

    1、元素的垂直水平居中

    采用弹性布局,flex,也就是flexible-box的简称,弹性布局只要在父元素上设置display:flex;align-items:center;justify-content:center即可。这也是最简单的方法了。代码如下:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>水平垂直的实现</title>
        <style>
            .wrapper{
                width:250px;
                height:250px;
                border:1px red solid;
                display:flex;
                align-items:center;
                justify-content:center;
            }
            .div1{
                width:50px;
                height:50px;
                border:1px blue solid;            
            }
        </style>
    </head>
    <body>
        <div class="wrapper">
            <div class="div1">
            </div>
        </div>
    </body>
    </html>

    效果图:

    2、两栏布局

    flex还有一个常用的功能,就是实现两栏布局,左边为固定宽度,右边自适应。代码如下:

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>前端开发面试题</title>
        <link href="StyleSheet1.css" rel="stylesheet" />
    </head>
    <body>
        <div class="wrapper wrapper-flex">
            <div class="left">左侧栏,固定宽度200px</div>
            <div class="right">右侧栏,宽度自适应,自适应的意思是加几个字就有多少的宽度</div>
        </div>
    </body>
    </html>  
    .wrapper{
        border:1px solid red;
        padding:10px 20px;
    }
    
    .left{
        width:300px;
        border:1px solid blue;
    }
    .right{
        border:1px solid blue;
        margin-left:300px;
        }
    
    .wrapper-flex{
        display:flex;
        align-items:flex-start;
    }
    .wrapper-flex .left{
        flex:0 0 auto;
    }
    .wrapper-right .right{
        flex:1 1 auto;
    }

     效果如下:

     三、样式是否有冲突问题

    float与flex可以同时在一个类上使用,不会冲突。

    float与relative可以同时在一个类上使用,不会冲突。

    四、项目使用

    上面这个image列表,就是利用flex布局实现的。这里面有几个重点:

    第一,3个图片就开始换行,这就说明每一个小item宽度占33.33%

    第二,上面的三个小item距离下面的一行有一个margin,但是最后一行距离横幅的底部margin是横幅带来的,所以最后一样的底部margin为0。

    .item:nth-child(-n + 3) {
          margin-bottom: 1.2rem;
     }
     <div class="container">
        <header>黑马程序员</header>
        <!-- 图片列表链接 -->
        <nav class="nav">
          <a class="item">
            <img src="./images/icon1.png" />
            <span>hr面试</span>
          </a>
          <a class="item">
            <img src="./images/icon2.png" />
            <span>hr面试</span>
          </a>
          <a class="item">
            <img src="./images/icon3.png" />
            <span>hr面试</span>
          </a>
          <a class="item">
            <img src="./images/icon4.png" />
            <span>hr面试</span>
          </a>
          <a class="item">
            <img src="./images/icon5.png" />
            <span>hr面试</span>
          </a>
          <a class="item">
            <img src="./images/icon6.png" />
            <span>hr面试</span>
          </a>
        </nav>
        <section class="go">
          <img src="./images/go.png"/>
        </section>
      </div>
    .container {
      header {
        text-align: center;
      }
      .nav {
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
        padding: 1.6rem 0;
        .item {
          display: flex;
          flex-direction: column;
          align-items: center;
          justify-content: center;
          width: 33.33%;
          box-sizing: border-box;
          img {
            width: 3.7rem;
            height: 3.7rem;
          }
        }
        .item:nth-child(-n + 3) {
          margin-bottom: 1.2rem;
        }
      }
      .go{
        text-align: center;
        img{
          width: 95%;
        }
      }
    }
  • 相关阅读:
    Android开发与Sequoyah的安装问题
    Discuz 数据库各表的作用
    jQuery-File-Upload $(...).fileupload is not a function $.widget is not a function
    phpstorm xdebug 无法断点调试问题
    Android Service 启动流程
    Discuz! 全局变量说明
    Discuz! X3 数据表、数据字段说明
    Spring Boot 搭建
    Android组件化开发(注意事项)
    NestedScrollView嵌套RecycleView发生的小问题
  • 原文地址:https://www.cnblogs.com/qingshanyici/p/10035491.html
Copyright © 2011-2022 走看看