flex布局练习,仿手机淘宝首页

看了大神的flex教程,决定写个假手淘开心一下!我肯定三下五除二就能写完的!对!没错!~~~
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
结果半夜都还没睡。。。。。
都是下面这条链接害的(微笑.jpg):
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool

好吧进入正题。在练习的过程中遇到了很多小问题,所以今天来整理一下。
我们的目标是(当然不是没有蛀牙。。。):

手机淘宝首页截屏

看着淘宝的首页,除了买买买的欲望很强烈之外,作为一个前端新手,当然还想把它写出来
打开我的webstorm,新建一个项目,为了方便起见,用Gulp来帮我。下面就一块一块来吧(样式的代码是scss格式)。

  • 既然是为了练习布局,就原模原样的切,先来写手机顶端
    这里写图片描述
<div class="phoneHead">
        <div>
            <img src="img/1.jpg">
        </div>
        <div>
            <img src="img/4.jpg">
            <img src="img/3.jpg">
            <img src="img/2.jpg">
        </div>
    </div>
.phoneHead {
      background-color: #ae3903;
      display: flex;
      div {
        display: flex;
        flex: 1;
        img {
          margin-left: 10px;
        }
      }
      div:nth-child(1) {
        flex-direction: row;  //左边的内容左对齐
      }
      div:nth-child(2) {
        flex-direction: row-reverse;  //右边的内容右对齐
      }
    }
  • 手淘顶部
    这个部分需要注意一下:搜索框两边的两根小竖线是用两个div实现的

    这里写图片描述

<header>
        <div class="scan">
            <img src="img/5.jpg">
            <p>扫一扫</p>
        </div>
        <div class="search">
            <div></div>  
            <img src="img/21.jpg">
            <input type="text" value="台灯卧室床头 创意">
            <img src="img/22.jpg">
            <div></div>
        </div>
        <div class="message">
            <img src="img/8.jpg">
            <img src="img/9.jpg">
            <p>消息</p>
        </div>
    </header>
header {
      display: flex;
      background-color: #ff5105;
      padding-bottom: 15px;
      .scan, .message {
        flex: 1;
        padding: 10px 0 0 0;
        img {
          width: 55px;
          height: 55px;  //合理调整图片大小
          display: block;  //未用div包裹时让其另占一行
          margin: auto;
        }
        p {
          font-size: 20px;
          text-align: center;
          color: #ffffff;
        }
      }
      .message{
        position: relative;
        img:nth-child(2){
          width: 35px;
          height:35px;
          position: absolute;
          top: 10px;
          right: 30px;
        }
      }
      .search {
        display: flex;
        flex: 3.3;
        padding: 30px 0 0 0;
        margin-bottom: 10px;
        border-bottom: 2px solid #ffffff;
        //因为整个搜索框的五个部分的比例不一样,所以flex属性值等于其设计宽度的px值大小,这样设置比例更方便准确
        div:nth-child(1) {
          flex: 10;
          height: 10px;
          border-left: 2px solid #ffffff;
          margin-top: 40px;
        }
        div:nth-child(5) {
          flex: 10;
          height: 10px;
          margin-top: 40px;
          border-right: 2px solid #ffffff;
        }
        img:nth-child(2) {
          flex: 35;
          height: 35px;
        }
        img:nth-child(4) {
          flex: 35;
          height: 35px;
        }
        input {
          flex: 344;
          height: 35px;
          outline: none;  //去掉默认属性
          border: none;
          color: #fff7f8;
          background-color: #ff5105;
          font-size: 32px;
          line-height: 35px;
        }
      }
    }
  • 轮播图只是一个图片,在这里就不多说了。

  • 这是经典的flex布局:

    这里写图片描述

<ul class="entrance">
            <li>
                <a href="#">
                    <img src="img/11.jpg">
                    <p>天猫</p>
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="img/12.jpg">
                    <p>聚划算</p>
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="img/13.jpg">
                    <p>天猫国际</p>
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="img/14.jpg">
                    <p>外卖</p>
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="img/15.jpg">
                    <p>天猫超市</p>
                </a>
            </li>
        </ul>
.entrance{
      padding: 0.06rem 0;
      width: 100%;
      display: flex;
      li{
        display: flex;
        justify-content:center;   //使每一组图标和文字居中显示,给父元素设置的属性
        flex: 1;
        img{
          display: block;
        }
        p{
          font-size: 0.24rem;
          color:#909090;
          text-align: center;
          line-height: 0.35rem;
        }
      }
    }
  • 消息轮播部分

    这里写图片描述

<div class="news">
        <img src="img/23.jpg">
        <div class="list">
            <p>
                <span>热评</span>
                <span>现实中的长发公主,十几年未剪头发</span>
            </p>
            <p>
                <span>热议</span>
                <span>30天不喝白开水,脸会变成什么样?</span>
            </p>
        </div>
    </div>
.news{
      padding: 0.2rem 0;
      display: flex;
      img{
        flex: 1;
        padding: 0 0.33rem;
      }
      .list{
        flex: 5;
        border-left: 1px solid #dfdfdf;  //实现间隔竖线
        p {
          display: flex; //不要这个属性的话,p标签的内容会被挤出去
          align-items: center;  //使两个span在交叉轴上居中对齐
          height:0.4rem;  //结合上一条属性,相当于两个span的line-height=0.4rem
        }
        span:nth-child(1){
          font-size: 0.2rem;
          margin: 0 0.2rem;
          text-align: center;
          border: 1px solid #d90c00;
          color: #d90c00;
        }
        span:nth-child(2){
          font-size: 0.27rem;
        }
      }
    }
  • 又是一个经典的flex布局:

    这里写图片描述

