流式布局-京东项目

155 阅读6分钟

1.采用流式布局

  • 流式布局,就是百分比布局,也称非固定像素布局。
  • 将盒子的宽度设置成百分比,根据屏幕的宽度来进行伸缩,不受固定像素的限制,内容向两侧填充。
  • 流式布局方式是移动 web 开发使用的比较常见的布局方式。
  • :制作过程中,需要定义页面的最大和最小支持宽度
    • max-width 最大宽度(max-height 最大高度)
    • min-width 最小宽度(min-height 最小高度)

2. 设置视口标签以及引入初始化样式

<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="css/normalize.css">
<link rel="stylesheet" href="css/index.css">

3. 整体html结构

4. 设置常用初始化样式

body{
margin: 0 auto; 
min-width: 320px; 
max-width: 540px; 
background: #fff; 
font-size: 14px;
font-family:-apple-system, Helvetica, sans-serif; 
line-height: 1.5; 
color: #666;
}

5. 设置特殊样式

    /*CSS3盒子模型*/
    box-sizing: border-box;
    -webkit-box-sizing: border-box;
    /*点击高亮我们需要清除清除 设置为 transparent 完成透明*/ 
   -webkit-tap-highlight-color: transparent;
    /*在移动端浏览器默认的外观在 iOS 上加上这个属性才能给按钮和输入框自定义样式* /
    -webkit-appearance: none;
    /*禁用长按页面时的弹出菜单*/
    img,a { 
    -webkit-touch-callout: none; 
    }

6. 制作提示内容,跳转app部分

  • 搭建基本布局,使用ul,li结构
    <div class="top-tips">
        <ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    
  • 给父盒子设置宽度为100%,高度写死为45px;设置行高为盒子高度,并设置背景颜色
  • 给子元素设置浮动,水平居中和垂直居中,利用伪类:nth-child(n)对这4个部分的宽度设置百分比,li中的img需要缩放.
  • logo图片默认和文字的基线对齐,设置line-height是不能垂直居中的,还需要把图片在垂直方向上居中对齐,应该要加上vertical-align: middle;
    .top-tips {
        height: 45px;
        width: 100%;
        line-height: 45px;
    }
    .top-tips ul li {
        float: left;
        height: 45px;
        line-height: 45px;
        background-color: #333333;
        text-align: center;
        color: #fff;
    }
    .top-tips ul li:nth-child(1) {
        width: 8%;
    }
    .app ul li:nth-child(1) img {
        width: 10px;
    }
    .top-tips ul li:nth-child(2) {
        width: 10%;
    }
    .top-tips ul li:nth-child(2) img {
        width: 30px;
        vertical-align: middle;
    }
    .top-tips ul li:nth-child(3) {
        width: 57%;
    }
    .top-tips ul li:nth-child(4) {
        width: 25%;
        background-color: #F63515;
    }
    

7. 搜索区域

  • 搭建基本布局,使用header标签+3个div盒子
<header class="search-box">
        <div class="search-btn"></div>
        <div class="search"></div>
        <div class="login"></div>
    </header>
  • 父级盒子使用固定定位,top为45px,必须设置宽度为100%(不设置则脱标),高度为44px,设置背景颜色
  • 子级左右使用绝对定位,中间是自适应的.中间的盒子是一个标准流的盒子,盒子不设置宽度,默认与父级一样宽,父级是一个100%宽的盒子,父级盒子伸缩时,子盒子也跟着伸缩,最后将左右用margin设置,将两侧空出来,放大镜的图标用的是精灵图
  • 二倍精灵图的做法:
    • 在firework里面,把精灵图等比例缩放为原来的一半
    • 根据大小,测量坐标
    • 注意,代码里面background-size也要写: 精灵图原来宽度的一半
    • 不要保存firework里缩放的图,否则会修改原图
