前端开发:网格布局_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 前端开发:网格布局

前端开发:网格布局

 2015/4/2 16:04:01  GiveCase  程序员俱乐部  我要评论(0)
  • 摘要:1.前言上一篇文章点击量还不错,为啥评论没有?还有反对的。哎!看来我得反省帖子的质量啦。老实说,哥也不是很在意这不“和谐”的声音,也许开篇废话太多的缘故吧。我想别人的分享,没有功利性,都是随心情而写。园子的口号:代码改变世界!我的原则:我无法来改变你们的看法,但希望得到大家的反馈—不管好坏!2.说明最近需要加强一下前端知识,所以也就打算总结这些。老实说,我的前端知识也不熟悉,说懂一点吧,也是凑合着安慰自己。个人的感觉,学什么知识,凭兴趣远没有工作(挣钱
  • 标签:开发

1.前言

   上一篇文章点击量还不错,为啥评论没有?还有反对的。哎!看来我得反省帖子的质量啦。

   老实说,哥也不是很在意这不“和谐”的声音,也许开篇废话太多的缘故吧。我想别人的分享,没有功利性,都是随心情而写。  

   园子的口号:代码改变世界! 我的原则:我无法来改变你们的看法,但希望得到大家的反馈—不管好坏

2.说明

   最近需要加强一下前端知识,所以也就打算总结这些。老实说,我的前端知识也不熟悉,说懂一点吧,也是凑合着安慰自己。

   个人的感觉,学什么知识,凭兴趣远没有工作(挣钱)需要逼着学动力强些。

   也许有人较真吧,我不会的,请别人就是了;学的东西不感兴趣,学起来也累,干脆放弃就是了。

   总之,想学的东西千千万万,不想学的东西也万万千千啦。自个的选择,也许是无奈的,也许刚好符合理想的。

   本章,我先说一下CSS Grid Layout (网格布局),虽然目前各大浏览器唯有IE10+支持稍微好些,但这项技术在w3c中也明确收录了。

   是不是以后被主流浏览器完全支持?从技术特点好处来说,应该是有前途的。

3. Property API

    我们先过目一下支持IE10+的Grid属性:

   属性  说明 列 -ms-grid-column  获取或设置一个值,指定在哪一列网格放置对象的位置 -ms-grid-column-align  获取或设置一个值,指定网格列内的对象的水平对齐方式  -ms-grid-columns  获取或设置一个或多个指定的对象中的每个网格列宽度的值  -ms-grid-column-span  获取或设置一个值,指定的网格中的对象跨越的列数 行      -ms-grid-row  获取或设置一个值,指定在哪个网格行中要放置对象的位置  -ms-grid-row-align  获取或设置一个值,指定网格行中的对象的垂直对齐方式  -ms-grid-rows  获取或设置指定对象中每个网格行的高度的一个或多个值  -ms-grid-row-span  获取或设置一个值,指定的对象跨越的网格的行数

    当然别忘了,还有一个 display:-ms-grid定义盒子为网格属性。另外还有很多更高级的属性,只是目前浏览器不支持,提它也没法演示啦。

4.三行三列

    技巧:用web essentials工具(在前面博文有介绍过),可以快速写html代码块,如:

    div#grid>div#grid$*9按下Tab键,就生成:  

    <div id="grid">
        <div id="grid1"></div>
        <div id="grid2"></div>
        <div id="grid3"></div>
        <div id="grid4"></div>
        <div id="grid5"></div>
        <div id="grid6"></div>
        <div id="grid7"></div>
        <div id="grid8"></div>
        <div id="grid9"></div>
    </div>

    三行三列的代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>网格布局</title>
    <style>
        #grid {
            display: -ms-grid;/*设置为网格*/
            -ms-grid-columns: 1fr 1fr 1fr; /*三等宽 列*/
            -ms-grid-rows: 1fr 1fr 1fr; /*三等高 行*/
            width: 600px;
            height: 300px;
            color: white;
        }

        #grid1 {
            -ms-grid-column: 1; /*第1列*/
            -ms-grid-row: 1; /*第1行*/
            background-color: red;
        }

        #grid2 {
            -ms-grid-column: 2; /*第2列*/
            -ms-grid-row: 1; /*第1行*/
            background-color: blue;
        }

        #grid3 {
            -ms-grid-column: 3; /*第3列*/
            -ms-grid-row: 1; /*第1行*/
            background-color: orange;
        }

        #grid4 {
            -ms-grid-column: 1; /*第1列*/
            -ms-grid-row: 2; /*第2行*/
            background-color: black;
        }

        #grid5 {
            -ms-grid-column: 2; /*第2列*/
            -ms-grid-row: 2; /*第2行*/
            background-color: brown;
        }

        #grid6 {
            -ms-grid-column: 3; /*第3列*/
            -ms-grid-row: 2; /*第2行*/
            background-color: darkblue;
        }

        #grid7 {
            -ms-grid-column: 1; /*第1列*/
            -ms-grid-row: 3; /*第3行*/
            background-color: chartreuse;
        }

        #grid8 {
            -ms-grid-column: 2; /*第2列*/
            -ms-grid-row: 3; /*第3行*/
            background-color: burlywood;
        }

        #grid9 {
            -ms-grid-column: 3; /*第3列*/
            -ms-grid-row: 3; /*第3行*/
            background-color: blueviolet;
        }
    </style>
