flexbox布局

传统布局:兼容性好,布局繁琐,局限性,不能在移动端很好的布局

flex弹性布局:操作方便,布局极为简单,移动端应用很广泛,PC端浏览器支持情况较差,IE11或更低版本,不支持或仅部分支持

布局原理

flex是flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为flex布局。(通过给父盒子添加属性,来控制子盒子的位置和排列方式)

注意:当我们为父盒子设为flex布局以后,子元素的float,clear和vertial-align的属性将失效。

伸缩布局=弹性布局=伸缩盒布局=弹性盒布局=flex布局

 

 主轴与侧轴

在flex中分为主轴和侧轴两个方向,默认主轴方向是x轴方向,水平向右,默认侧轴是y轴方向,水平向下。flex-direction通过下面的属性改变主轴侧轴的方向

 

 justify-content设置主轴上的子元素的排列方式

justify-content属性定义了项目在主元素上的对齐方式,因此使用此属性时一定要确定好主轴是哪个

 

 flex布局中,默认的子元素是不换行的,如果装不开,会缩小子元素的宽度,放到父元素里面。

align-items 设置侧轴上的子元素排列方式(单行)

该属性是控制子项在侧轴(默认是y轴)上的排列方式 在子项为单项的时候使用

 

 使用拉伸属性时,子盒子不要给高度

align-content  设置侧轴上的子元素的排列方式(多行)

设置子项在侧轴上的排列方式并且只能用于子项出现换行的情况(多行),在单行下是没有效果的。

 flex子项常见属性

1.flex子项占的份数

2.align-self控制子项自己在侧轴的排列方式

3.order属性定义子项的排列顺序(前后顺序)

flex属性

flex属性定义子项目分配剩余空间,用flex来表示占用多少份数

 

 

<style>
        session {
            display: flex;
            background-color: pink;
            width: 800px;
            height: 200px;
        }

        session div:nth-child(1) {
            background-color: red;
            width: 100px;
            width: 200px;
        }

        session div:nth-child(2) {
            background-color: skyblue;
            flex: 1;//将剩余空间全部给第二个div
        }

        session div:nth-child(3) {
            background-color: blue;
            width: 100px;
            height: 200px;
        }
    </style>
</head>

<body>
    <session>
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </session>
</body>

align-self控制子项自己在侧轴上的排列方式

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性,默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于strech

order属性定义项目的排列顺序

数值越小,排列越靠前,默认为0.注意:和z-index不一样。

案例时间:携程网移动端首页

技术选型

1.方案:我们采取单独制作移动页面方案

2.技术:布局采取felx布局

 

 

 

 

 最后成果(简陋版)

 

 html代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Document</title>

</head>

