zoukankan      html  css  js  c++  java
  • 响应式布局:Flexbox应用总结

    距离上篇文章《布局神器:Flexbox》的发表已有一周时间,转眼这周又到了周五(O(∩_∩)O~~);

    习惯性在周五对自己的一周工作进行下总结,记录下这周值得被纪念的工作事件,无论是好的,亦或坏的;

    本周继续是响应式网页的开发,手机浏览器,以及微信页面的开发,所以,我就有了大量的实践机会;

    于是,本周就将之前的百分比响应式布局,转向基于FLEX的响应式布局。

    纸上得来终觉浅,绝知此事要躬行。

    实际应用中发现还有很多细节要格外注意:

    下面就以今天写的Demo作为示例来说明:

    演示地址:http://jsfiddle.net/8f50uvzw/

    1# flex是display的属性值,目前还处于草稿状态中,所以在书写的时候,需要加上各个浏览器的私有前缀,即-webkit、-moz、-ms、-o等.

         所以display:flex 应该要写成:

        display: -webkit-flex;
        display: -moz-flex;
        display: -ms-flex;
        display: flex;
    

     那么类似于justify-content:space-around;这样的次级属性要不要加前缀呢?

       在chrome调试时,不用加前缀不影响其表达效果;但是,真的网页上线之后,真正用手机去打开时,不加前缀的语句都没能有效显示效果;

       所以,涉及到flex的标签属性,务必记得加上前缀,尤其是-webkit-;

      Demo

    .main-center,.main-subcenter,.subForm{
    	display: -webkit-flex;
            display: -moz-flex;
            display: -ms-flex;
    	display: flex;
    	-webkit-justify-content:space-around;
    	justify-content:space-around;
    	-webkit-align-items:flex-end;
    	align-items:flex-end;
    	-webkit-flex-wrap:wrap;
    	flex-wrap:wrap;
    }
    

    ---------------------------- 重要更新(2014/4/13) ------------------------------

    经测试,单纯地用display:flex方式实现的页面无法兼容安卓版本较低的浏览器,经过紧急抢救,现在已经解决问题。

    线上页面地址:星巴巴-手机版

    向后兼容解决方案: 

    “display:box;”或者“box-{*}”属性,是2009年版本的Flexbox。

    “display:flexbox;”或者“flex()”函数,是2011年版本的Flexbox。

    “display:flex;”和“flex-{*}”属性,是现在HTML5定稿后的规范。

    具体flexbox的属性可查看国内飘零雾雨整理的

    有区分新版和旧版的flexbox属性

    http://css.doyoe.com/

    Flexbox新旧语法不冲突,可参考 混用实现最佳浏览器兼容demo

    http://codepen.io/chriscoyier/pen/zlntC

    资料参考:详解CSS3弹性盒模型(Flexbox)

    另:含有box前缀的属性换行起来很麻烦,建议,此处的换行用:float:left/right取代。

    图片描述

     演示地址:http://jsfiddle.net/8ca9zq8q/

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8"/>
      <title>Centering an Element on the Page</title>
      <style type="text/css">
          html {
      height: 100%;
    } 
    
    body {
      display: -webkit-box;  /* 老版本语法: Safari,  iOS, Android browser, older WebKit browsers.  */
      display: -moz-box;    /* 老版本语法: Firefox (buggy) */ 
      display: -ms-flexbox;  /* 混合版本语法: IE 10 */
      display: -webkit-flex;  /* 新版本语法: Chrome 21+ */
      display: flex;       /* 新版本语法: Opera 12.1, Firefox 22+ */
    
      /*垂直居中*/  
      /*老版本语法*/
      -webkit-box-align: center; 
      -moz-box-align: center;
      /*混合版本语法*/
      -ms-flex-align: center; 
      /*新版本语法*/
      -webkit-align-items: center;
      align-items: center;
    
      /*水平居中*/
      /*老版本语法*/
      -webkit-box-pack: center; 
      -moz-box-pack: center; 
      /*混合版本语法*/
      -ms-flex-pack: center; 
      /*新版本语法*/
      -webkit-justify-content: center;
      justify-content: center;
    
      margin: 0;
      height: 100%;
       100% /* needed for Firefox */
    } 
    /*实现文本垂直居中*/
    h1 {
      display: -webkit-box; 
      display: -moz-box;
      display: -ms-flexbox;
      display: -webkit-flex;
      display: flex;
    
      -webkit-box-align: center; 
      -moz-box-align: center;
      -ms-flex-align: center;
      -webkit-align-items: center;
      align-items: center;
      height: 10rem;
    }   
    
      </style>
    </head>
    <body>
      <h1>OMG, I’m centered</h1>
    </body>
    </html> 
    

      

     2# 很多常见的 flex 相关的属性都被应用于父元素,而不是单个的子元素。

         

          

         HTML结构:

    <div class="container">
    <img src="http://www.xing88.com/Areas/Mobile/Content/Article/Index/message.svg" />
    <a href="#">专栏</a>
    </div>
    

      

       此时,无需再用单独定义img,a来使其显示在div中间,只要在父div里面添加如下css代码即可:

        display: flex;
        justify-content: center;
        /*水平居中*/
        align-items: center;
         /*垂直居中*/
        flex-direction: column;
        /*同级的a,以及img 按【列】排序*/
    

      

    3#通过设置 min-width 和 flex-wrap:wrap 可以轻松控制网页在不同屏幕尺寸下的显示方式

        通过给主要模块添加以下样式:

       

        .flex-ele{
         -webkit-flex-wrap:wrap;
         flex-wrap:wrap;
         min-width:180px;
       }

    在屏幕尺寸缩小到180px的时候,显示效果如下:

    4#Flex 对齐方式

    justify-content: space-between;

    space-between 最大化分布了容器内部的元素。不管是两个 flex-item 还是十几个,这都是成立的。

    
    
    justify-content: space-around;

      它很容易让人联想到“已经被用烂了的margin: 0”。Flex-item 默认会被均匀的分布,但是每一个都会在其给定的空间内居中显示

      

       该条内容系引用,内容来源:http://zhuanlan.zhihu.com/FrontendMagazine/19955794

    5# Flex 容器的每个直接子元素被称为一个“flex-item”。然而,子元素里面的所有元素不会继承任何特殊的样式,并且可以添加任何你想要的 CSS

    因为每个子元素是一个 flex-item,你会发现自己通过将元素包裹在一个 div 或者其它的元素中,“保护”里面的内容。使该元素成为 flex-child,而不是它里面的内容;

    6# “Block”,“inline”,“float” 和 “text-align” 在 flex-item 的环境下无意义

         默认情况,所有的 flex-item 会按照 flex 容器的顶部左侧对齐

      

      

    HTML代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">     
        <meta content="yes" name="apple-mobile-web-app-capable">     
        <meta content="black" name="apple-mobile-web-app-status-bar-style">
        <title>winPhone</title>
    </head>
    
    
    <body>
    
    <div class="main">
    	
    <div class="header common">
        <div class="logo"></div>
    	<div class="title">Flexbox</div>
    </div>
    
    <div class="main-center">
    <div class="item left common">
    <img src="http://www.xing88.com/Areas/Mobile/Content/Article/Index/message.svg" />
    	<a href="#">专栏</a>
    </div>
    <div class="item right common">
        <img src="http://www.xing88.com/Areas/Mobile/Content/Article/Index/moneyface.svg" />
    <a href="#">通告</a>
    </div>
    </div>
    
    <div class="main-subcenter">
    
    <div class="item left subleftMain">
        <a href="#" class="sunTitle">写真集</a>
    </div>
    <div class="item right subForm" >
    <div class="subitem sub-left-top">
    	<a href="#">发通告</a>
    </div>
    <div class="subitem sub-right-top">
    	<a href="#">找艺人</a>
    </div>
    <div class="subitem sub-left-bottom">
    	<a href="#">账户设置</a>
    </div>
    <div class="subitem sub-right-bottom">
    <a href="#"><img src="http://www.xing88.com/pic/Avater//Big/159.png"></a>
    </div>
    </div>
    
    </div>
    
    <div class="footer common">
    <span>Copyright © <strong>me-kevin</strong>
     All Right Reserved</span>
    </div>
    
    </div>
    	
    </body>
    </html>
    

    CSS代码:

    /*
    *mIndex.css
    *2015/4/7
    *built by @kevin
     */
    
    *{
    	margin:0;
    	padding: 0;
    }
    
    li{
    	list-style: none;
    }
    
    a{
    	color:#fff;
    	text-decoration: none;
    }
    .clearfix:after{
    	content: '.';
    	display: block;
    	height: 0;
    	clear: both;
    	visibility: hidden;
    }
    
    .clearfix{
    	*zoom:1;
    }
    
    body{
    	background-color: #333;
    	font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;
    	font-size: 100%;
    }
    
    .header,.footer{
    	position: relative;
    	 100%;
    	height:160px;
    	background-color: #345AA3;
    	color:#fff;
    	font-size: 100%;
    	text-align: center;
          -webkit-flex-direction: column;
          flex-direction: column;
    }
    
    .main-center .left, .main-center .right {
        -webkit-flex-direction: column;
        flex-direction: column;
    }
    
    .header img{
    	 64px;
    }
    
    
    .logo {
     60px;
    height: 60px;
    background: url(http://www.xing88.com/Areas/Mobile/Content/Article/Index/logonoword2x.png);
    background-size: 60px 60px;
    background-repeat: no-repeat;
    background-position: center center;
    }
    
    .title {
    margin-top: 6px;
    font-size: 120%;
    }
    
    .main-center img {
        80px;
    }
    
    .messageNo {
    	font-size: 150%;
    }
    
    .footer{
    	background-color: #999;
    	color: #666;
    	font-size: 100%;
    }
    
    .main-center,.main-subcenter,.subForm{
    	display: -webkit-flex;
          display: -moz-flex;
          display: -ms-flex;
    	display: flex;
    	-webkit-justify-content:space-around;
    	justify-content:space-around;
    	-webkit-align-items:flex-end;
    	align-items:flex-end;
    	-webkit-flex-wrap:wrap;
    	flex-wrap:wrap;
    }
    
    .common {
        display: -webkit-flex;
        display: -moz-flex;
        display: -ms-flex;
      display: flex;
      -webkit-justify-content: center;
        justify-content: center;
        -webkit-align-items: center;
        align-items: center;
    
    }
    
    .item{
    	48%;
    	margin:1% 0;
    	color:#fff;
    	min-height: 160px;
    }
    
    .left{
    	background-color: #913E8E;
    }
    
    .right{
    	background-color: #00B1BD;
    }
    
    .userface{
    	 120px;
    }
    
    
    .subitem{
    	 50%;
    	height: 80px;
    	background-color: #333;
    	display: -webkit-flex;
           display: -moz-flex;
          display: -ms-flex;
    	display: flex;
    	-webkit-justify-content: center;
          justify-content: center;
          -webkit-align-items: center;
          align-items: center;
    }
    
    .sub-left-top{
    	background-color: #31569C;
    }
    
    .sub-right-top{
        background-color: #00BB8C;
    }
    
    .sub-left-bottom{
    	background-color:#00B4BF; 
    
    }
    
    .subleftMain {
        background: url(http://www.xing88.com/Areas/Mobile/Content/Home/rgBg.jpg) no-repeat top center;    
        background-size: cover;
    }
    
    
    .sunTitle {
    display:inline-block; 100%; text-align: center; background-color: rgba(0,0,0,0.4); height: 160px; line-height: 160px; font-size: 120%; text-shadow: 0 0 0 rgba(0,0,0,0.3); } .sub-right-bottom{ background-color: #f7f7f7; } .sub-right-bottom img{ margin-top: 5px; 70px; height: 70px; border-radius: 35px; }

      

     

  • 相关阅读:
    getWritableDatabase()与getReadableDatabase()方法
    使用drawBitmapMesh扭曲图像
    移动游戏背景
    使用Matrix控制图片和组件的变化
    使用Matrix控制图像或组件变换的步骤
    1105: 零起点学算法12——求2个日期之间的天数
    1104: 零起点学算法11——求梯形面积
    1103: 零起点学算法10——求圆柱体的表面积
    1102: 零起点学算法09——继续练习简单的输入和计算(a-b)
    1101: 零起点学算法08——简单的输入和计算(a+b)
  • 原文地址:https://www.cnblogs.com/kevinCoder/p/4414906.html
Copyright © 2011-2022 走看看