快应用采坑与flex布局讲解

算法霜晶客
• 阅读 4111

快应用之flex布局

在我们常用的布局中有display + position + float进行布局,但是这些布局或多或少都有些麻烦(虽然我最喜欢用position,哈哈啥都能干)。但是由于快应用只能够使用flex布局,flex布局和position有冲突,所以在快应用中能够使用的position只有fixed,而float布局总是会出现各种各样的问题,flex的优势就显而易见,简单好用。

快应用使用的是Flex布局,每个盒子都是用有一个自带属性就是display: flex
所以在写css代码的过程中,不需要我们声明这是一个flex盒子,这是一个flex盒子的示意图。下面介绍有关flex的一些常用基本属性:flex-direction;flex-wrap;justify-content;align-content;align-items;
flex-direction是定义主轴的方向,常用的有column,row。

快应用采坑与flex布局讲解
在上面示意图中可以看到main-axis就是水平的,flex-direction的默认设置是row,也就是我们看到的情景,如果flex-direciton只需要把他翻转90度,就可以理解。

flex-wrap属性默认是nowrap,也就是当内容宽度超过容器的宽度的时候,他不会换行,会以等比例的缩小来适应父元素的宽度,例如下:

<div class="wrapper">
  <div class="content-one">
  </div>
  <div class="content-two">
  </div>
</div>
<style>
  .wrapper {
      width: 100px;
      height: 600px;
      display: flex;
    }
    .content-one {
      width: 200px;
      height: 300px;
    }
    .content-two {
      width: 200px;
      height: 300px;
    }
</style>

可以看到父元素的宽度只有100px,但是子元素加起来的宽度为400px,实际显示中两个content会等比例缩小,在这里父元素是100px,那么每个content的宽度就只有50px;如果设置为flex-wrap: wrap;那么由于父容器的宽度容不下并列的两个子元素,那么这有一个子元素就需要换到下一行;

justify-content:

设置主轴方向上元素的对齐方式:常用的有flex-start, flex-end, center, space-between, space-around。如前面flex盒子可以看到主轴的方向,下面是他们在主轴上的对齐方式,一眼就能够看明白。

快应用采坑与flex布局讲解

align-items:

在flex的盒子示意图上,可以看到有主轴,也有交叉轴,align-items就是用于设置交叉轴上各项目的对齐方式,可以类比justify-content。

align-content:

这是用在多根轴线的问题上,在前面看flex-wrap中提到,如果使用flex-wrap: wrap那么这种情况,父元素如果包容不下子元素,那么就需要换行,换行就会出现多根轴线,如果flex-wrap: nowrap,或者就是默认设置,那么align-content是不生效的,这里需要主要,然后align-content能够设置的属性和justify-content是一样的,只不过一个是单行,另外一个是多行。

flex: number;

在项目中我们经常使用flex: 1这种属性,flex: number 是三种属性的简写:分别是flex-grow, flex-shrink,flex-basis。平时我们很少单独来写他们分别是多少,都基本写flex: 0,或者1。flex-grow代表项目的放大比例,例如父元素的宽度是300,但是子元素的宽度加起来总共才200,子元素这时候填充不满父元素,会留下一些空白,如果设置flex-grow为1,那么子元素就会等比例增大,将父元素的300px全部填充,如果设置0就是如果没有充满,也不会放大。flex-shrink就和flex-grow正好相反,就是如果内容宽度超过了父元素的宽度,那么内容就会等比率缩小。

flex-basis用来设置项目占据主轴的初始空间,浏览器通过这个来计算是否有额外的空间,一般设置为auto,就代表它占据的主轴空间是项目本身的大小。一般我们都会用到flex: 1,这就代表着flex: 1 1 0%; 那么0和auto的区别是哪里呢,比如说一个div的宽度是100px,如果设置他的flex-basis为0,那么他的初始宽度就为0,如果是auto,那么他的初始宽度就是100px,请记住这并不是他的最终宽度,例如在flex: 1中我们设置了flex-grow和flex-shrink那么他的最终宽度父容器减去刚才设置的初始宽度然后按等比率划分,例如

<div class="wapper">
  <div class="content"></div>
</div>
<style>
  .wrapper {
    display: flex;
    width: 100px;
  }
  .content {
    flex: 1;
  }
</style>

在上面例子中,wrapper的宽度为100px,content的flex-basis为0,那么初始宽度就为0,但是他的最终长度不是0,因为我们设置了其他两个属性,需要完全占据父元素,那么content的最终宽度就为100px,是不是觉得豁然开朗了。
咱么下面进入flex的应用。
就直接讲一个稍微难一点的例子:

快应用采坑与flex布局讲解
如果需要实现上面的情况,那么代码如下:

<div class="wrapper">
    <div></div>
    <div></div>
    <div class="placeholder"></div>
  </div>
  <style>
    .wrapper {
      width: 100px;
      height: 100px;
      border: 1px solid red;
      display: flex;
      align-items: flex-start;
      justify-content: space-between;
    }
    .wrapper div {
      width: 20px;
      height: 20px;
      border-radius: 50%;
      background-color: gainsboro;
    }
    .placeholder {
      visibility: hidden;
    }
  </style>

更多的就需要自己去探索,这里就不一一讲解了。

快应用之坑

1:标签使用受限

快应用目前支持的标签特别少,比如说咱们要是想段落分行,不能使用
需要使用flex进行布局,还有div标签中不能直接输入文字,文字必须包含在span, text所支持的标签中。

2:border使用

在以往写style中,如果我们需要只让元素下面有边框,直接使用border-bottom。但是这里不行,我们需要这么写:

  border: 0 1px solid;
  border-bottom: 1px;
3:颜色支持