<body>
    <!--顶部搜索-->
    <div class="search-index">
        <div class="search">搜索/目的地/酒店/景点/航班</div>
        <a href="" class="user">我 的</a>
    </div>
    <!--焦点图模块-->
    <div class="focus">
        <img src="images/focus.jpg" alt="">
    </div>
    <!--局部导航栏-->
    <ul class="local-nav">
        <li>
            <a href="#" title="景点 玩乐">
                <!--5个li均使用精灵图-->
                <span class="local-nav-icon-icon5"></span>
                <span>景点 玩乐</span>
            </a>
        </li>
        <li>
            <a href="#" title="门票 玩乐">
                <span class="local-nav-icon-icon1"></span>
                <span>门票 玩乐</span>
            </a>
        </li>
        <li>
            <a href="#" title="美食林">
                <span class="local-nav-icon-icon2"></span>
                <span>美食林</span>
            </a>
        </li>
        <li>
            <a href="#" title="周边游">
                <span class="local-nav-icon-icon3"></span>
                <span>周边游</span>
            </a>
        </li>
        <li>
            <a href="#" title="一日游">
                <span class="local-nav-icon-icon4"></span>
                <span>一日游</span>
            </a>
        </li>
    </ul>
    <!--主导航栏-->
    <nav>
        <div class="nav-common">
            <div class="nav-items">
                <a href="">海外酒店</a>
            </div>
            <div class="nav-items">
                <a href="">海外酒店</a>
                <a href="">特价酒店</a>
            </div>
            <div class="nav-items">
                <a href="">海外酒店</a>
                <a href="">特价酒店</a>
            </div>
        </div>
        <div class="nav-common">
            <div class="nav-items">
                <a href="">海外酒店</a>
            </div>
            <div class="nav-items">
                <a href="">海外酒店</a>
                <a href="">特价酒店</a>
            </div>
            <div class="nav-items">
                <a href="">海外酒店</a>
                <a href="">特价酒店</a>
            </div>
        </div>
        <div class="nav-common">
            <div class="nav-items">
                <a href="">海外酒店</a>
            </div>
            <div class="nav-items">
                <a href="">海外酒店</a>
                <a href="">特价酒店</a>
            </div>
            <div class="nav-items">
                <a href="">海外酒店</a>
                <a href="">特价酒店</a>
            </div>
        </div>
    </nav>
    <ul class="subnav-entry">
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon1"></span>
                <span>自由行</span>
            </a>
        </li>
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon2"></span>
                <span>wifi电话卡</span>
            </a>
        </li>
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon3"></span>
                <span>保险 签证</span>
            </a>
        </li>
        <li><a href="#">
                <span class="subnav-entry-icon-icon4"></span>
                <span>换钞 购物</span>
            </a>
        </li>
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon5"></span>
                <span>当地向导</span>
            </a>
        </li>
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon6"></span>
                <span>特价机票</span>
            </a>
        </li>
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon7"></span>
                <span>礼品卡</span>
            </a>
        </li>
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon8"></span>
                <span>申卡 借钱</span>
            </a>
        </li>
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon9"></span>
                <span>旅拍</span>
            </a>
        </li>
        <li>
            <a href="#">
                <span class="subnav-entry-icon-icon10"></span>
                <span>更多</span>
            </a>
        </li>
    </ul>

css代码

body {
    Max-width: 450px;
    min-width: 320px;
    margin: 0 auto;
    font: normal 14px/1.5 Tahoma, "Lucida Grande", Verdana, "Microsoft Yahei", STXihei, hei;
    color: #000;
    background: #f2f2f2;
    overflow-x: hidden;
    -webkit-tap-highlight-color: transparent;
}


ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

a {
    text-decoration: none;
    color: #222;
}

div {
    box-sizing: border-box;
}

.search-index {
    display: flex;
    position: fixed;
    min-width: 320px;
    max-width: 450px;
    width: 100%;
    height: 44px;
    left: 50%;
    top: 0;
    /*本身大小的一半*/
    transform: translateX(-50%);
    background-color: #F6F6F6;
    border-top: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

.search::before {
    content: "";
    position: absolute;
    /*因为绝对定位不占位置,为了防止小图标将括号里的文字挤出来所以用绝对定位*/
    top: 5px;
    left: 5px;
    width: 15px;
    height: 15px;
    background: url(images/3.png) no-repeat -59px -279px;
    /*精灵图中*/
    background-size: 104px auto;
    /*margin: 5px;绝对定位margin无效*/
}

.search {
    position: relative;
    height: 26px;
    font-size: 12px;
    line-height: 24px;
    /*减去两边框*/
    color: #666;
    padding-left: 25px;
    border: 1px solid #ccc;
    flex: 1;
    margin: 7px 10px;
    border-radius: 5px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, .2);
}

.user {
    width: 44px;
    height: 44px;
    font-size: 12px;
    text-align: center;
    color: #2eaae0;
}

.user::before {
    content: "";
    display: block;
    width: 23px;
    height: 23px;
    background: url(images/3.png) no-repeat -59px -194px;
    /*精灵图*/
    background-size: 104px auto;
    margin: 5px auto -2px;
    /*上,左右,下*/
}

.focus {
    margin-top: 44px;
}

.focus img {
    width: 100%;
}

