当前位置:   article > 正文

flex布局-携程网项目_flex 不换行

flex 不换行

体验flex布局

传统布局与flex弹性布局

传统布局flex弹性布局
兼容性好操作方便,移动端应用很广泛
布局繁琐pc端情况差
局限性IE 11或更低版本很难支持

flex布局原理

  • 定义: flexible box弹性布局,任何一个容器都可以指定为flex布局
  • 注意点:
    • 当我们为父元素设置flex,子元素的float,clear,vertical-align属性将失效
    • 子容器可以横向排列也可以纵向排列
  • 总结: 通过给父盒子添加flex,来控制子盒子的位置和排列方式

flex布局常用属性

flex布局父项常用属性

  • 设置主轴的方向-flex-direction

    • 注意: 主轴和侧轴是会变化, flex-direction 设置谁为主轴,剩下的就是侧轴,子元素是跟着主轴来排列的。

      属性值解释说明
      row默认值 - 从左到右
      row-reverse从右到左
      column从上到下
      column-reverse从下到上
  • 主轴子元素排列方式-justify-content

    • 定义项目(子元素)在主轴上的对齐方式,在使用之前一定要先确认主轴方向

      属性值解释说明
      flex-start默认值 - 从头部开始,如果主轴是x轴,则从左到右
      center在主轴居中对齐(如果主轴是x轴则水平居中)
      space-around平分剩余空间
      space-between先两边贴边再平分剩余空间(重要)
      flex-end在主轴结束位置对齐
  • 设置子元素是否换行-flex-wrap

    • flex布局中是默认不换行的(如果超过父盒子子元素会被压缩),项目都排在一条线(又称“轴线”) 上可使用flex-wrap进行调整

      属性值说明
      no-wrap默认值,不需要设置,默认不换行
      wrap换行
  • 侧轴上子元素排列方式(单行)-align-items

    • 该元素是控制子项在侧轴(默认Y轴)上的排列方式,在子元素为单项(单行)的时候使用

      属性值解释说明
      flex-start默认值 - 从上到下(顶对齐)
      dlex-end从下到上(底对齐)
      center挤在一起居中(垂直居中)
      stretch拉伸(不设置子元素高度)
  • 侧轴上子元素排列方式(多行)-align-content

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

      属性值解释说明
      flex-start在侧轴的头部开始排列
      flex-end在侧轴的尾部开始排列
      center在侧轴中间显示
      space-around子项在侧轴平分剩余空间
      space-between子项在侧轴先分布在两头,再平分剩余空间
      stretch设置子项元素高度平分父元素高度
  • 复合属性-flex-flow

    • flex-direction和flex-wrap属性的复合属性

flex布局子项常见属性

  • 子项常见属性
    • flex子项目占的份数
    • align-self 控制子项自己在侧轴排列方式
    • order 属性定义子项的排列顺序(前后顺序)
  • flex属性
    • 定义子子项目分配父盒子剩余空间,flex表示占多少份数,属性值为数字,默认值为0
    • 注:分配剩余空间会使用剩余空间/份数之和,然后根据每个子元素的flex值分给多少份
  • 控制子元素自己在侧轴上的排列方式-align-self
    • 允许单个项目与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,这等同于strech(拉伸)。
  • 项目排列顺序-order
    • 调整子项加载的顺序,默认值是0,如果想往前提,属性值可以为负数,数值越小排列越靠前。
    • 注:和z-index不一样

携程网移动端首页制作

初始设置:

  1. 选取flex布局
  2. 搭建基本文件
  3. 设置视口标签、引入初始化样式、特殊样式
  4. 分析布局,给模块命名

