01-多个div垂直分布,其中有一个高度需要自适应手机高度

方案:flex布局

设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效

html

<div class="play-template">
    <div class="top"></div>
    <div class="lrc"></div>
    <div class="slider"></div>
    <div class="bottom"></div>
</div>

css

思路:父控件充满整个屏幕,第二部分的高度充满屏幕的剩余间距,主要属性
flex-grow 1
flex-grow 属性决定了父元素在空间分配方向上还有剩余空间时,如何分配这些剩余空间。其值为一个权重(也称扩张因子),默认为 0(纯数值,无单位),剩余空间将会按照这个权重来分配。
flex-shrink 属性定义空间不够时各个元素如何收缩。其值默认为 1

.play-template
    position fixed
    margin 0px
    padding 0px
    width 100%
    height 100%
    display flex
    flex-direction column   //主轴方向
  .top
    height 70px
    background-color red
  .lrc
    flex-grow 1
    background-color blue
  .slider
    height 40px
    background-color red
  .bottom
    height 90px
    background-color blue

效果展示

57AB0E182C8BBB40F027321C2C5BDBB3.jpg

附:

flex-shrink 属性定义空间不够时各个元素如何收缩。其值默认为 1.
举个例子:
父元素 500px。三个子元素分别设置为 150px,200px,300px。
三个子元素的 flex-shrink 的值分别为 1,2,3。
首先,计算子元素溢出多少:150 + 200 + 300 - 500 = -150px。
那这 -150px 将由三个元素的分别收缩一定的量来弥补。
具体的计算方式为:每个元素收缩的权重为其 flex-shrink 乘以其宽度。
所以总权重为 1 * 150 + 2 * 200 + 3 * 300 = 1450
三个元素分别收缩:

150 * 1(flex-shrink) * 150(width) / 1450 = -15.5
150 * 2(flex-shrink) * 200(width) / 1450 = -41.4
150 * 3(flex-shrink) * 300(width) / 1450 = -93.1

三个元素的最终宽度分别为:

150 - 15.5 = 134.5
200 - 41.4 = 158.6
300 - 93.1 = 206.9
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 移动开发基本知识点 一.使用rem作为单位 html { font-size: 100px; } @media(m...
    横冲直撞666阅读 8,883评论 0 6
  • H5移动端知识点总结 阅读目录 移动开发基本知识点 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇阅读 10,114评论 0 26
  • 前言 FlexBox是css3的一种新的布局方式,天生为解决布局问题而存在的它,比起传统的布局方式,我们使用Fle...
    zevei阅读 5,257评论 23 3
  • 前言 温馨提示:本文较长,图片较多,本来是想写一篇 CSS 布局方式的,但是奈何 CSS 布局方式种类太多并且实现...
    sunshine小小倩阅读 8,340评论 0 59
  • title: flex布局date: 2017-07-07 14:13:33tags: css笔记 flexbox...
    Gary23阅读 5,408评论 0 0