响应式布局案例实战

378 阅读2分钟

前几天做了一个响应式布局的案例,这里和大家分享一下,主要是总结一些经验。

1.html代码

<body>    <!-- 头部 -->    <header id="header">        <div class="logo">                <img src="images/largelogo.jpg" alt="logo" class="large">                <img src="images/middlelogo.jpg" alt="logo" class="middle">                <img src="images/smalllogo.jpg" alt="logo" class="small">        </div>        <div class="search">            <input type="search" name="kw" placeholder="请输入搜索内容">            <button>搜索</button>        </div>        <div class="nav">            <button id="btn">                <span></span>                <span></span>                <span></span>            </button>            <ul>                <li><a href="javascript:">首页</a></li>                <li><a href="javascript:">课程</a></li>                <li><a href="javascript:">公告</a></li>                <li><a href="javascript:">登录</a></li>            </ul>        </div>    </header>    <!--横幅 -->    <div id="banner">        <img src="images/banner.jpeg" alt="banner">    </div>    <!-- 主体内容 -->    <div id="main">        <div class="row">            <div class="col">                <a href="javascript:">                    <img src="images/main1.jpeg">                </a>                <p>HTML5</p>            </div>            <div class="col">                <a href="javascript:">                    <img src="images/main2.jpg">                </a>                <p>CSS3</p>            </div>            <div class="col">                <a href="javascript:">                    <img src="images/main3.jpeg">                </a>                <p>LESS</p>            </div>            <div class="col">                <a href="javascript:">                    <img src="images/main4.jpg">                </a>                <p>BootStrap</p>            </div>        </div>        <div class="row">            <div class="col">                <a href="javascript:">                    <img src="images/main1.jpeg">                </a>                <p>HTML5</p>            </div>            <div class="col">                <a href="javascript:">                    <img src="images/main2.jpg">                </a>                <p>CSS3</p>            </div>            <div class="col">                <a href="javascript:">                    <img src="images/main3.jpeg">                </a>                <p>LESS</p>            </div>            <div class="col">                <a href="javascript:">                    <img src="images/main4.jpg">                </a>                <p>BootStrap</p>            </div>        </div>    </div>    <!-- 页尾 -->    <footer id="footer">    </footer></body>

2.css代码