搜索栏部分

  1. 通过fixed定位固定搜索栏,保证导航栏位置始终在页面上方
  1. <div class="search-index">
  2. <div class="search">
  3. <span>搜索:目的地/酒店/景点/航班号</span>
  4. </div>
  5. <div class="login">
  6. <span class="user-icon"> </span>
  7. <span>我 的</span>
  8. </div>
  9. </div>
  10. 复制代码
  1. 通过精灵图在css里设置搜索框需要的图标
  1. .search-index {
  2. display: flex;
  3. width: 100%;
  4. height: 44px;
  5. padding-left: 12px;
  6. box-sizing: border-box;
  7. align-items: center;
  8. }
  9. .search-index .search {
  10. display: flex;
  11. align-items: center;
  12. flex: 1;
  13. height: 28px;
  14. padding: 2px 5px;
  15. border-radius: 16px;
  16. box-sizing: border-box;
  17. background-color: #fff;
  18. }
  19. .search-index .search span {
  20. padding-left: 35px;
  21. line-height: 18px;
  22. font-size: 15px;
  23. color: #666;
  24. }
  25. .search-index .search span::after{
  26. content: "";
  27. display: block;
  28. width: 14px;
  29. height: 14px;
  30. position: absolute;
  31. background: url() no-repeat 0px 0px;
  32. background-size: 21px auto;
  33. left: 10px;
  34. top: 2px;
  35. }
  36. .search-index.login {
  37. display: flex;
  38. flex-direction: column;
  39. align-items: center;
  40. width: 51px;
  41. height: 44px;
  42. padding-right: 4px;
  43. background-color: ■skyblue;
  44. }
  45. .search-index.login::after{
  46. content: "";
  47. display: block;
  48. width: 22px;
  49. height: 22px;
  50. background: url() no-repeat 0px -36px ;
  51. background-size: 21px auto;
  52. order: -1;
  53. }
  54. .search-index.login span{
  55. font-size: 12px;
  56. color: #fff;
  57. line-height: 12px;
  58. }
  59. 复制代码

游玩导航栏部分

  1. 用精灵图实现,先使用display:flex开启flex布局然后设置好一个的li让图片和文字上下排列,接下来就通过background-position修改一下其他图片的位置就可以了。
  1. <ul class="local-nav">
  2. <li>
  3. <a><span class="icon-local"></span> <span>攻略·景点</span></a>
  4. </li>
  5. <li>
  6. <a><span class="icon-local icon-local-around"></span>
  7. <span>门票·玩乐</span></a>
  8. </li>
  9. <li>
  10. <a><span class="icon-local icon-local-food"></span>
  11. <span>美食林</span></a>
  12. </li>
  13. <li>
  14. <a><span class="icon-local icon-local-oneday"></span>
  15. <span>周边游</span></a>
  16. </li>
  17. <li>
  18. <a><span class="icon-local icon-local-strategy"></span>
  19. <span>一日游</span></a>
  20. </li>
  21. </ul>
  22. 复制代码

css代码

  1. /* two */
  2. .grid-nav .grid-nav-common .grid-nav-items .grid-nav-jhj-text,
  3. .local-nav,
  4. .local-nav li a {
  5. position: relative;
  6. }
  7. .local-nav {
  8. background: #fff;
  9. border-radius: 8px;
  10. margin: -52px 12px 10px;
  11. display: flex;
  12. justify-content: center;
  13. padding: 4px 0 8px;
  14. z-index: 11;
  15. box-shadow: 0 2px 6px rgba(0, 0, 0, .08);
  16. }
  17. .local-nav li {
  18. flex: 1;
  19. }
  20. li {
  21. list-style-type: none;
  22. }
  23. .local-nav li a {
  24. display: flex;
  25. flex-direction: column;
  26. align-items: center;
  27. font-size: .75rem;
  28. line-height: 1;
  29. color: #222;
  30. }
  31. .local-nav li .icon-local {
  32. width: 40px;
  33. height: 40px;
  34. border-radius: 100%;
  35. background-image: url('../images/home-fivemain-sprite2x@v7.15.png');
  36. background-repeat: no-repeat;
  37. background-size: 40px auto;
  38. display: block;
  39. }
  40. .local-nav li .icon-local-around {
  41. background-position: 0 -40px;
  42. }
  43. .local-nav li .icon-local-food {
  44. background-position: 0 -80px;
  45. }
  46. .local-nav li .icon-local-oneday {
  47. background-position: 0 -120px;
  48. }
  49. .local-nav li .icon-local-strategy {
  50. background-position: 0 -160px;
  51. }
  52. 复制代码