.local-nav {
    height: 64px;
    background-color: #fff;
    border-radius: 8px;
    margin: 3px 4px;
    display: flex;
}

.local-nav li {
    flex: 1;
}

.local-nav a {
    display: flex;
    flex-direction: column;
    align-items: center;
    font-size: 14px;
}

/*将带有相同的类选中 */
.local-nav li [class^="local-nav-icon"] {
    width: 40px;
    height: 32px;
    background: pink;
    margin-top: 6px;
    background: url(images/local-nav.png) no-repeat 0 0;
    background-size: 40px auto;
}

.local-nav li .local-nav-icon-icon2 {
    background-position: 0 -40px;
}

.local-nav li .local-nav-icon-icon3 {
    background-position: 0 -80px;
}

.local-nav li .local-nav-icon-icon4 {
    background-position: 0 -120px;
}

.local-nav li .local-nav-icon-icon5 {
    background-position: 0 -160px;
}

nav {
    overflow: hidden;
    /*这样可以使被子元素遮盖的圆角显现*/
    border-radius: 8px;
    margin: 0 4px 3px;
}

.nav-common {
    display: flex;
    height: 88px;
    background-color: pink;
}

.nav-common:nth-child(1) {
    background: -webkit-linear-gradient(left, #FA5A55, #FA994D);
}


.nav-common:nth-child(2) {
    margin: 3px 0;
    background: -webkit-linear-gradient(left, #4490f2, #47b3f0);
}

.nav-common:nth-child(3) {
    background: -webkit-linear-gradient(left, #2ab3a7, #65c257);
}

.nav-items {
    /*不冲突*/
    flex: 1;
    display: flex;
    flex-direction: column;
}

.nav-items a {
    flex: 1;
    text-align: center;
    line-height: 44px;
    color: #fff;
    font-size: 14px;
    text-shadow: 1px 1px rgba(0, 0, 0, .2);
}

.nav-items a:nth-child(1) {
    border-bottom: 1px solid #fff;
}

.nav-items:nth-child(1) a {
    border: 0;
    background: url(images/nav-items.png) no-repeat bottom center;
    /*靠底端对齐 居中*/
    background-size: 121px auto;
}

/*选择前俩个*/
.nav-items:nth-child(-n+2) {
    border-right: 1px solid #fff;
}

.subnav-entry {
    display: flex;
    flex-wrap: wrap;
    border-radius: 8px;
    background-color: #fff;
    margin: 0 4px;
}

.subnav-entry li {
    /*划重点!!这个百分比相对于父级而说*/
    flex: 20%;
}

.subnav-entry a {
    display: flex;
    flex-direction: column;
    align-items: center;
    font-size: 14px;
}

.subnav-entry a [class^="subnav-entry-icon"] {
    width: 28px;
    height: 28px;
    background-color: pink;
    margin-top: 4px;
    background: url(images/subnav-entry.png) no-repeat 0 0;
    background-size: 28px auto;
}

.subnav-entry a .subnav-entry-icon-icon2 {
    background-position: 0 -28px;
}

.subnav-entry a .subnav-entry-icon-icon3 {
    background-position: 0 -56px;
}

.subnav-entry a .subnav-entry-icon-icon4 {
    background-position: 0 -84px;
}

.subnav-entry a .subnav-entry-icon-icon5 {
    background-position: 0 -112px;
}

.subnav-entry a .subnav-entry-icon-icon6 {
    background-position: 0 -140px;
}

.subnav-entry a .subnav-entry-icon-icon7 {
    background-position: 0 -168px;
}

.subnav-entry a .subnav-entry-icon-icon8 {
    background-position: 0 -196px;
}

.subnav-entry a .subnav-entry-icon-icon9 {
    background-position: 0 -224px;
}

.subnav-entry a .subnav-entry-icon-icon10 {
    background-position: 0 -252px;
}

 

posted @ 2020-04-10 15:21  echobbd  阅读(225)  评论(0编辑  收藏  举报