.search-box {
    position: fixed;
    overflow: hidden;
    width: 100%;
    height: 44px;
    min-width: 320px;
    max-width: 640px;
}
.search-btn {
    position: absolute;
    top: 0;
    left: 0;
    width: 40px;
    height: 44px;
}
.search-btn::before {
    content: "";
    display: block;
    width: 20px;
    height: 18px;
    background: url(../images/s-btn.png) no-repeat;
    background-size: 20px 18px;
    margin: 14px 0 0 15px;
}
.login {
    position: absolute;
    right: 0;
    top: 0;
    width: 40px;
    height: 44px;
    color: #fff;
    line-height: 44px;
}
.search {
    position: relative;
    height: 30px;
    background-color: #fff;
    margin: 0 50px;
    border-radius: 15px;
    margin-top: 7px;
}

8. 主体内容部分

  • 先建一个大盒子,把下面的所有内容包起来,再来一块块划分内容
<main class="content">
        <div class="banner"></div>
        <ul class="brand">
            <li>
                <a href="#"></a>
            </li>
            <li>
                <a href="#"></a>
            </li>
            <li>
                <a href="#"></a>
            </li>
        </ul>
</main>

banner背景

  • img插入的图片要进行缩放,让图片的宽度设置为100%
  • 轮播图应该位于搜索的下面,将search部分包起来的盒子设置为固定定位,同时要设置min-width和max- width,宽度也要设置为100%

轮播图

  • 建一个大盒子,大盒子的高度不用设置,大盒子里面是3个大小相等的盒子,每个盒子各占33.33%,并且设置浮动
  • 大盒子的左上角和右上角设置 border-radius,我们将 border-radius写在了大盒子上,图片是没有变化的,要将图片也设置小圆角,在大盒子上设置 overflow: hidden;
  • 图片默认底部有空白缝隙,要在img上设置vertical-align: middle

移动端导航栏部分

  • 建一个大盒子,宽度、高度都不用设置,让内容自动撑开,一行上分为5个小块,每个各占20%,不设置高度,给它们设置浮动
    nav {
        padding-top: 5px;
    }
    nav a {
        float: left;
        width: 20%;
        text-align: center;
    }
    nav a img {
        width: 40px;
        margin: 10px 0;
    }
    nav a span {
        display: block;
    }
    

新人专享部分

  • 设置一个大盒子,里面有2个链接,链接a中放img
    <div class="new">
            <a href=""></a>
            <a href=""></a>
    </div>
    
  • 大盒子清除浮动,子级使用浮动,宽度各占50%,a img为块标签

总结回顾

  • 清除点击高亮效果

    • -webkit-tap-highlight-color:transparent;/*清除点击高亮效果*/
    • 在移动端浏览器会遇见点击出现高亮的效果,如在某个项目不需要这个默认的效果的。那么我们通常会把这个点击的颜色设置成透明。
  • 所有盒子以内容边框开始计算(盒子内减)

    • /*设置宽度以内容边框开始计算*/ -webkit-box-sizing: border-box; box-sizing: border-box;
    • 在移动端通常使用的是百分比布局,那么这样的布局如果使用border或者padding或使容器的宽度超出屏幕的宽度产生滚动条。
    • 解决方案:什么使用css3属性 box-sizing设置所有的盒子从边框开始计算宽度。
  • 清除移动端默认的样式

    • /*在移动端清除浏览器默认样式*/ -webkit-appearance: none;
    • 在移动设备的浏览器当中表单一般会有默认的属性 ,通过border:none;outline:none;是无法完全清楚的,还是会有一些浏览器默认的属性,比如:内阴影,立体感…我们可以将属性 -webkit-appearance 这个属性指的是设置成 none;
  • 最小宽度和最大宽度的限制 max-width: 640px; /在行业当中的移动端的设计图一般使用的是640px/ min-width: 320px; /在移动设备当中现在最小的尺寸320px/

  • Img的下间隙问题

    <div>
    <a href="#"></a>
    <a href="#"></a>
    </div>
    
    • Img是行内块级元素 它也会有默认的基线对齐。那么和文字一样也会距离底部有一定的间隙。又因为 a标签是inline-block的,框模型是:行内框。行内框没有包含图片的表现,所以要使img能像放进一个盒子一样,就应该使用块级框:比如:display:block;或者display:inline-block
  • 结构性伪类选择器

    • E:first-of-type匹配同类型中的第一个元素E。
    • E:last-of-type匹配同类型中的最后一个元素E。
    • E:nth-of-type(n) 匹配同类型中的第n个元素E。