基于php技术的个人网站设计,营销网站建设技术,vivo系统最新版本,WordPress音乐主题模版 MusikCSS——网格布局#xff08;display: grid#xff09;之下篇
前面我们介绍了网格布局的基础的创建以及一些比较基础的属性#xff0c;下面我们将介绍网格布局的剩余部分#xff0c;还将结合实例来进行细致的讲解#xff08;图文并茂#xff0c;生动形象有内涵#xff0…CSS——网格布局display: grid之下篇
前面我们介绍了网格布局的基础的创建以及一些比较基础的属性下面我们将介绍网格布局的剩余部分还将结合实例来进行细致的讲解图文并茂生动形象有内涵。
显式网格和隐式网格
显式网格是指在CSS中明确定义的网格轨道。包括在 grid-template-rows和 grid-template-columns 属性中指定的行和列。显示网格的大小和位置是固定的由开发者在CSS中明确指定。
隐式网格指在显示网格之外自动创建的网格轨道。当网格项没有足够的显示网格轨道来容纳时浏览器会自动创建额外的轨道来放置这些网格项。隐式网格的大小和位置是自动计算的基于网格项的需求和网格容器的尺寸。 如果网格元素放在声明的网格轨道之外就会创建隐式轨道直到包含该元素如上图所示同时在指定网格线的时候隐式网格轨道不会改变负数的含义。负的网格线编号仍然是从显式网格的右下开始的。 隐式网格轨道默认的大小为auto也就是它们会扩展到能容纳自身的宽度包含内容、内边距、边框和外边距。下面介绍三个与之相关的属性。
grid-auto-flow 属性
首先来看取值吧
grid-auto-flow: row;
grid-auto-flow: column;
grid-auto-flow: dense;
grid-auto-flow: row dense;
grid-auto-flow: column dense; 其中
row 多的格子一行一行陈列。默认值。column 多的格子一列一列排列。dense 多的格子空白填充。
row 与 column 之分
如果我们创建一个网格布局可以看到网格元素之间是默认占满一行然后一个挨着一个地向下排列的。 style.container {display: grid;}.item {background-color: #ccc;}/stylebodymain classcontainerdiv classitem1号盒子/divdiv classitem2号盒子/divdiv classitem3号盒子/divdiv classitem4号盒子/divdiv classitem5号盒子/div/main
/body 如果此时我们为网格容器添加grid-template-columns: 1fr 1fr使之分为两列可以看到这些盒子在填满本行之后才去换行显示。那你可能会说了“这不是理所当然的吗”嘿嘿这可没有那么简单这是因为grid-auto-flow属性默认设置为row即默认先填充横向再填充纵向。 如果我们修改grid-auto-flow: column style.container {display: grid;grid-template-columns: 1fr 1fr;grid-auto-flow: column;}.item{background-color: #ccc;}/stylebodymain classcontainerdiv classitem1号盒子/divdiv classitem2号盒子/divdiv classitem3号盒子/divdiv classitem4号盒子/divdiv classitem5号盒子/div/main
/body那么会产生如下的效果 原因是我们设置了grid-auto-flow: column故就先纵向填满然而我们没有明确的划分出行数所以就默认仅有初始元素所在的第一行这就导致所有的子元素会横向排列成一行后面的第3、4、5列没有划分大小所以他们就fit-content然后剩下的第1、2列平分剩下的空间 fr单位的优先级是最低的优先级顺序以及fit-content的解释可以看CSS——网格布局display: grid之上篇)。
dense 的作用
dense 翻译为稠密的我们打个比方如果有一片四四方方的农田每家每户都各自分有一块一开始大家都在种。如下图 直到有一天中间的一块田的主人王老二进城打工了这片田就荒废了远远望去中间秃了一块。如下图
村里人看到王老二进城打工赚大钱了也就纷纷效仿渐渐的原本整整齐齐的一大块地变得稀稀拉拉的。如下图
这时候村长说了“现在的地太分散了为了方便管理我们重新规划一下地块”。经过又一年的种植如下图
大家发现村长让原本分散的地块变得稠密了于是就给村长起了个外号“dense”。
我们再用代码演示我们设置第一个元素在第二列的位置 style.container {display: grid;grid-template-columns: 1fr 1fr;grid-template-rows: 1fr 1fr;}.item{background-color: #ccc;}.item:nth-child(1) {grid-column: 2 / 3;}/stylebodymain classcontainerdiv classitem1号盒子/divdiv classitem2号盒子/divdiv classitem3号盒子/divdiv classitem4号盒子/divdiv classitem5号盒子/div/main
/body可以看到左上角的位置空出来了变得稀疏了 这时我们添加grid-auto-flow: denserow是默认的会看到2号盒子填补了空缺的位置 如果我们设置了 grid-auto-flow: column dense那么就会是以下的效果 嗯dense就是这样的稍后实例中会用到。
P.S. 貌似有一个bug如果在明确指定了某个子元素不在其默认位置时浏览器渲染时会默认产生dense的效果。何为明确与不明确呢比如刚才grid-column: 2 / 3仅指定了子元素的列的位置没指定行的位置那么这就算不明确指定如果grid-column: 2 / 3 grid-row: 1 /2或者 gird-area: A这个元素的位置是确定的那么这就算明确指定在此时浏览器渲染时会默认产生 dense 的效果。
grid-auto-columns grid-auto-rows 属性
前面我们看到在仅规定两列的情况下隐式网格轨道的大小是 fit-content的grid-auto-columns grid-auto-rows 两个属性就是规定了隐式轨道的大小。
实战强化
注意下面的部分会用到Flexbox弹性盒子布局部分的知识该部分内容可以参考本人的另一篇文章CSS——弹性盒子布局display: flex
目标效果
下面我们要实现一个如下图的效果 我们可以看到图片有大有小但是它们却能够网格对齐仔细看还会发现它们的顺序不是按照从左到右排序的这个可以先联系一下 grid-auto-flow: dense。
步骤
创建网格布局
stylebody {background-color: rgb(254, 226, 181);font-family: Helvetica, Arial, sans-serif;}.portfolio {display: grid;grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));grid-gap: 1em;}.portfoliofigure {margin: 0;}.portfolio img {max-width: 100%;}.portfolio figcaption {padding: 0.3em 0.8em;background-color: rgba(0, 0, 0, 0.5);color: #fff;text-align: right;}.portfolio .featured {grid-row: span 2;grid-column: span 2;}/stylebodydiv classportfoliofigure classfeaturedimg src./images/pic1.jpg altfigcaption1/figcaption/figurefigureimg src./images/pic2.jpg alt /figcaption2/figcaption/figurefigureimg src./images/pic3.jpg alt /figcaption3/figcaption/figurefigure classfeaturedimg src./images/pic4.jpg alt /figcaption4/figcaption/figurefigureimg src./images/pic5.jpg alt /figcaption5/figcaption/figurefigure classfeaturedimg src./images/pic6.jpg alt /figcaption6/figcaption/figurefigureimg src./images/pic7.jpg alt /figcaption7/figcaption/figurefigure classfeaturedimg src./images/pic8.jpg alt /figcaption8/figcaption/figure/div
/body我们创建以上的网格布局是这样的 其中我们通过grid-template-columns: repeat(auto-fit, minmax(200px, 1fr))创建了自适应布局会根据视口的大小自动分配列数但是每列的最小宽度不会低于200px。
这时候我们发现容器内部比较稀疏所以我们想到了grid-auto-flow: dense为网格容器添加了以上属性之后的效果如下 我们会发现2、3号是对齐的但是5、7号以及6、8号是没有对齐的这是因为在默认情况下网格元素会扩展到网格单元的大小但是其子元素不会自动扩展在这里网格元素是 figure元素它会自动扩展但是它的子元素img 与 figcaption不会扩展网格肯定是对齐的但是由于以上原因导致网格单元内部出现了空余部分如下图
使网格单元内部所有元素拉伸
这时候我们想到了前面的 Flexbox弹性盒子布局它能够实现其直接子元素自动扩展与网格布局类似。所以我们添加以下代码
.portfoliofigure {margin: 0;display: flex;flex-direction: column;
}我们首先将figure设置成弹性盒子让其主轴方向为竖直那么其子元素就可以实现在竖直方向上的扩展。效果如下 我们发现这里除了figcaption 与 img 元素之间的间距没了其余的还是没有变化嘿嘿这是为什么呢 当然是我们忘记给子元素设置flex属性了可以看到flex-grow默认值是 0即默认不会放大。 所以我们为子元素设置该属性建议使用简写原因见本人的 flex文章链接在本节开始部分flex: 1我们不希望figcaption也随之放大所以我们只为img添加该属性。
figureimg{flex: 1;
}效果如下 以上看起来以上效果很好了嗯我也觉得前面消失的img元素与figcaption之间间距我就不追加了不过有时候要考虑img图片的缩放问题。
一个被拉伸的img元素的小细节
在前面我们将img元素拉伸以填充满父元素但是这样这会改变图片的宽高比导致图片变形。好在 CSS 为控制这一行为提供了一个特殊属性 object-fit。默认情况下一个img的 object-fit 属性值为 fill也就是说整个图片会缩放以填满img元素。我们也可以设置其他值改变默认行为。 比如object-fit 属性的值还可以是 cover 和 contain。这些值告诉浏览器在渲染盒子里改变图片的大小但是不要让图片变形。
cover扩展图片让它填满盒子导致图片一部分被裁剪。contain缩放图片让它完整地填充盒子导致盒子里出现空白。
这里我为了保持画面的整体性默认采用了 object-fit: fill。可以根据需求和具体情况选择适合的值。
这里有两个概念要区分清楚盒子由img元素的宽和高决定和渲染的图片。默认情况下这二者大小相等。object-fit 属性让我们能在盒子内部控制渲染图片的大小同时保持盒子的大小不变。
完整代码如下
!DOCTYPE html
html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0title网格布局的实战/titlestylebody {background-color: rgb(254, 226, 181);font-family: Helvetica, Arial, sans-serif;}.portfolio {display: grid;grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));grid-auto-flow: row dense;grid-gap: 1em;}.portfoliofigure {margin: 0;display: flex;flex-direction: column;}figureimg {flex: 1;object-fit: fill;}.portfolio img {max-width: 100%;}.portfolio figcaption {padding: 0.3em 0.8em;background-color: rgba(0, 0, 0, 0.5);color: #fff;text-align: right;}.portfolio .featured {grid-row: span 2;grid-column: span 2;}/style
/headbodydiv classportfoliofigure classfeaturedimg src./images/pic1.jpg altfigcaption1/figcaption/figurefigureimg src./images/pic2.jpg alt /figcaption2/figcaption/figurefigureimg src./images/pic3.jpg alt /figcaption3/figcaption/figurefigure classfeaturedimg src./images/pic4.jpg alt /figcaption4/figcaption/figurefigureimg src./images/pic5.jpg alt /figcaption5/figcaption/figurefigure classfeaturedimg src./images/pic6.jpg alt /figcaption6/figcaption/figurefigureimg src./images/pic7.jpg alt /figcaption7/figcaption/figurefigure classfeaturedimg src./images/pic8.jpg alt /figcaption8/figcaption/figure/div
/body/html结尾
创作不易感谢喜欢和支持如有错误恳请指出希望与大家共同进步。 文章转载自: http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.smggx.cn.gov.cn.smggx.cn http://www.morning.xinyishufa.cn.gov.cn.xinyishufa.cn http://www.morning.fhhry.cn.gov.cn.fhhry.cn http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn http://www.morning.ktrzt.cn.gov.cn.ktrzt.cn http://www.morning.wtcyz.cn.gov.cn.wtcyz.cn http://www.morning.clpfd.cn.gov.cn.clpfd.cn http://www.morning.kcdts.cn.gov.cn.kcdts.cn http://www.morning.zmzdx.cn.gov.cn.zmzdx.cn http://www.morning.rmyqj.cn.gov.cn.rmyqj.cn http://www.morning.tyhfz.cn.gov.cn.tyhfz.cn http://www.morning.jcbjy.cn.gov.cn.jcbjy.cn http://www.morning.wrkcw.cn.gov.cn.wrkcw.cn http://www.morning.wxgd.cn.gov.cn.wxgd.cn http://www.morning.rqsnl.cn.gov.cn.rqsnl.cn http://www.morning.kmldm.cn.gov.cn.kmldm.cn http://www.morning.sqhlx.cn.gov.cn.sqhlx.cn http://www.morning.c7507.cn.gov.cn.c7507.cn http://www.morning.ppdr.cn.gov.cn.ppdr.cn http://www.morning.qrqg.cn.gov.cn.qrqg.cn http://www.morning.zqcgt.cn.gov.cn.zqcgt.cn http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn http://www.morning.psxxp.cn.gov.cn.psxxp.cn http://www.morning.xhqr.cn.gov.cn.xhqr.cn http://www.morning.nwynx.cn.gov.cn.nwynx.cn http://www.morning.cbynh.cn.gov.cn.cbynh.cn http://www.morning.srrzb.cn.gov.cn.srrzb.cn http://www.morning.gsrh.cn.gov.cn.gsrh.cn http://www.morning.wcjk.cn.gov.cn.wcjk.cn http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn http://www.morning.fwdln.cn.gov.cn.fwdln.cn http://www.morning.dwmmf.cn.gov.cn.dwmmf.cn http://www.morning.fqmcc.cn.gov.cn.fqmcc.cn http://www.morning.ppdr.cn.gov.cn.ppdr.cn http://www.morning.hytfz.cn.gov.cn.hytfz.cn http://www.morning.ftmly.cn.gov.cn.ftmly.cn http://www.morning.mhfbp.cn.gov.cn.mhfbp.cn http://www.morning.kxrhj.cn.gov.cn.kxrhj.cn http://www.morning.fnczn.cn.gov.cn.fnczn.cn http://www.morning.rxfgh.cn.gov.cn.rxfgh.cn http://www.morning.tsnwf.cn.gov.cn.tsnwf.cn http://www.morning.mlzyx.cn.gov.cn.mlzyx.cn http://www.morning.xsszn.cn.gov.cn.xsszn.cn http://www.morning.rlcqx.cn.gov.cn.rlcqx.cn http://www.morning.pwppk.cn.gov.cn.pwppk.cn http://www.morning.sgmis.com.gov.cn.sgmis.com http://www.morning.nrbcx.cn.gov.cn.nrbcx.cn http://www.morning.mspqw.cn.gov.cn.mspqw.cn http://www.morning.qbwtb.cn.gov.cn.qbwtb.cn http://www.morning.zlgbx.cn.gov.cn.zlgbx.cn http://www.morning.tmfm.cn.gov.cn.tmfm.cn http://www.morning.hptbp.cn.gov.cn.hptbp.cn http://www.morning.trrrm.cn.gov.cn.trrrm.cn http://www.morning.txqgd.cn.gov.cn.txqgd.cn http://www.morning.bxbnf.cn.gov.cn.bxbnf.cn http://www.morning.kjkml.cn.gov.cn.kjkml.cn http://www.morning.rmrcc.cn.gov.cn.rmrcc.cn http://www.morning.pybqq.cn.gov.cn.pybqq.cn http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn http://www.morning.divocn.com.gov.cn.divocn.com http://www.morning.ktlfb.cn.gov.cn.ktlfb.cn http://www.morning.qzqjz.cn.gov.cn.qzqjz.cn http://www.morning.pljxz.cn.gov.cn.pljxz.cn http://www.morning.ljmbd.cn.gov.cn.ljmbd.cn http://www.morning.kphyl.cn.gov.cn.kphyl.cn http://www.morning.wbhzr.cn.gov.cn.wbhzr.cn http://www.morning.bpmmq.cn.gov.cn.bpmmq.cn http://www.morning.sffkm.cn.gov.cn.sffkm.cn http://www.morning.qwgct.cn.gov.cn.qwgct.cn http://www.morning.xgxbr.cn.gov.cn.xgxbr.cn http://www.morning.jrkzk.cn.gov.cn.jrkzk.cn http://www.morning.hcsqznn.cn.gov.cn.hcsqznn.cn http://www.morning.bbyqz.cn.gov.cn.bbyqz.cn http://www.morning.mczjq.cn.gov.cn.mczjq.cn http://www.morning.fykqh.cn.gov.cn.fykqh.cn http://www.morning.gbjxj.cn.gov.cn.gbjxj.cn http://www.morning.mqlsf.cn.gov.cn.mqlsf.cn