ie10 grid 网格布局

目前HTML5的布局方式有很多:float,定位,弹性布局,分栏等。而在移动开发中,需要考虑到布局能够适应到不同的设备、方向和屏幕尺寸,可能还需要一些结构的更改:   

网格布局是一种新的布局方法,该方法使你能够基于固定数量、浏览器窗口中的可用空间或二者组合划分网页主要区域的空间。

通过将网格布局与媒体查询(@media)结合使用,可以使布局无缝地适应设备外形尺寸、方向、可用空间等因素的变化。

先给大家看一个例子,后面有属性介绍:

http://www.ibokanfamily.com/win8/grid/grid.html(推荐使用支持转屏的win8设备查看,如surface)

这是写完的效果图,首先是它的结构:

<body>
    <div id="grid">
        <!-- 结构的位置可以任意放置 -->
        <div id="nav" draggable="true">好吧,我是导航</div>
        <div id="tit">唐菜也</div>
        <div id="con">我是一些文本段落</div>
        <div id="pic">
             <img id="mainphoto" alt="mainphoto" src="http://www.ibokanfamily.com/win8/grid/metro.jpg"/>
        </div>
    </div>
</body>

然后是css的内容:

html,body{ height:100%; width:100%;-ms-touch-action: none;/*阻止默认动作,比如拖拽*/}
        #grid{ display:-ms-grid;/*定义网格布局*/
            -ms-grid-columns:200px 25px 1fr;/*定义列的数量及每列的宽度*/
            -ms-grid-rows:130px 25px 1fr 25px 200px;/*定义行的数量及每行的高度,1fr代表未分配区域撑满,详细看属性介绍*/
            border:1px solid red;
            height:100%;
        }
        #tit{ -ms-grid-column:1;/*确定该元素所在列*/
            -ms-grid-row:1;/*确定该元素所在行*/
            background:red;
        }
        #con{ -ms-grid-column:1;
            -ms-grid-row:3;
            -ms-grid-row-span:3;/*确定该元素占3行的高度*/
            background:#999;
        }
        #pic{ -ms-grid-column:3;
            -ms-grid-row-span:3;
            -ms-grid-row:1;
            -ms-grid-column-align:center;/*确定该列排列方式为居中*/
            -ms-grid-row-align:center;/*确定该行排列方式为居中*/
        }
        #nav{ -ms-grid-column:3;
            -ms-grid-row:5;
            background:green;
        }
        img { height:300px; width:500px;}

将网格与媒体查询一起使用

通过使用媒体查询,我们可以重新定义布局的各个方面,以便将其定制为纵向布局。要将特定于纵向布局的样式添加到样式表,应首先添加媒体查询语法:

@media all and (orientation: portrait) {

    /*媒体查询,当竖屏的时候触发*/

}

媒体查询的花括号之间添加纵向布局的样式。

网格布局的主要属性有:

Display:-ms-grid;首先给需要网格布局元素的父级添加display样式,并将其设置为-ms-grid,创建网格元素.

-ms-grid-column:integer(整数);

该属性标示对象元素在网格中处于第几列。

例:如果元素在网格中的第三列可以先找到该元素(假定id名为three)并设定样式

#three{ -ms-grid-column:3;}

Ps:该行编号系统是一个基于1的索引,1是默认的,也就是说,行编号不从零开始

-ms-grid-column-align: start | end | center | stretch(拉伸);

Start:如果对象是左对齐那么会按照从左到右的布局方式开始,如果是右对齐,则从右到左布局方式开始。(默认元素都是左对齐,加了这个样式的显示效果类似表格中的左对齐)

End:如果是从左到右的布局对象那么就右对齐,如果是从右到左的布局对象那么就左对齐。(默认元素都是左对齐,加了这个样式的显示效果类似表格中的右对齐)

Center:这个元素在列的居中位置。

Stretch:拉伸,默认值,该对象被拉伸以完全填充列的宽度。

例:如果想设定元素在列的居中位置:

-ms-grid-column-align:center;

-ms-grid-columns:auto | width | min-content | max-content | minmax(min, max)+none

定义网格由几列形成,此样式的属性值可以是一个或者多个列的宽度组成,用空格隔开。

Auto:默认值,由该列中最宽的子元素决定,相当于最小——最大的内容

Width:每列的宽度,除了”em”,”ex”,”px”还可以使用小数指示符(“fr”表示)组成的一个整数,例:”200px 1fr 2fr”这个的意思就是第一列被分配200个像素,第二列被分配到1/3的剩余宽度,第三列被分配到2/3的剩余宽度。

Min-content:用任何子元素的最小宽度来作为该列的宽度。

Max-content:用任何子元素的最大宽度来作为该列的宽度。

Minmax(min,max):最小和最大的行之间的宽度,允许为可用空间。

Ps:此属性还支持重复的语法。如果有大量的列式相同的,重复语法可以应用到在一个更紧凑的形式的列,重复的值由括号括起来,并随后由方括号[]内的整数来表示重复多少次。

例子:

-ms-grid-columns:10px 250px 10px 250px 10px 25px;

可以用:

-ms-grid-columns:(10px 250px)[3];

-ms-grid-column-span:整数;

这个对象所跨越的列数;(类似表格中合并列:colspan);

例子:如果想让对象占3列的宽度:

-ms-grid-column-span:3;

-ms-grid-row:整数;

属性值:示对象元素在网格中处于第几行。

例:如果元素在网格中的第三行可以先找到该元素(假定id名为three)并设定样式

#three{ -ms-grid-row:3;}

-ms-grid-row-align:start | end | center | stretch(拉伸);

Start:设置被放在顶部的行;

End:设置被放在底部的行;

Center:设置垂直居中的行;

Stretch:初始值,该对象被拉伸以完全填充行的高度。

例子:设定元素在行的居中位置:

-ms-grid-row-align:center;

-ms-grid-row-span:整数;

属性值:这个对象所跨越的行数;(类似表格中合并列:rowspan);

例子:如果想让对象占3行的高度:

-ms-grid-row-span:3;
原文地址:https://www.cnblogs.com/tangcaiye/p/2854911.html