CSS3 网格布局(grid-layout)基础知识 - 网格模板属性(grid-template)使用说明

CSS3引入了新的网格布局(grid layout),以适应显示和设计技术的发展(尤其是移动设备优先的响应式设计)。

主要目标是建立一个稳定可预料且语义正确的网页布局模式,用来替代过往表现不稳定且繁琐的table、flow以及JS脚本混合技术来实现的网页动态布局。

本文将简单而准确的介绍网格布局属性的基本概念和使用方法(摘自踏得网在线HTML5教程)。

1. 概述

网格模板区域(grid-template-areas)、网格模板行(grid-template-rows)和网格模板列(grid-template-columns),这3个属性共同显式定义了一个网格容器。

而网格模板(grid-template)属性是一个用来同时设置这3个属性的速写(shorthand)。 grid items内容可能会超出显式网格,这时网格容器会自动生成隐式轨道(implicit track),这些隐式轨道的尺寸由 grid-auto-rows 和 grid-auto-columns 属性所确定。

显式网格的大小是由网格模板区域定义的行/列数以及在网格模板行/网格模板列属性定义了尺寸的行/列数中的较大者决定的。

任何由网格模板区域定义的行或列但没有在网格模板行/网格模板列中定义尺寸,则由grid-auto-rows或grid-auto-columns属性来确定大小。

如果没有定义显式轨道,显式网格依然在每根轴线上包含一个网格线。

网格定位(grid-placement)属性中的数字索引从显式网格的边缘开始计算。如果从起始侧开始,索引为以1开始的正数。反之从结束侧开始,则为以-1开始的负数。

2. 轨道尺寸:grid-template-rows 和 grid-template-columns

这两个属性用来定义一组空格分开的轨道列表(track list),轨道列表本身使用网格线名称和轨道尺寸函数来定义。

轨道尺寸函数可以是具体的长度、相对于网格容器的百分比、按实际填充内容计算(如min-content)或者可用空间片段。

它还可以通过minmax(min,max)函数来指定一个长度范围,也就是介于min和max之间的一个尺寸,其中min/max参数同样可以使用前面提到的这些尺寸定义方式。

grid-template-columns属性指定网格列的轨道列表,而grid-template-rows属性指定网格行的轨道列表。

3. 命名区域:grid-template-areas属性

此属性指定命名网格区域,该区域与任何特定的网格项无关,但可在网格定位(grid-placement)属性中引用。

网格模板区域(grid-template-areas)属性也提供了一个可视化的网格结构,使网格容器的整体布局更容易被理解。

<string>+ 代表一系列字符串。

网格模板区域属性中每个单独的字符串(string)定义了一个行,而字符串中的每个单元(cell)定义了一个列。

浏览器使用最长匹配语义来把字符串解析为如下标记(token)列表:

1. 一串名称编码点(name code points),代表一个命名单元标记(named cell token),其名称由code points(即Unicode编码空间中的字符)组成。
2. 一串单个或多个".",代表一个空单元标记(null cell token)。
3. 一串空格(whitespace),代表不会生成任何标记。
4. 其它字符串,代表一个垃圾标记(trash token)。

4. 应用实例

上述描述严格但有点死板,我们还是用一个经典的响应式多列多行页面布局实例来进行说明:

[ CSS代码 ]

#page {
  display: grid;
  width: 100%;
  height: 250px;
  grid-template-areas: "head head"
                       "nav  main"
                       "foot ....";
  grid-template-rows: 50px 1fr 30px;
  grid-template-columns: 150px 1fr;
}

#page > header {
  grid-area: head;
  background-color: #8ca0ff;
}

#page > nav {
  grid-area: nav;
  background-color: #ffa08c;
}

#page > main {
  grid-area: main;
  background-color: #ffff64;
}

#page > footer {
  grid-area: foot;
  background-color: #8cffa0;
}

[ HTML代码 ]

<section id="page">
  <header>Header</header>
  <nav>Navigation</nav>
  <main>Main area</main>
  <footer>Footer</footer>
</section>

上述代码通过 grid-template-areas 定义了一个3行2列的弹性布局:

1. 相邻的2个head字符串,将生成一个名为head的网格区域,跨越2列;

2. nav、main和foot字符串分别生成与其同名的3个网格区域;

3. 4个点(....)连线生成一个空网格区域。

然后通过grid-template-rows定义了各行轨道高度,

第1、3行分别为50px和30px固定高度,第二行为弹性尺寸即可用空间减去固定尺寸后依据弹性因子按比例分配的长度,

在这里只有一个弹性尺寸,且弹性因子为1,表示占用所有剩余空间宽度(也就是:网格容器宽度 - 50px - 30px)。

通过grid-template-columns定义了各列轨道宽度。第1列为150px固定宽度,第2列占据水平方向的剩余空间。

