Flex布局 学习(二) HTML+CSS 简易搜索框

上一篇《Flex布局 学习(一)》主要学了flex的基本用法及作用,现在来把flex具体运用到实例中,看看flex的弹性布局效果。

一、垂直居中布局

不知道有多少小伙伴在前端笔试面试时被问到:不定宽高如何水平垂直居中?

现在就给大家解答下这问题,最简单的实现方法就是我们的flex布局,只是在我们容器(父元素)加上一行代码即可。看下面例子

HTML部分

        <div id="box1">
            <span class="item">
            垂直居中
            </span>   
        </div>

CSS部分

#box1{
                width: 500px;
                height: 300px;
                border: 1px solid red;
                box-sizing: border-box;
                display: flex;
                justify-content: center;/*X轴水平居中*/
                align-items: center;/*y轴垂直居中*/
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: pink;
                
            }

效果如下:

 二、用flex布局制作导航栏

以前我们制作导航栏的时候是使用float、table或display:inline-block.这些方法虽然能实现但也有一些问题存在,比如浮动会影响父元素以及兄弟元素的样式,需要清除浮动。但flex不一样,它属于弹性布局。

HTML部分

<nav id="box2">
            <ul>
                <li><a>×××有限公司</a></li>
                <li><a>首页</a></li>
                <li><a>关于我们</a></li>
                <li><a>联系我们</a></li>
                <li><a>产品案例</a></li>
                <li><a>新闻动态</a></li>
            </ul>
        </nav>
        <nav id="box2">
            <ul>
                <li><a>×××有限公司</a></li>
                <li><a>首页</a></li>
                <li><a>关于我们</a></li>
                <li><a>联系我们</a></li>
                
            </ul>
        </nav>

CSS部分

#box2 ul  {
                display: flex;
                background-color: cornflowerblue;
            }
            
#box2 li{
                 flex: 1;
                 text-align: center;
                 line-height: 50px;
                 list-style: none;
                 border-right: 1px solid gainsboro;
             }
#box2 li a{
                 text-decoration: none;
             }

效果:

 三、悬挂式布局

类似左图右文那种

HTML部分

<div class="contain">
            <div class="left"><img src="img/a1.png"></div>
            <div class="right">
                <p>游戏悍将 35英寸曲面电竞显示器</p>
                <span>现价:¥999</span>
                <span style="text-decoration: line-through;">原价:¥1300</span>    
                <div class="btn">立即参与</div>
            </div>
        </div>

CSS部分

             .contain{
                 width: 300px;
                 height: 100px;
                 border: 1px solid purple;
                 display: flex;
             }
             .contain>div{
                 flex: none;
             }
             .left img{
                 width: 100px;
                 height: 100px;
                 
             }
             .right{
                 width: 200px;
                 height: 300px;
                 font-size: 12px;
                position: relative;
             }
             .right .btn{
                 width: 50px;
                 height: 30px;
                 line-height: 30px;
                 background-color: cornflowerblue;
                 border: 1px solid red;
                 color: #FFFFFF;
                 position: absolute;
                 right: 20px;
                 top: 60px;
             }

效果:

 四、多列布局

HTML部分

    <div id="box3">
        <div class="picture"><img src="img/pic4.jpg"/></div>
        <div class="info">
            <p>姓名:莹草</p>
            <p>等级:R级</p>
            <p>技能:治疗、回血、吸血</p>
            <span>来源:网易手游《阴阳师》</span>
        </div>
        <div class="btn">确认</div>
        <div class="btn">取消</div>
    </div>

CSS部分

             #box3{
                 margin: 0 auto;
                 width: 600px;
                 height: 160px;
                 border: 1px solid pink;
                 display: flex;
                 justify-content: space-around;
             }
             #box3>div{
                 flex: none;
             }
             #box3 .picture img{
                 width: 200px;
                 height: 150px;
             }
             #box3 .btn{
                 width: 50px;
                 height: 30px;
                 line-height: 30px;
                 text-align: center;
                 background-color: cornflowerblue;
                 border: 1px solid red;
                 color: #FFFFFF;
                 align-self: flex-end;
             }