</head>
<body>
    <div id="grid">
        <div id="grid1">grid1</div>
        <div id="grid2">grid2</div>
        <div id="grid3">grid3</div>
        <div id="grid4">grid4</div>
        <div id="grid5">grid5</div>
        <div id="grid6">grid6</div>
        <div id="grid7">grid7</div>
        <div id="grid8">grid8</div>
        <div id="grid9">grid9</div>
    </div>
</body>
</html>

    效果:

  

   看着效果,对照代码,你是否体会到什么啦? 哎!可能觉得,这用表格table标签来整,不是更省事。

   或者使用盒子模型浮动float布局,甚至定位position布局一样能搞定这种效果。

   另外css3也增加多column布局及flex伸缩布局,也是可以实现这种效果。

   在看到别人做事的方式不妥时,我们作为旁观者,总是委婉地说:你可以这样做,但你不应该这样做。

   任何技术,都不是万能的,你最好选择最佳的那种技术适应应用场景可能是很难,但实践总会摸索出一些经验来。

   放到代码技术选择上,我们得感谢“师傅”,“前辈“们通过实践和测试,给我们提供一些好的建议吧。

   当然,每人的习惯,思维,做事方式不同,能选择自己擅长的也罢。

   本人在这简单总结一下(由于前端技术学习刚刚上路,不对之处,还望大家教教我,指出错误啦):

   table:一般是来显示数据的,如果用它来做网页整体(大块)布局,浏览器加载解析的速度并不好……,这也是div+css布局出现原因;

   div+css:这是css2.x时代,最好布局方式了。float,position及盒子模型应用技术;

   column:这个用大段的文章内容分栏布局,是最舒服的布局方式了;

   flex:这个也是吊爆的技术,目前主流浏览器加厂商前缀,基本支持的差不多了,最终统一标准指日可待吧.它的特点可以使得块元素的位置,大小很容易控制的布局方式。

5.grid布局特点

 呵呵,扯了别的布局选择,我们得回归本章正题上。

 第一点:html元素顺序无所谓了,我们的布局是根据单元格填充的。 如:

        <div id="grid3">grid3</div>
        <div id="grid4">grid4</div>
        <div id="grid1">grid1</div>
        <div id="grid2">grid2</div> 

 我们css定义没有变,效果还是一样,这是table不方便的。它带来的好处,你应该懂吧。
 第二点:单元格内部元素,位置定位,我们体会一下: 

        #grid1 {
            -ms-grid-column: 1; /*第1列*/
            -ms-grid-row: 1; /*第1行*/
            -ms-grid-column-align: center; /*列对齐居中*/
            -ms-grid-row-align: center; /*行对齐居中*/
            background-color: red;
            padding: 20px;
        }

 其效果(第1列第1列单元格):

  
 第三点:合并单元格,举例,我们让第二列第三行(grid8)和第三行第三行(grid9)单元格合并:

        #grid8 {
            -ms-grid-column: 2; /*第2列*/
            -ms-grid-row: 3; /*第3行*/
            -ms-grid-column-span: 2; /*跨2列*/
            z-index: 1; /*跨列合并后,使其位于上层*/
            background-color: burlywood;
        }

 其效果(grid9位于下层了,所以看不到了,并不是不存在了):

 

6.两边固定宽度,中间自适应宽度

  修改:  

        #grid {
            display: -ms-grid; /*设置为网格*/
            -ms-grid-columns: 200px auto 100px; /*三列 auto宽度是根据内部大小自动的*/
            -ms-grid-rows: 1fr 1fr 1fr; /*三等高 行*/
            width: 600px;
            height: 300px;
            color: white;
        }

  其效果(中间一列):

 

 呵呵,那如何自适应最大呢?用百分比啦: 

  -ms-grid-columns: 200px 100% 100px; /*三列*/

 嘛蛋,截图多了,此效果就略饿。

7.小结

 本章介绍,还是比较简单的,内容不多啦。这项技术还有待浏览器厂商支持发展,等成为标准之后,你们再学了。这里我也是稍稍体会一下,未能详细概述啦。

 本章代码,请加QQ群:290576772 到群空间下载! (后面再补充时,会随时更新代码)    

  

发表评论
用户名: 匿名