主要功能导航栏

  1. 分成上中下三个flex布局,每一个内容只不过是颜色和文字有一些变化
    • 主导航栏 => 大盒子里包含三行,每一行再分三列,后面两列细分上下两行。
    • 大盒子用nav,小盒子用div。
    • 宽度不用给,左右下(上:上一个盒子设置过了)设置margin,高度小盒子撑开即可,设置小圆角。
  1. <nav>
  2. <div class="nav-common">
  3. <div class="nav-items">
  4. <a href="#">海外酒店</a>
  5. </div>
  6. <div class="nav-items">
  7. <a href="#">海外酒店</a>
  8. <a href="#">特价酒店</a>
  9. </div>
  10. <div class="nav-items">
  11. <a href="#">海外酒店</a>
  12. <a href="#">特价酒店</a>
  13. </div>
  14. </div>
  15. <div class="nav-common">2</div>
  16. <div class="nav-common">3</div>
  17. </nav>
  18. 复制代码
  1. 每行的盒子还需设置距离 ,给中间的盒子设置上下边距,或者前两个盒子都设置下边距。
  2. 发现小圆角没有出现,那是因为div没有设置,它把父容器盖住了,给其设置overflow: hidden;,切去多余的小圆角即可。
  3. 第一列下方需要填充背景图标,是三倍图,进行缩放。
    • 图片需要靠底端对齐,水平居中。
  4. 背景颜色渐变,css3新增属性。
    • 从一种颜色逐渐变为另一种颜色。
    • 背景渐变必须添加浏览器私有前缀
    • 起始方向可以是: 方位名词 或者 度数 , 如果省略默认就是 top
  1. nav {
  2. border-radius: 8px;
  3. margin: 0 4px 3px;
  4. }
  5. .nav-common {
  6. height: 88px;
  7. background-color: pink;
  8. }
  9. .nav-common:nth-child(2) {
  10. margin: 3px 0;
  11. }
  12. .nav-items:nth-child(1) a {
  13. border: 0;
  14. background: url(../images/hotel.png) no-repeat;
  15. background-size: 121px auto;
  16. }
  17. background: url(../images/hotel.png) no-repeat bottom center;
  18. .nav-items:nth-child(1) a {
  19. border: 0;
  20. }
  21. .nav-common:nth-child(1) .nav-items:nth-child(1) a {
  22. background: url(../images/hotel.png) no-repeat bottom center;
  23. background-size: 121px auto;
  24. }
  25. .nav-common:nth-child(2) .nav-items:nth-child(1) a {
  26. background: url(../images/plane.png) no-repeat bottom center;
  27. background-size: 81px auto;
  28. }
  29. .nav-common:nth-child(3) .nav-items:nth-child(1) a {
  30. background: url(../images/travel.png) no-repeat bottom center;
  31. background-size: 94px auto;
  32. }
  33. .nav-common:nth-child(1) {
  34. background: -webkit-linear-gradient(left, #FA5A55, #FA994D);
  35. }
  36. .nav-common:nth-child(2) {
  37. background: -webkit-linear-gradient(left, #4B90ED, #53BCED);
  38. }
  39. .nav-common:nth-child(3) {
  40. background: -webkit-linear-gradient(left, #34C2A9, #6CD559);
  41. }
  42. .nav-items:nth-child(1) a {
  43. border: 0;
  44. }
  45. .nav-common:nth-child(1) .nav-items:nth-child(1) a {
  46. background: url(../images/hotel.png) no-repeat bottom center;
  47. background-size: 121px auto;
  48. }
  49. .nav-common:nth-child(2) .nav-items:nth-child(1) a {
  50. background: url(../images/plane.png) no-repeat bottom center;
  51. background-size: 81px auto;
  52. }
  53. .nav-common:nth-child(3) .nav-items:nth-child(1) a {
  54. background: url(../images/travel.png) no-repeat bottom center;
  55. background-size: 94px auto;
  56. }
  57. 复制代码

便利功能导航栏

  1. 使用ul,li标签结构
  1. <!-- 侧导航栏 -->
  2. <ul class="subnav-entry">
  3. <li>1</li>
  4. <li>2</li>
  5. <li>3</li>
  6. <li>4</li>
  7. <li>5</li>
  8. <li>6</li>
  9. <li>7</li>
  10. <li>8</li>
  11. <li>9</li>
  12. <li>10</li>
  13. </ul>
  14. 复制代码
  1. 设置圆角及背景色
  2. 需要设置左右的外边距 margin: 0 4px;,同时body设置高度大一些,否则看不到底部了 height: 2000px;
  3. 引入flex布局,设置换行,实际高度根据内容撑开
  1. .subnav-entry li {
  2. flex: 20%;
  3. flex-warp:warp;
  4. }
  5. 复制代码
  1. li中放入a标签,两个span标签放入a中,第一个为图标,第二个为文字,设置主轴为y轴,侧轴居中
  1. <li>
  2. <a href="#">
  3. <span class="subnav-entry-icon"></span>
  4. <spa>WIFI电话卡</spa>
  5. </a>
  6. </li>
  7. 复制代码
  1. .subnav-entry a {
  2. display: flex;
  3. flex-direction: column;
  4. align-items: center;
  5. }
  6. 复制代码
  1. 设置上边距及背景图标。
  1. .subnav-entry-icon {
  2. width: 28px;
  3. height: 28px;
  4. margin-top: 4px;
  5. background: url(../images/subnav-bg.png) no-repeat;
  6. background-size: 28px auto;
  7. }
  8. 复制代码

广告部分

  1. 整体划分出一个盒子,再通过上下细分两个子盒子。
  2. 设置边距,四个方向 => margin: 4px;
  3. 左侧是一个图片,用h2标签,里面也将图片文字内容加入,这里主要方便搜索引擎搜索, 右侧用a标签可以点击,再放入图片,h2中的文字是不需要显示的,使它隐藏,用伪元素设置背景图片,因为是行内元素是看不到的,使用绝对定位即可。。
  1. <div class="sales-box">
  2. <div class="sales-hd">
  3. <h2>热门活动</h2>
  4. <a href="#">更多</a>
  5. </div>
  6. </div>
  7. 复制代码
  1. .sales-hd h2 {
  2. position: relative;
  3. text-indent: -999px;
  4. overflow: hidden;
  5. }
  6. .sales-hd h2::after {
  7. position: absolute;
  8. top: 8px;
  9. left: 20px;
  10. content: "";
  11. width: 79px;
  12. height: 15px;
  13. background: url(../images/hot.png) no-repeat 0 -20px;
  14. background-size: 79px auto;
  15. }
  16. 复制代码

页面底部

通过flex排列一下上下图片和文字css样式

  1. .tool-cn {
  2. margin-bottom: 5px;
  3. background-color: #fff;
  4. overflow: hidden;
  5. display: flex;
  6. align-items: center;
  7. justify-content: center;
  8. }
  9. .tool-cn .tool-cn-link {
  10. position: relative;
  11. flex: 1;
  12. color: #333;
  13. font-size: 12px;
  14. display: flex;
  15. align-items: center;
  16. justify-content: center;
  17. flex-direction: column;
  18. padding: 10px 0;
  19. }
  20. .tool-cn .tool-cn-link svg {
  21. width: 20px;
  22. height: 20px;
  23. margin-bottom: 2px;
  24. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/234907
推荐阅读
相关标签
  

闽ICP备14008679号