<style>        /* 初始化 */        body {            font-family: Arial;            font-size: 14px;            margin: 0;            padding: 0;            border: 0;        }        ul{            list-style: none;        }        a{            text-decoration: none;        }        .clearfix:after{            content: '';            display: block;            clear: both;        }        body {            background: #efefef;        }​       /* 头部 */        #header{            height: 40px;            padding: 8px 0 15px 0;            background: #88c5e1;            border-bottom:5px solid #54abd4;            position: relative;        }        /* 头部logo */        #header .logo {            width: 25%;            text-align: center;            font-size: 0;            float: left;        }        #header .logo img{            height: 40px;            display: none;        }        #header .logo img.large{            display: inline-block;        }        @media (max-width: 1024px){            #header .logo img.large{                display: none;            }            #header .logo img.middle{                display: inline-block;            }            #header .logo img.small{                display: none;            }        }        @media (max-width: 640px){            #header .logo img.large{                display: none;            }            #header .logo img.middle{                display: none;            }            #header .logo img.small{                display: inline-block;            }        }        /* 头部搜索框 */        #header .search {            width: 50%;            float: left;        }        @media (max-width: 640px){            #header .search{                width: 60%;            }        }        #header .search input{            width: 80%;            height: 40px;            box-sizing: border-box;            padding: 0 10px;            float: left;            border: 1px solid #ccc;            border-radius: 10px 0 0 10px;        }        #header .search button{            width: 20%;            height: 40px;            box-sizing: border-box;            float:right;            border: 1px solid #ccc;            border-radius: 0 10px 10px 0;        }        /* 头部导航 */        #header .nav {            width: 25%;            float: left;        }        #header .nav button{            display: none;        }        #header .nav button span{            display: none;        }        #header .nav li{            width: 25%;            float: left;            height: 40px;            text-align: center;            font-size: 12px;        }        #header .nav li a{            display: block;            height: 40px;            color:#fff;        }        #header .nav li a:hover{            color:#888;        }        @media (max-width: 640px) {            #header .nav{                width: 15%;            }            #header .nav ul{                position: absolute;                top: 54px;                left: 0;                width: 100%;                background: #88c5e1;                height: 0;                overflow: hidden;                transition: .5s;            }            #header .nav ul.open{                height: 160px;            }            #header .nav li{                float: none;                text-align: center;                line-height: 40px;                width: 79%;                margin-top: 2px;            }            #header .nav button{                display: block;                padding: 9px 10px;                border: 1px solid #ccc;                border-radius: 4px;                margin: 2px auto;                background: transparent;            }            #header .nav button span{                display: block;                width: 22px;                height: 2px;                background: #888;                margin-bottom: 5px;            }            #header .nav button span:last-child{                margin-bottom: 0;            }        }        /* banner */        #banner img{            width: 100%;            height: 400px;        }        /* 主体内容 */        #main{            width: 1000px;            margin: 10px auto;        }        #main .col{            float: left;            width: 25%;            box-sizing: border-box;            padding: 10px;        }        #main .col a{            display: block;        }        #main .col p{            padding:10px 0;            text-align: center;            font-size: 16px;            font-weight: 700;            background: #fff;            margin-top: 0;            box-sizing: border-box;        }        #main .col img{            display: block;            width: 100%;            height: 300px;        }        @media (max-width: 1024px){            #main .col{                width: 50%;            }            #main{                width: 100%;            }        }        @media (max-width: 640px){            #main .col{                width: 100%;            }        }        /* 页尾 */        #footer{            clear: both;            height: 400px;        }          </style>   

js代码

<script>    (function(){        var btn = document.querySelector("#btn");        var navlist = document.querySelector(".nav ul")        btn.onclick=function(){            navlist.classList.toggle("open");        }    })();</script>

3.效果图

  • 屏幕大于1024px

aNjgSK.png

  • 屏幕大于640px,小于1024px logo变了,主体内容变为两列

aNvhcT.png

  • 屏幕小于640px logo变了,出现导航按钮,点击出现下拉列表,主体内容变为一列

aUScAH.png

4.总结

  • 那个导航按钮我为图方便,我用的是span,其实可以用字体图标(css精灵图),用的所有插图都是网上随便找的,尺寸不是很合适,特别是banner那张图,已经变形啦,但无伤大雅,主要是拿来练手,大家想好看,可以先在ps上处理下。

  • 头部和主体内容都是用浮动做的,其实可以用flex布局,主要是考虑到float的兼容性更好,在加上我们用的是pc优先,本来就是考虑其兼容性比移动优先要好,所以干脆让其好上加好。

  • 那个下拉菜单是用定位做的,注意transition属性不能与display一起使用,我们想隐藏某个div,也可以将其高度设为0,相当于display:none;但此时应该会使文本内容溢出,所以还要设置overflow:hidden;想要显示时不能直接height:auto;要写死一个固定高度,这样才能实现一个过渡的动画效果。按钮可以看到是透明的,主要用来一个background:transparent;其实不设置背景的时候默认就是这个。

  • 中间用了一点js,主要是控制导航按钮,单击按钮会出现下拉列表。巧妙地在ul后面加上了一个open类,所以我们只要控制有无open类,就可以控制其显示或隐藏,所以绑定按钮。js用的自调用函数,也可以Windows.onload(太老啦)。toggle方法正好满足我们的需求。

  • 主体内容我没有用margin来调每列盒子之间的距离,而是用的padding,图片外的盒子设置一个padding,不加边框,不加背景,在设置一个box-sizing:border-box;效果其实和用margin一样,主要是这样避免了最后还要将最后一个margin给去掉。

  • 这只是一个很简单的响应式布局的案例,初学者可以拿来练练手,会对响应式布局有更深的理解。