效果:

 五、网格布局

5.1 基本网格布局,平均分配

<style type="text/css">
        #box4{
            display: flex;
        }
        #box4 .item{
            flex: 1;
            border: 1px solid green;
        }
    </style>
    <div id="box4">
        <div class="item item1">1/4</div>
        <div class="item item2">1/4</div>
        <div class="item item3">1/4</div>
        <div class="item item4">1/4</div>
    </div>

效果:

 5.2 百分比布局

<!--某一个固定-->
    <style type="text/css">
        #box5{
            display: flex;
        }
        #box5 .item{
            flex: 1;
            border: 1px solid green;
        }
        #box5 .item2{
            flex: 0 0 50%;
        }
    </style>
    <div id="box5">
        <div class="item item1">auto</div>
        <div class="item item2">1/2</div>
        <div class="item item3">auto</div>
        <div class="item item4">auto</div>
    </div>
    
    <!--两个固定-->
    <style type="text/css">
        #box6{
            display: flex;
        }
        #box6 .item{
            flex: 1;
            border: 1px solid green;
        }
        #box6 .item2{
            flex: 0 0 50%;
        }
        #box6 .item4{
            flex: 0 0 20%;
        }
    </style>
    <div id="box6">
        <div class="item item1">auto</div>
        <div class="item item2">1/2</div>
        <div class="item item3">auto</div>
        <div class="item item4">1/5</div>
    </div>
    
        <!--三个固定-->
    <style type="text/css">
        #box7{
            display: flex;
        }
        #box7 .item{
            flex: 1;
            border: 1px solid green;
        }
        #box7 .item1{
            flex: 0 0 10%;
        }
        #box7 .item2{
            flex: 0 0 50%;
        }
        #box7 .item4{
            flex: 0 0 20%;
        }
    </style>
    <div id="box7">
        <div class="item item1">1/10</div>
        <div class="item item2">1/2</div>
        <div class="item item3">auto</div>
        <div class="item item4">1/5</div>
    </div>

效果

 六、圣杯布局

前几次我分享了用float进行的圣杯布局,今天说下用flex来实现这经典三栏式布局

<style type="text/css">
        #box8{
            display: flex;
            flex-direction: column;
        }
        #box8 div{
            flex: 1;
        }
        .body{
            display: flex;
        }
        .footer{
            flex: 0 0 20%; !important;
            background-color: deepskyblue;
        }
        .head{
            background-color: deepskyblue;
            
            flex: 0 0 20%;!important;
        
        }
        .left{
            background-color: red;
            
            flex: 0 0 20%;!important;
        
        }
        #box8 .right{
            background-color: yellow;
            
            flex: 0 0 20%;!important
        
        }
    </style>
    <div id="box8">
        <div class="head">
            header
        </div>
        <div class="body">
            <div class="left">
                left
            </div>
            <div class="middle">
                main
            </div>
            <div class="right">
                right
            </div>
            
        </div>
        <div class="footer">
            footer
        </div>
    </div>

效果

 七、搜索框制作

关于搜索框的制作,曾经也发过用float制作的,在我那篇《HTML+CSS 简易搜索框》有分享过相关代码,这次我们用flex来制作这个搜索框

<style type="text/css">
        .search{
            margin: 0 auto;
            display: flex;
            box-sizing: border-box;
                   width: 400px;
                height: 38px;        
                border:solid 1px red;
        }
        .kc span{
            width: 46px;
            height: 40px;
            text-align: center;
            line-height: 40px;
        }
        
        input{
            flex: 1;
            outline: none;
            border: none;
            box-sizing: border-box;
            padding-left: 10px;
        }
    </style>
    <div class="search">
        <div class="kc">
            <span>课程</span>
        </div>
        <input type="text" placeholder="行家专业亲授,直击就业痛点"/>
        <button>搜索</button>
    </div>

效果

 新手小白的笔记到此为止,对于没写的流式布局、固定的footer栏还有各种详细的骰子布局,大家可以去看阮一峰老师的《Flex 布局教程:实例篇》

猜你喜欢

转载自www.cnblogs.com/smile-xin/p/11445509.html