前端开发:网格布局

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 到群空间下载! (后面再补充时,会随时更新代码) 

时间: 2024-08-29 14:16:34

前端开发:网格布局的相关文章

前端开发:网格布局--响应式

1.前言 通过前面两章网格布局介绍,知识深度很浅,心里有点不安.不能说对不起支持我的园友(我没有这么高尚),就是觉得应该进一步学习一下“时髦”的东东. 说到网页设计,恐怕不得不提响应式设计.本章我就尝试一下网格布局下的响应式设计. 2.分隔屏幕区间 参考bootstrap3.x栅格系统,展示区间分为四种: 超小屏幕(手机) 小于768px 小屏幕(平板)    大于或等于768px 中等屏幕 (桌面显示器) 大于或等于992px 大屏幕 (大桌面显示器) 大于或等1200px 这样的css代码设

960网格布局框架(前端css框架)的使用方法

960框架总宽960px CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够先进,还有人说这些框架大大的节省了他们的开发时间.在此,我们将不再讨论这个问题. 前段时间,我了解到了CSS框架.经过对Malo.BluePrint和960做了实验对比后,我得出一个结论:我最喜欢960CSS框架. 本教程将解释这个框架的基本原理,这样你就可以用960来快速进入开发. 基本原理 你必须知道一些基本原理来“学习这个框架是如何工作的”.你可以通过实验(或者是用fir

前端开发:css基础知识之盒模型以及浮动布局。

前端开发:css基础知识之盒模型以及浮动布局 前言 楼主的蛮多朋友最近都在学习html5,他们都会问到同一个问题 浮动是什么东西?  为什么这个浮动没有效果?  这个问题楼主已经回答了n遍.今天则是把它写到我的博客中,想知道自己过来翻就好啦 ^_^  下面楼主把当前的自己对css的基础认知一一给大家道来...... 盒模型 谈到盒模型,有经验的小伙伴一定滚瓜烂熟,无非就是 内容(content).填充(padding).边框(border).边界(margin): 这些属性我们可以把它转移到我们

移动平台3G手机网站前端开发布局技巧

本文转载至:移动平台3G手机网站前端开发布局技巧汇总 - 前端开发-武方博 您或许正在或准备参与一个WepApp项目,您或许正在Google搜索mobile development相 关的文章,您或许是一名专业的WEB前端工程师,您或许想学习Mobile前端开发方面的技术,如果您被我说中了,呵呵那么这篇文章将为您带来意想不到的 惊喜!当您看到这篇文章时,哥已经默认认为您是一名资深的WEB前端工程师,如果您不是,可能您会遇见许多不理解或听不懂的专业术语或前端技术(包括 WEB.Mobile).但是

移动平台3G手机网站前端开发布局技巧汇总

移动平台3G手机网站前端开发布局技巧汇总 作者:前端开发-武方博   发布:2011-05-10 09:11   分类:移动开发   阅读:120,618 views   7条评论 您或许正在或准备参与一个WepApp项目,您或许正在Google搜索mobile development相关的文章,您或许是一名专业的WEB前端工程师,您或许想学习Mobile前端开发方面的技术,如果您被我说中了,呵呵那么这篇文章将为您带来意想不到的惊喜!当您看到这篇文章时,哥已经默认认为您是一名资深的WEB前端工程

手机网站——前端开发布局技巧汇总

自Iphone和Android这两个牛逼的手机操作系统发布以来,在互联网界从此就多了一个新的名词-WebApp(意为基于WEB形式的应用程序,运行在高端的移动终端设备). 开发者们都知道在高端智能手机系统中有两种应用程序:一种是基于本地(操作系统)运行的APP:一种是基于高端机的浏览器运行的WebApp,本文将主要讲解后者. WebApp与Native App有何区别呢? Native App: 1.开发成本非常大. 一般使用的开发语言为JAVA.C++.Objective-C. 2.更新体验较

决胜未来,2019年前端开发十大战略性技术布局

2010年的你,如果能学会Android开发,现在的你,薪资不会低于年薪50万--2015年的你,如果能熟练使用react,现在的你,薪资不会低于月薪30K--看到这两个数据,也许有人会反驳:技术刚出来,没人敢用,而且随便一门技术,用上三五年,工资也不会低于这个数吧?第一个问题, Android 是2010年才出来的吗? 从上边的资料我们可以看出: Android 是 2008年9月23日,发布的,所以2010年,它不是才出来,而是出来了两三年.我们不是赌徒,我们不知道它会火,这可以原谅,年初的

python 之 前端开发(盒子模型、页面布局、浮动、定位、z-index、overflow溢出)

11.312 盒子模型 HTML文档中的每个元素都被比喻成矩形盒子, 盒子模型通过四个边界来描述:margin(外边距),border(边框),padding(内填充),content(内容区域),如果把一个盒子比喻成一个壁挂相片,那么 外边距margin ===== 一个相框与另外一个相框之间的距离 边框border ====== 边框指的就是相框 内边距padding ===== 相片与边框的距离 宽度width/高度height ===== 指定可以存放相片的区域 1.css显示模式:块级

Android组件式开发(2)——实现网格布局的RadioButton矩阵

** 前言 ** 在Android中,我们一般通过RadioGroup来管理一组RadioButton 来达到 单选按钮的互斥效果.但是,有些需求中,需要完成N行N列这样的RadioButton组成的矩阵,但是我们的RadioGroup是一个耿直的LinearLayout,无法完成网格布局╮(╯▽╰)╭.所以,下面我就像大家来介绍一种实现网格布局的RadioButton的思路. 无图无真相, 先上一下效果图~ ** 思路 ** 提到网格布局,最简单的就是使用系统的GridView来实现,我们需要