<div class="area1">
        <div class="area1-1">
            <div>
                <p>
                    <img src="img/24.jpg">
                    <span>淘抢购</span>
                </p>
                <p>进入查看更多</p>
                <div><img src="img/28.jpg"></div>
            </div>
            <div><img src="img/32.jpg"></div>
        </div>
        <div class="area1-2">
            <div>
                <p>
                    <img src="img/25.jpg">
                    <span>有好货</span>
                </p>
                <p>高颜值美物</p>
                <div><img src="img/29.jpg"></div>
            </div>
            <div><img src="img/33.jpg"></div>
        </div>
    </div>
    <div class="area1">
        <div class="area1-3">
            <div>
                <p>
                    <img src="img/26.jpg">
                    <span>淘抢购</span>
                </p>
                <p>进入查看更多</p>
                <div><img src="img/30.jpg"></div>
            </div>
            <div><img src="img/34.jpg"></div>
        </div>
        <div class="area1-4">
            <div>
                <p>
                    <img src="img/27.jpg">
                    <span>有好货</span>
                </p>
                <p>高颜值美物</p>
                <div><img src="img/31.jpg"></div>
            </div>
            <div><img src="img/35.jpg"></div>
        </div>
    </div>
.area1{
      display: flex;
      //分别给四个小块加不同的样式
      .area1-1{
        border-right: 1px solid #e4e4e4;
        border-bottom: 1px solid #e4e4e4;
        div:nth-child(1){
          P:nth-child(1) {
            span {
              color: #d90c00;
            }
          }
        }
      }
      .area1-2{
        border-bottom: 1px solid #e4e4e4;
        div:nth-child(1){
          P:nth-child(1) {
            span {
              color: #00cbff;
            }
          }
        }
      }
      .area1-3{
        div:nth-child(1){
          P:nth-child(1) {
            span {
              color: #db4761;
            }
          }
        }
      }
      .area1-4{
        border-left: 1px solid #e4e4e4;
        div:nth-child(1){
          P:nth-child(1) {
            span {
              color: #d53e61;
            }
          }
        }
      }
      //给四个块加相同的样式
      .area1-1,.area1-2,.area1-3,.area1-4{
        flex: 1;
        display: flex;
        padding: 0.15rem 0.3rem;
        div:nth-child(1){
          flex: 1;
          P:nth-child(1) {
            display: flex;
            span {
              font-size: 0.3rem;
              padding-left: 0.1rem;
            }
          }
          p:nth-child(2) {
            font-size: 0.24rem;
            line-height: 0.34rem;
            color: #757575;
          }
          div{
            padding: 0.2rem 0.3rem 0 0.3rem;
          }
        }
        div:nth-child(2){
          flex: 1;
          padding-top: 0.2rem;
        }
      }
    }
  • 额。。。又是一个经典的flex布局:
    因为内容和上一个差不多,所以我就用图片代替了,哈哈,很机(tou)智(lan)吧~~~
<div class="area2">
        <div class="title1">
            <img src="img/36.jpg">
            <span>超实惠</span>
        </div>
        <div class="area2-1">
            <img src="img/37.jpg">
            <img src="img/38.jpg">
            <img src="img/38.jpg">
            <img src="img/40.jpg">
        </div>
        <div class="area2-1">
            <img src="img/41.jpg">
            <img src="img/42.jpg">
            <img src="img/43.jpg">
            <img src="img/44.jpg">
        </div>
    </div>
.area2{
      .title1{
        display: flex;
        justify-content: center;
        padding: 0.25rem;
        span{
          line-height: 0.4rem;
          text-align: center;
          font-size: 0.3rem;
          color: #d90c00;
        }
      }
      .area2-1{
        display: flex;
        border-top: 1px solid #909090;
        img{
          display: block;
          padding: 0.15rem 0.1rem;
          border-left: 1px solid #909090;
        }
        img:nth-child(1){
          flex: 1.8;
          border: none;
        }
        img:nth-child(2),img:nth-child(3),img:nth-child(4){
          flex: 1;
        }
      }
    }
  • 终于只剩下底部了!

    这里写图片描述

<footer>
        <div>
            <a>
                <img src="img/45.jpg">
                <p>首页</p>
            </a>
        </div>
        <div>
            <a>
                <img src="img/46.jpg">
                <p>微淘</p>
            </a>
        </div>
        <div>
            <a>
                <img src="img/47.jpg">
                <p>问大家</p>
            </a>
        </div>
        <div>
            <a>
                <img src="img/48.jpg">
                <p>购物车</p>
            </a>
        </div>
        <div>
            <a>
                <img src="img/49.jpg">
                <p>我的淘宝</p>
            </a>
        </div>
    </footer>
footer{
      width: 100%;
      padding: 20px 0;
      background-color: #ffffff;
      border-top: 1px solid #909090;
      display: flex;
      justify-content: center;
      position: fixed;
      bottom: 0;
      left: 0;
      div{
        flex: 1;
        display: flex;
        justify-content: center;
        img{
          display: block;
          margin: auto;
        }
        p{
          font-size: 28px;
          color: #3a3e3d;
          line-height: 45px;
          text-align: center;
        }
      }

    }

好了,熬夜真是越熬越精神!看效果:

这里写图片描述

讲真是不是一模一样!自己写的假手淘还不错,哈哈
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。
然后还是洗洗睡吧

大家晚安

  • 10
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值