html - 谁能解释这个现象??
高洛峰
高洛峰 2017-04-17 11:38:10
0
2
473

以下是flex布局: 相同的样式,应用在 p布局 和 和 ul布局上的效果,竟然会出现截然不同的效果!!谁能够解释??

代码:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8" />
 </head>
 <body>
   <style>
      body,p,ul{font-size:100%;margin:auto;padding:0px;}
      ul{list-style-type:none;}
      
      .flex{width:800px;height:300px;border:1px solid blue;
         display:flex;
         display:-webkit-flex;
         flex-flow:row wrap;
         -webkit-flex-flow:row wrap;
         justify-content:center;
         -webkit-justify-content:center;
         align-items:flex-start;
         -webkit-align-items:flex-end;
      }
      .flex>*{
        
        background-color:;
        flex-grow:1;
        flex-shring:1;
        flex-basis:auto;
        flex:1 1 auto;
        -webkit-flex:1 1 auto;
        text-align:center;
      }
      
      .flex>*:nth-of-type(1){background-color:blue;height:50px;line-height:50px;}
      .flex>*:nth-of-type(2){background-color:red;height:100px;line-height:100px;}
      .flex>*:nth-of-type(3){background-color:green;height:150px;line-height:150px;}

     </style>
     <p class='flex'>
       <p>1</p>
       <p>2</p>
       <p>3</p>
     </p>

     <ul class='flex'>
       <li>1</li>
       <li>2</li>
       <li>3</li>
     </ul>

 </body>
</html>

现象图:

上面一张是p 的效果图 , 下面一张是 ul 的效果图。
个人觉得主要原因是:align-itmes:flex-start 不起作用!

align-items:flex-start 在阮一峰的介绍中:

所以,我得出的结论:p中的三个子p应该和ul中三个子li标签的表现一致,也就是,顶在上面。

可为什么却出现了如此截然不同的现象??

求解释.......

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
迷茫

1圖子元素是 p,具有樣式 margin: auto
2圖子元素是 li

ps: 原來以為 margin: auto 垂直居中只針對絕對定義元素,原來flex也適用。

伊谢尔伦

你自己程式碼css樣式.flex{}中最後兩行align-items:flex-start;-webkit-align-items:flex-end;所以你的li會在最下面;
補充:

<style type="text/css">
  .wrap1{
    display:flex;
    width: 200px;
    height: 100px;
    border:1px red solid;
    margin:0 auto;
  } 
  .a{
    width: 20px;
    height: 20px;
    margin:auto;
    background-color: blue;
  }
  .wrap2{
    display:flex;
    width: 200px;
    height: 100px;
    border:1px red solid;
    margin:0 auto;
    align-items:flex-start;
  }
  .b{
    width: 20px;
    height: 20px;
    margin-left: 20px;
    background-color: green;
  }
  .wrap2 p:nth-child(1){
    margin-top:20px;
  }
  .wrap2 p:nth-child(2){
    margin-top:50px;
  }
  .wrap2 p:nth-child(3){
    margin-top:70px;
  }
</style>
<p class="wrap1">
    <p class="a"></p>
    <p class="a"></p>
    <p class="a"></p>
</p>
<p class="wrap2">
    <p class="b"></p>
    <p class="b"></p>
    <p class="b"></p>
</p>

運行上面程式碼你會發現,第一:父元素設定flex後,子元素的margin:atuo屬性不只在左右方向有作用,也對上下有作用。第二:設定align-items:flex-start後,子元素的排列會受自身margin影響。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板