你可以通过在线实例来自己测试下:http://wow.techbrood.com/fiddle/15975

【注意:网格布局相关规范仍处于Working Draft状态,所以请在浏览器中进行实际测试以鉴别其兼容性。】

by iefreer

时间: 2024-10-24 11:08:15

CSS3 网格布局(grid-layout)基础知识 - 网格模板属性(grid-template)使用说明的相关文章

CSS3 网格布局(grid layout)基础知识 - 隐式网格自动布局(grid-auto-rows/grid-auto-columns/grid-auto-flow)

网格模板(grid-template)属性及其普通写法(longhands)定义了一个固定数量的轨道,构成显式网格. 当网格项目定位在这些界限之外,网格容器通过增加隐式网格线生成隐式网格轨道. 这些隐含的和显式的网格线一起构成隐式网格(implicit grid). 隐式网格轨道的尺寸由网格自动行(grid-auto-rows)和网格自动列(grid-auto-columns)属性来确定. 网格自动流(grid-auto-flow)属性用来控制无明确位置的网格项的自动定位(auto-placem

android布局tips,基础知识搜集

本文不断更新,用来记录平时编写布局相关的有用的点,这里共享给大家,如有错误恳请指出,谢谢. 1.LIstView下面添加按钮等东西,可以设置listView的属性android:layout_weight="1" 然后就可以显示了. 2.俩个Button填充满一行,可以设置属性android:layout_weight="1" .可以平分显示了. 3.android:gravity和android:layout_gravity的区别: android:gravity

CSS基础知识之文本属性二三事

line-height 可以给某个元素指定一个不带单位的缩放因子,这样它的后代元素就会继承这个缩放因子,再根据自身的字号大小来计算自己的行高(line-height)值, body { font-size: 12px; line-height: 1.5; } h1 { font-size: 36px; } 这里,body 的 line-height 是 18px(12 * 1.5),而 h1 的 line-height 则是 54px(36 * 1.5). 就算使用 em,百分比等相对单位,后代

基础知识回顾:属性

Python一切皆对象(object),每个对象都可能有多个属性(attribute).其属性可能来自类定义或类继承,这叫类属性,也可能来自实例对象的属性,这叫实例属性. 不同实例的实例属性可能不同,不同实例的类属性都相同.所以一般把需要用户传入的属性作为实例属性,而把同类都一样的属性作为类属性. 属性 定义属性:类.属性 = 值 或者 实例.属性 = 值 调用属性:类().属性() 或者 实例.属性() 或者 实例.属性 1 >>> class Person: 2 def think(

django基础知识之GET属性:

GET属性 QueryDict类型的对象 包含get请求方式的所有参数 与url请求地址中的参数对应,位于?后面 参数的格式是键值对,如key1=value1 多个参数之间,使用&连接,如key1=value1&key2=value2 键是开发人员定下来的,值是可变的 示例如下 创建视图getTest1用于定义链接,getTest2用于接收一键一值,getTest3用于接收一键多值 def getTest1(request): return render(request,'booktest

django基础知识之模板:

模板介绍 作为Web框架,Django提供了模板,可以很便利的动态生成HTML 模版系统致力于表达外观,而不是程序逻辑 模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用 模板包含 HTML的静态部分 动态插入内容部分 Django模板语言,简写DTL,定义在django.template包中 由startproject命令生成的settings.py定义关于模板的值: DIRS定义了一个目录列表,模板引擎按列表顺序

django基础知识之模板继承:

模板继承 模板继承可以减少页面内容的重复定义,实现页面内容的重用 典型应用:网站的头部.尾部是一样的,这些内容可以定义在父模板中,子模板不需要重复定义 block标签:在父模板中预留区域,在子模板中填充 extends继承:继承,写在模板文件的第一行 定义父模板base.html { %block block_name%} 这里可以定义默认值 如果不定义默认值,则表示空字符串 { %endblock%} 定义子模板index.html { % extends "base.html" %

django基础知识之POST属性:

POST属性 QueryDict类型的对象 包含post请求方式的所有参数 与form表单中的控件对应 问:表单中哪些控件会被提交? 答:控件要有name属性,则name属性的值为键,value属性的值为键,构成键值对提交 对于checkbox控件,name属性一样为一组,当控件被选中后会被提交,存在一键多值的情况 键是开发人员定下来的,值是可变的 示例如下 定义视图postTest1 def postTest1(request): return render(request,'booktest

android之网格布局和线性布局实现注册页面

(注意:1.再用weight的时候,各个组件要设置宽度为0dp,高度也要设置,2.即使没有设置weight,再用linear布局时,比如view和button都要设置宽度高度.3.如果出现运行错误,可以先检查哪个组件没设置高度) :values/strings.xml <?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name"&g