grid-area属性(CSS设置)
grid-area属性(CSS设置)
一、介绍
CSSGrid(网格)布局使咱们能够比以往任何时候都能够更灵活构建和操控自定义网格。Grid(网格)布局使咱们能够将网页分红具有简略特点的行和列。它还能使咱们在不改动任何HTML的情况下,运用CSS来定位和调整网格内的每个元素。它答应HTML朴实作为内容的容器。HTML结构不再受限于款式表现,比如不要为了实现某种布局而多次嵌套,现在这些都能够让CSS来完成。
二、定义一个网格
Grid(网格)模块为display特点提供了一个新的值:grid。当你将任何元素的display特点设置为grid时,那么这个元素便是一个网格容器(gridcontainer),它的一切直接子元素就成了网格项(griditems)。
让咱们创立创立一个3×3的布局,做一个Tic-Tac-Toe(井字游戏)棋盘。
首先,咱们将写一些HTML:
class="game-board">
class="box">
class="box">
class="box">
class="box">
class="box">
class="box">
class="box">
class="box">
class="box">
如您所见,.game-boarddiv是网格容器,而.boxdiv是网格项。现在咱们将经过Grid布局来实现3×3布局。
.game-board{display:grid;grid-template-rows:200px200px200px;grid-template-columns:200px200px200px;
}
在这儿,我还运用了其他两个特点。
grid-template-rows特点答应咱们指定网格中的行数及行的高度。那么你应该猜到另一个特点是干什么的了。
grid-template-columns特点答应咱们指定网格中的列数及列的宽度。您能够指定任何单位的尺度巨细,包括像素,百分比和其他单位fr,咱们将在下一步学习。
三、fr单位(等分)
fr是为网格布局定义的一个新单位。它能够协助你摆脱计算百分比,并将可用空间等分。
例如,假如在网格容器中设置这个规矩:grid-template-rows:2fr3fr,那么你的网格容器将首先被分红2行。然后将数字部分加在一起,这儿总和为5,即5等分。
便是说,咱们将有2行:第一排占有笔直空间的2/5。第二排占笔直空间的3/5。
回到咱们的Tic-Tac-Toe比如,咱们运用fr替代px。咱们想要的是,应该有3行3列。所以,咱们只需求用3个1fr替换3个200px即可:
.game-board{display:grid;grid-template-rows:1fr1fr1fr;grid-template-columns:1fr1fr1fr;
}
这儿特别需求留意的是:fr单位是等分可用空间,或者说剩余空间。看个比如
.game-board{grid-gap:2px;display:grid;width:300px;height:200px;grid-template-rows:100px1fr1fr;grid-template-columns:1fr50px1fr;
}
布局效果如图:
你会看到fr单位是将总的尺度减去单元格清晰尺度后,在等分剩余空间。grid-gap是间隔。
四、repeat()函数
在某些情况下,咱们可能有很多的列和行。在grid-template特点中指定每一个值可能会很乏味。走运的是,有一个repeat函数,就像任何一个循环重复多少次输出某个给定值。它有两个参数。第一个是迭代次数,第二个是要重复的值。咱们用repeat函数重写上面的比如。
.game-board{display:grid;grid-template-rows:repeat(3,1fr);grid-template-columns:repeat(3,1fr);
}
等价于:
.game-board{display:grid;grid-template-rows:1fr1fr1fr;grid-template-columns:1fr1fr1fr;
}
五、grid-template特点
grid-template特点是grid-template-rows和grid-template-columns的简写语法。这是它的语法:
grid-template:rows/columns;
咱们上面的比如运用这个简写语法后,看起来十分整齐。
.game-board{display:grid;grid-template:repeat(3,1fr)/repeat(3,1fr);
}
看,只需运用2行代码,就能够运用网格布局创立3×3网格。
比如:
HTML
<divclass="game-board"><divclass="box">Xdiv><divclass="box">Odiv><divclass="box">Odiv><divclass="box">Odiv><divclass="box">Xdiv><divclass="box">Odiv><divclass="box">Odiv><divclass="box">Xdiv><divclass="box">Xdiv>div>
CSS
.game-board{width:600px;height:600px;margin:0auto;background-color:#34495e;color:#fff;border:6pxsolid#2c3e50;border-radius:10px;display:grid;grid-template:repeat(3,1fr)/repeat(3,1fr);
}.box{border:6pxsolid#2c3e50;border-radius:2px;font-family:Helvetica;font-weight:bold;font-size:4em;display:flex;justify-content:center;align-items:center;
}
六、网格线编号,网格单元格,网格轨迹
网格线是存在于列和行每一侧的线。一组笔直线将空间笔直划分红列,而另一组水平线将空间水平划分红行。这意味着在咱们之前的比如中,有四条笔直线和四条水平线包含它们之间的行和列。
在将网格项从一个方位跨过到另一个方位时,网格线变得十分有用。
网格轨迹是两条线之间的空间。网格轨迹能够是一行或一列。
网格单元格很像表格单元,是两条相邻笔直线和两条相邻水平线之间的空间。这是网格中最小的单位。
七、定位网格项
我采取了前面的比如的网格,并用数字从1到9标记每个单元格,而不是X或O,下面是它的姿态:
假定我想将第6个框移到第2个框的方位。没有CSS网格,不改动HTML的情况下,这几乎是一个不可能的任务,至少对我而言。但是假如咱们运用网格模块,改动网格中网格项的方位是一件垂手可得的事情。要将第6个框移到第2个框的方位,咱们有必要切当知道第2个框在哪里。经过网格线编号的协助,咱们能够很简单地找到这个方位。第二个方框坐落第2条列网格线之后,第3条列网格线之前,第1条行网格线之下,第2条行网格线之上。现在咱们能够运用以下特点将这些网格线编号分配到第6个框中:
grid-column-start
grid-column-end
grid-row-start
grid-row-end
前两个特点对应于笔直网格线,也便是列网格线的开端和完毕。最后两个特点是指水平网格线,也便是行网格线的开端和完毕。让咱们分配正确的网格线编号来移动第6个框。
.box:nth-child(6){grid-row-start:1;grid-row-end:2;grid-column-start:2;grid-column-end:3;
}
还有两个简写特点用于将行和列的开端网格线和完毕网格线设置在一起。
.box:nth-child(6){grid-row:1/2;grid-column:2/3;
}
此外,还有一个grid-area特点是一切四个上述特点的简写特点。它按以下顺序取值
grid-area:///;
现在咱们的比如能够写成这样
.box:nth-child(6){grid-area:1/2/2/3;
}
上面的代码行也能够进一步削减。正如您所看到的,这个框只占用一行和一个列,所以咱们只需求指定行和列的开始线,而无需完毕线的值
.box:nth-child(6){grid-area:1/2;
}
假如咱们想要第6个框跨过两个框的区域呢?这很简单经过将column-end值加1的办法来完成
.box:nth-child(6){grid-area:1/2/2/4;
}
您也能够运用span关键字和占有的轨迹数量,来替代指定grid-row-end和grid-column-end的完毕网格线编号。在这种情况下,第6个框是跨过2列和1行。
八、网格区域命名
grid-area特点也能够用来命名网格的某一个部分,然后咱们能够用grid-template-areas特点来定位。让咱们创立一个简略的bread-and-butter布局,顶部有一个top,nav,中间有main和aside,下面是footer。这是所需的HTML:
HTML
<divclass="container"><header>header><nav>nav><main>main><aside>aside><footer>footer>div>
header{grid-area:header;background-color:#9b59b6;
}nav{grid-area:nav;background-color:#3498db;
}main{grid-area:main;background-color:#2ecc71;
}aside{grid-area:aside;background-color:#f1c40f;
}footer{grid-area:footer;background-color:#1abc9c;
}
现在咱们将运用grid-template-areas特点来指定每个网格区域所占有的行和列。以下是咱们怎么做到的:
.container{display:grid;grid-template-rows:1fr5fr1fr;grid-template-columns:2fr5fr3fr;grid-template-areas:"headerheaderheader"
"navmainaside"
"footerfooterfooter";grid-gap:.75em;
}
请留意,header和footer单词重复三次。这表明,header和footer横跨3列的宽度。你能够把它全部写在一行中,但是把每一行写在一个独自的行上很好,很干净。你能够看到我在这儿运用了一个新的特点grid-gap。它所做的只是在两个网格区域之间添加一个间距。你也能够运用grid-row-gap和grid-column-gap来为行和列指定不同的间距值。
比如:
HTML
<divclass="container"><header>header><nav>nav><main>main><aside>aside><footer>footer>div>
CSS
.container{display:grid;grid-template-rows:1fr5fr1fr;grid-template-columns:2fr5fr3fr;grid-template-areas:"headerheaderheader"
"navmainaside"
"footerfooterfooter";grid-gap:.75em;background-color:#eee;width:100vw;height:100vh;
}header{grid-area:header;background-color:#9b59b6;
}nav{grid-area:nav;background-color:#3498db;
}main{grid-area:main;background-color:#2ecc71;
}aside{grid-area:aside;background-color:#f1c40f;
}footer{grid-area:footer;background-color:#1abc9c;
}
九、结论
CSS网格布局答应咱们更快地布局,并且更简单操控。在本教程中,咱们学习了怎么用CSS网格来定义布局,fr单位,repeat函数和一些网格体系中特定的术语。咱们还学习了怎么运用网格线和网格命名区域在网格容器内定位网格项目
作品标签: CSS
优秀作品:
评论列表(共97人参与)参与讨论或分享设计作品获得视觉癖积分奖励
有满足的光注册会员
2021-09-03 15:50:35
自贡闻名的当地传统面食小吃,据说源于挑夫们在街头挑着担担卖面,因而得名。担担面是将面粉擀制成面条,煮熟,舀上炒制的肉末而成。成菜面条细薄,卤汁酥香,咸鲜微辣,香气扑鼻,十分入味。 dobePhotoshopCS。2013年7月,Adobe公司推出了新版别的PhotoshopCC,
回复可以牵着注册会员
2021-09-03 10:58:50
求的东西:纸游客
2021-09-03 17:47:31
游客45389:grid-area属性div> 10、湖是静的,宛如明镜一般,清晰地映出蓝的天,白的云,红的花,绿的树。 11、做最真实的自己就好了,总有一天你会找到一个人,他会爱上lue粉蓝色 Gray灰色 aquamarine海宝蓝色
回复喜欢,人注册会员
2021-09-03 13:26:23
完成。 因快斗意外发现家中密室,发现父亲就是曾活泼一时、8年前消声觅迹的怪盗基德,同时怀疑父亲并非死于演出意外,而是被人谋害。为了追查父亲死因的真相而承继父亲怪盗的身份
回复