很多时候我们可以看到报警说这个颜色不支持,目前是支持16进制的颜色,但是有时候就是说这个有错,但是在官网颜色也是这么写的。我碰到的情况:设置背景颜色,以往使用background: #fff;但是在快应用中需要写:

background-color: #fff;
4: 自己支持的标签体验较差

tabs标签用于来切换页面,支持这个确实节省了很多时间,但是用户效果并不是很好,下拉有卡顿,并且不知道他样式是怎么弄得,点击的时候有阴影。
list效果不好,list用于用户滑动,但是我遇到一个问题,如果在list和其他元素在同一个div下,并且div设置flex-direction,那么list的内容无法显示,原因是list的内容高度变成了0,需要css手动设置高度。

5:图片无法显示

在引入图片的时候,如果使用桌面图标的图片,就是icon地址的图片,无论你改了名字,还是放在组件目录下,都无法显示,必须引入icon地址的图片。例如icon: './Common/logo.png',如果你需要使用这张图片,必须使用Common目录下的这张图片,否则无法显示。

6:调试困难

我们需要手机和电脑处于同一局域网,手机需要开启代理,这还不够,电脑需要拦截,我用的charles,在线更新的时候,必须开启charles,特别麻烦,而且手机开了代理,有些网页就上不了,电脑同样如此。

IDE

华为开发了一个用于开发快应用的IDE,下载地址为http://developer.huawei.com/c...,大家可以去试一下。我用了一下,ide特别吃内存,一开我电脑就死机,需要自己配置,所以干脆就没用这个ide了。

结语

总之目前,快应用开发确实有些困难,任重道远,希望大家能够团结协作,让快应用开发体验更好。贴一个快应用微信群,一起学习,一起进步

快应用采坑与flex布局讲解

点赞
收藏
评论区
推荐文章
浪人 浪人
4年前
Android 代码动态修改RelativeLayout布局
Android代码动态修改RelativeLayout布局前言有时我们会遇到在xml布局文件中设置好界面后,但是又需要从代码中进行动态布局修改。之前从网上寻找了好多资料,看到的都是新建一个布局文件但是我的需求又是从当前布局文件的基础上进行修改。下面用一个示例大家介绍一个比较简单的办
Alex799 Alex799
4年前
Vue进阶(幺柒幺):前端用户体验提升(五)Flex实现弹性布局
需求背景在实现组件拖拽设计过程中,发现组件样式中设置了display:flex属性信息,导致组件生成后无法实现拖拽效果,网上查阅资料后发现Flex布局大有天地。Flex来源
菜园前端 菜园前端
2年前
想学会flex布局,我强烈推荐你来看看这篇文章!!
原文链接:为什么要使用flex布局?flex布局是目前比较流行的一种布局,因为它十分简单灵活,区区简单几行代码就可以实现各种页面的的布局,以前我在学习页面布局的时候我深受其float、display、position这些属性的困扰。使用flex属性就可以写
浩浩 浩浩
4年前
【Flutter实战】线性布局(Row、Column)
4.2线性布局(Row和Column)所谓线性布局,即指沿水平或垂直方向排布子组件。Flutter中通过Row和Column来实现线性布局,类似于Android中的LinearLayout控件。Row和Column都继承自Flex,我们将在弹性布局一节中详细介绍Flex。主轴和纵轴对于线性布局,有主轴和纵轴之分,如果
Wesley13 Wesley13
3年前
HTML CSS布局定位
HTMLCSS布局定位我们在编写网页代码时,首先应该做的就是设计好页面的布局形式,然后再往里面填充内容。网页布局的好与坏,直接决定了网页最终的展示效果。PC端常见的网页布局形式有两列布局、三列布局等。在CSS中,我们通常使用浮动(float)、定位(position)、显示模式(display)相关属性结合使用,以达到预期效果
Wesley13 Wesley13
3年前
使用伸缩盒布局创建一个三列布局每一列占用`col
\使用伸缩盒布局创建一个三列布局每一列占用\col{n}\/12份基于父级容器的宽度\Answer设置\.row\类的父级容器为\display:flex;\样式然后使用\flex\缩写形式属性给每一列子元素设置一个\flexgrow\值使得每一列可以按照设置的比例自动协调宽度
Stella981 Stella981
3年前
Grid布局和Flex布局
Flex布局(弹性布局)Flex是弹性布局,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为Flex布局。行内元素也可以使用Flex布局。采用Flex布局的元素,称为Flex容器。flexitem项目是Flex布局的元素,简称项目。容器:水平的主轴(mainaxis)和垂直的交叉轴(crossaxis),单个项目占据的主轴空间叫做m
Stella981 Stella981
3年前
ConstraintLayout 约束布局
  约束布局ConstraintLayout  这种布局方式出现已经有一段时间了,刚出现的时候一直以为这种布局只是针对拖拽使用的布局,最近在新项目里看到了这种布局,又重新学习了这种布局,才发现以前真的是图样图森破啊,这种新的布局方式真的太好用了!1.引入使用之前需要添加这种布局的依赖implementation'com.an
达里尔 达里尔
1年前
Flex布局:flex-grow:1失效
工作中遇到一些flexgrow:1的容器失效,一堆文字乱码溢出,最后看了一下flex布局的原理解决了cssdivflexgrow:1;wisth:0;如果遇到另一边的div设了宽但是被flexgrow:1的内容挤压了,可以给设了宽的div加flexshri
京东云开发者 京东云开发者
8个月前
鸿蒙跨端实践-布局方案介绍
作者:京东科技刘宁一、前言动态化使用jue语言(开发风格与Vue一致)开发,对于视图的布局采用了标准的Flex布局方式。对于列表类视图,动态化提供了、、、等标签,将子视图的布局管理封装到标签中实现,业务只需要针对标签简单地设置相关属性,即可实现列表类布局,