zoukankan      html  css  js  c++  java
  • 前端移动端开发经验总结

    本文是对移动端多人协作开发项目一些经验总结

    1、移动端自适应

    2、scope的使用

    3、webkit内核两行显示省略号

    4、absolute下flex布局失效

    1、移动端自适应

      正在开发一个APP项目,对于自适应有些体会

    在移动端,宽度自适应可以使用百分比来控制,加上flexbox, 20%;

    但是对于高度无能为力,后来发现大厂(淘宝,网易)推崇rem,这是CSS3新定义的,和传统的px,em不一样,rem是相对于根元素

    <html>的font-size来定义的,默认1rem = 16px,如果自定义了font-size

     

    html {
        font-size: 12px;
    }

     

    这时,1rem = 12px。这样对于高度可以通过rem来设置,不需要px

    1 .section{
    2     width:25%;
    3     height:48px;
    4     background-color: greenyellow;
    5   }

    1 .section{
    2     width:25%;
    3     height:3rem;
    4     background-color: royalblue;
    5   }

    发现3rem = 48px,因为没有设置html的font-size

    移动端最重要的是设备像素比dpr不同,常用的设计稿是750px,是iPhone6的物理像素,独立像素为375px,所以dpr=2

    具体方案参照使用Flexible实现手淘H5页面的终端适配

    另外一个就是随处可见的border,因为设备像素比不同,我们设置的1px,是设备独立像素,例如iPhone6的Retina屏

    设备会使用4个像素点2x2,去显示1个像素点,即1像素border会变成2像素border

    在Chrome中输出,发现屏幕是高清屏

    可以看出左边border比右边宽,再在iPhone6的屏幕下查看

    更清晰的发现右边的边框为1像素,左边的不是

     1 @mixin border-1px($color) {
     2     position: relative;
     3 
     4     &:after {
     5       display: block;
     6       position: absolute;
     7       left: 0;
     8       bottom: 0;
     9       width: 100%;
    10       height: 100%;
    11       border: 1px solid $color;
    12       content: ' ';
    13     }
    14   }
    15 
    16   @mixin border-1px-two($color) {
    17     position: relative;
    18 
    19     &:before {
    20       content: '';
    21       position: absolute;
    22       width: 200%;
    23       height: 200%;
    24       border: 1px solid #000;
    25       transform-origin: 0 0;
    26       transform: scale(0.5, 0.5);
    27       box-sizing: border-box;
    28     }
    29   }
    30 
    31   .section, .footer {
    32     width: 20%;
    33     height: 2rem;
    34     margin-right:3px;
    35   }
    36 
    37   .section {
    38     @include border-1px(red);
    39   }
    40 
    41   .footer {
    42     @include border-1px-two(green);
    43   }

    以上是网上的两种解决方案,结果证明只有通过缩放才能达到1像素,当然继续缩放会有什么效果参考

    再谈移动端适配和点5像素的由来

     

    2、scope的使用

      HTML5 新元素scope,范围样式,已经在团队协作中广泛使用

    <style scoped>

     

      个人开发可以在HTML中任何地方使用,限制样式只在元素及子元素生效,在Chrome查看

    可以看到,scoped给下面写的样式,均添加了一个[data-v-*]来限制样式作用域,再看一个

    在scoped下可以使用任何css样式,包括预处理器的所有特性

     

    3、webkit内核两行显示省略号

      文本限制在一行显示,注意需要直接写在标签上,写在父元素没有效果

    1     <section class="section">
    2         <p>
    3           用text-overflow:ellipsis属性来实现单行文本的溢出显示省略号(…)
    4           用text-overflow:ellipsis属性来实现单行文本的溢出显示省略号(…)
    5           用text-overflow:ellipsis属性来实现单行文本的溢出显示省略号(…)
    6         </p>
    7     </section>

     

    1 .section {
    2     background-color: #999;  // 自定义
    3     height:20px;             // 自定义  
    4     overflow: hidden;        // 必须写
    5     text-overflow: ellipsis; // 必须写
    6     white-space: nowrap;     // 必须写
    7   }

    发现没有显示省略号,删除p标签,或者将样式写到p上

      在移动端绝大数浏览器都是webkit内核,可以使用私有属性-webkit-line-clamp

    来限制显示的行数,还需要结合其他属性才能实现效果

    1 .section {
    2     background-color: #999;   /*自定义*/
    3     overflow : hidden;
    4     text-overflow: ellipsis;
    5     display: -webkit-box;           /*必须结合的属性 ,将对象作为弹性伸缩盒子模型显示*/
    6     -webkit-line-clamp: 2;          /*必须结合的属性 ,用来限制在一个块元素显示的文本的行数*/
    7     -webkit-box-orient: vertical;   /*必须结合的属性 ,设置或检索伸缩盒对象的子元素的排列方式,
    8                                       vertical:设置伸缩盒对象的子元素从上到下纵向排列*/
    9   }

    4、absolute下flex布局失效

      FlexBox在移动端表现还是不错的,尤其对于多列布局,不需要传统的float或者inline-block

    1       <header class="header">
    2         <div>1</div>
    3         <div>2</div>
    4       </header>
     1 .header{
     2     display: flex;
     3     justify-content: space-between;
     4 
     5     :first-child {
     6        30%;
     7        height:100px;
     8        border:1px solid red;
     9      }
    10 
    11     :last-child{
    12        width:30%;
    13        height:100px;
    14        background-color: green;
    15      }
    16   }

    如图所示,多列可以自适应,后来需求变动,需要将footer定位在底部,并且中间内容是可以滚动的

    1     <!--可以滚动的区域-->
    2     <section class="section">
    3       <header class="header">
    4         <div>1</div>
    5         <div>2</div>
    6       </header>
    7     </section>
    8     <!--fixed定位的底部-->
    9     <footer class="footer"></footer>
    1 .section {
    2     position: absolute;
    3 }

      发现flex失效,后来经过研究发现,position: absolute;会导致宽度失效,只会展现内容撑开的高度

      只需要设定宽度100%,或者left,right为0

    1 .section {
    2     position: absolute;
    3     width: 100%;
    4     /*left: 0;*/
    5     /*right: 0;*/
    6   }
  • 相关阅读:
    Python 3.8六大新功能
    不小心删除/etc/passwd文件怎么办
    python干货三例(需基础) ​​​​
    程序员喜爱的七款热门Linux系统介绍(附下载地址)
    零代码时代即将到来?没那么简单
    来说说成功的云迁移的10个经验教训
    日本已开始提供10Gbps万兆光纤接入服务
    微软:将向安卓和苹果iOS平台推出杀毒软件Defender
    有jQuery背景,该如何用AngularJS编程思想?
    自用迷你版的Deferred
  • 原文地址:https://www.cnblogs.com/shahramLu/p/6406775.html
Copyright © 2011-2022 走看看