首页 > 其他 > 详细

Flex布局

时间:2017-02-27 11:55:27      阅读:156      评论:0      收藏:0      [点我收藏+]

布局的传统解决方法,主要依赖display、position、float等属性实现,但是对于一些特殊布局的实现特别不方便;

flex布局是W3C在2009年提出的,它可以简便、完整、响应式的实现各种页面布局,现在几乎所有的浏览器都支持,可以愉快的使用它了!

下面举例常见的一些布局实现:

1:基本网格布局(平均分布)

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            .Grid {
              display: -webkit-flex;
              display: flex;
            }

            .Grid-cell {
              flex: 1;
            }    
        </style>
    </head>
    <body>
        <div class="Grid">
            <div class="Grid-cell">...</div>
            <div class="Grid-cell">...</div>
            <div class="Grid-cell">...</div>
        </div>
    </body>
</html>

 

2:百分比布局

技术分享

某个网格的宽度为固定的百分比,其余网格平均分配剩余的空间

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            .Grid {
                 display: -webkit-flex;
              display: flex;
            }

            .Grid-cell {
              flex: 1;
            }

            .Grid-cell.u-1of3 {
              flex: 0 0 33.3333%;
            }

            .Grid-cell.u-1of4 {
              flex: 0 0 25%;
            }
        </style>
    </head>
    <body>
        <div class="Grid">
            <div class="Grid-cell u-1of4">...</div>
            <div class="Grid-cell">...</div>
            <div class="Grid-cell u-1of3">...</div>
        </div>
    </body>
</html>

3:圣杯布局

技术分享

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            .HolyGrail {
                display: -webkit-flex;
                display: flex;
                min-height: 100px;
                flex-direction: column;
            }

            header,
            footer {
                flex: 1;
                background: #ccc;
            }

            .HolyGrail-body {
                display: -webkit-flex;
                display: flex;
                flex: 1;
            }

            .HolyGrail-content {
                flex: 1;
                background: pink;
            }

            .HolyGrail-nav, .HolyGrail-ads {
                /* 两个边栏的宽度不放大也不缩小设为固定12em */
                flex: 0 0 12em;
            }

            .HolyGrail-nav {
                /* 导航放到最左边 */
                order: -1;
            }
            @media (max-width: 768px) {
              .HolyGrail-body {
                flex-direction: column;
                flex: 1;
              }
              .HolyGrail-nav,
              .HolyGrail-ads,
              .HolyGrail-content {
                flex: auto;
              }
            }
        </style>
    </head>
    <body class="HolyGrail">
        <header>...</header>
        <div class="HolyGrail-body">
            <main class="HolyGrail-content">...</main>
            <nav class="HolyGrail-nav">...</nav>
            <aside class="HolyGrail-ads">...</aside>
        </div>
        <footer>...</footer>
    </body>
</html>

flex-direction属性决定项目的排列方向,它有4个值:

  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

align-items属性定义项目在交叉轴上如何对齐,它有5个值:

 

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

flex属性flex-growflex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

  flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。

  flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。

  flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟widthheight属性一样的值(比如350px),则项目将占据固定空间。

 

4:输入框的布局

 技术分享

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            .InputAddOn {
              display: -webkit-flex;    
              display: flex;
            }

            .InputAddOn-field {
              flex: 1;
            }    
        </style>
    </head>
    <body>
        <div class="InputAddOn">
          <span class="InputAddOn-item">...</span>
          <input class="InputAddOn-field">
          <button class="InputAddOn-item">...</button>
        </div>
    </body>
</html>

5:悬挂式布局

技术分享

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            .Media {
              display: -webkit-flex;
              display: flex;
              align-items: flex-start;
            }

            .Media-figure {
              margin-right: 1em;
            }

            .Media-body {
              flex: 1;
            }    
        </style>
    </head>
    <body>
        <div class="Media">
          <img class="Media-figure" src="erweima.png" height="100" width="100">
          <p class="Media-body">...</p>
        </div>
    </body>
</html>

6:固定的底栏

有的时候页面内容太少,无法充满整屏,这个时候底栏就会抬高到页面的中间,可以使用flex布局让底栏总是出现在页面的底部。

 

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            .Site {
              display: -webkit-flex;
              display: flex;
              min-height: 100vh;/*1vh表示浏览器高度的1%,100vh为浏览器高度,感觉这个挺好的*/
              flex-direction: column;
            }

            .Site-content {
              flex: 1;
              background: #0099ff;
            }
        </style>
    </head>
    <body class="Site">
        <header>...</header>
        <main class="Site-content">...</main>
        <footer>...</footer>
    </body>
</html>

 

Flex布局

原文:http://www.cnblogs.com/moumou0213/p/6473045.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!