CSS使用Grid布局构建网站首页

css的功能最终强大到能轻松实现我们的设计目标,这是一个web开发人员最美好的时代。现在,让我们使用超赞的工具——grid布局来创建一个主页。

设计

下面是我们将要实现的页面

CSS使用Grid布局构建网站首页

在我们开始编码之前,我们需要进入网格的思维模式。 第一步是观察我们的设计稿,并将其划分为主要的网格组件。 以下是我为此设计做的划分:

CSS使用Grid布局构建网站首页

立即学习“前端免费学习笔记(深入)”;

你会发现整个页面分为7个顶级网格区域。 我之所以说“顶级”是因为我们可以在其内部继续嵌套网格,这正是我们将要对hero部分所做的事:

CSS使用Grid布局构建网站首页

HTML

这是HTML的基本结构。 稍后我会显示整个完成的文件,但现在我已经省去了大部分的细节。 这里要注意的重要部分是作为 body 的直接后代的7个元素:top-bar、main-header、hero、 blog-posts、 news、 side-bar 以及 main-footer。 body将成为我们的网格容器(grid container),它的孩子将成为网格项(grid items)。

正如刚刚提到的,我们也将设置 hero 作为网格容器。 它有两个孩子,将作为网格项:message 和 award。

  

登录后复制

CSS

Okey,我们按照这种方式讲解,教程中我们不会展示所有使用到的CSS,在文章的最后我会展示最终完整的文件。现在我们只关注吸引我们的网格部分以及任何与它直接相关的样式即可。

我们首先在body上定义主网格容器:

body{  display: grid;  grid-template-columns: 12% auto 400px 12%;  grid-template-rows: auto auto 950px auto auto auto;}

登录后复制

我们刚刚创建了一个4列6行的网格,第一列和最后一列将作为主内容两侧的填充。 我把第三列设置为400px,因为这是我们将要放置side-bar元素的地方,我们希望这是一个固定的宽度。 hero 元素(第三行)的固定高度为950px。

现在我们使用grid-template-areas来定义某个网格区域会跑到哪里。 这是非常有趣的部分:

body{  display: grid;  grid-template-columns: 12% auto 400px 12%;  grid-template-rows: auto auto 950px auto auto auto;  grid-template-areas: "top-bar     top-bar     top-bar     top-bar"                       "main-header main-header main-header main-header"                       "hero        hero        hero        hero"                       ".           blog-posts  side-bar    ."                       ".           news        side-bar    ."                       "main-footer main-footer main-footer main-footer";  }

登录后复制登录后复制

grid-template-areas让我们能把元素放在任何想要放置的地方,并且对于元素的布局该属性给我们提供一个不错的可视化。 值得注意的是,这里使用的值(top-bar,main-header,hero等)不是指那些元素的类名,而是指我们用grid-area属性给它们起的名字,下一步我们将对它们命名。

当网格区域名称重复时,该元素将跨越这些列/行。 例如,top-bar 横跨四列,side-bar横跨四行和五行。 .号代表空单元格。如果你回头看看上面的完整设计,您会看到这个定义如何与我们的网格模式相匹配。

假设我们已经应用了我们所有的样式,但还没有为网格项分配网格区域名称,到目前为止我们的页面看起来还不太好:

CSS使用Grid布局构建网站首页

在将网格区域名称分配给网格项之前,网格将根据它们的源顺序自动将我们的元素放置在网格中。 显然这不是我们想要的。 为了使我们的布局按预期工作,我们需要定义我们的网格区域。所以我们继续往下走:

.top-bar{  grid-area: top-bar;} .main-header{  grid-area: main-header;} .hero{  grid-area: hero;}.blog-posts{  grid-area: blog-posts;}.news{  grid-area: news;}.side-bar{  grid-area: side-bar;}.main-footer{  grid-area: main-footer;}

登录后复制

需要注意的是这些名称可以随意设置。 为了方便,我选择了让它们与类名相匹配。

现在,我们已经为网格项分配了网格区域名称,它们将在被放置在网格中合适的位置。 这一步带来的变化很大:

CSS使用Grid布局构建网站首页

除了 hero 部分中的网格项外,所有内容都完全按照需要正确放置,我们差不多要完成了。

但是在我们修复 hero 部分之前,我想解释一下一些难以理解的地方:主要内容两边的填充区域的设置。 作为提醒,我们再次把刚刚的设置搬过来,用如下方式调整列:

body{  grid-template-columns: 12% auto 400px 12%;}

登录后复制

设置为12%的两列用于填充主要内容两边的空白,但是它们仅用于第四行和第五行。 回想一下,我们告诉我们的top-bar、main-header、hero和main-footer元素跨越所有列,包括这两个“填充”列。 我们为什么这样做? 因为我们希望这些元素的背景色横跨越整个视窗宽度,且任何一侧都没有空白。 我们只想在 blog-post/news和sidebar元素周围留出空白(第四行和第五行)。

为了让元素水平覆盖整个宽度,同时让元素里面的内容保存一定的padding,我们需要显示地在这些元素上设置padding:

.top-bar{  padding: 4px 12%; }.main-header{  padding: 12px 12%;}.hero{    padding: 55px 12% 0 12%;}.main-footer{  padding: 25px 12%;}

登录后复制

我们给元素设置左右 padding 为12%,这和grid-template-areas定义中的第一列和最后一列的宽度是一样的。 现在,需要填充整个宽度的元素最终呈现的结果是,背景横跨水平宽度,但其内容在两侧都预留出12%的空白。 很赞!

好了,让我们来修复 hero 部分。 这也将是一个网格容器,因此我们把它定义为一个网格,就像刚刚做过的那样:

.hero{  display: grid;  grid-template-columns: auto 1fr auto;  grid-template-rows: auto auto auto;  grid-template-areas: ".       .  award"                       "message .  .    "                       ".       .  .    ";  }

登录后复制

这是一个3×3的网格,除了中间的列,其它都设置为 auto。 我们给中间一列大小设为1fr,因为我们希望在第一列和最后一列用东西填充后,剩下的空间完全需要完全填满。

hero中只有两个元素:message和award。 我们要message占据第二行的第一列,我们要award占据第一行的第三列。所以我们的完整网格定义应该如下所示:

.hero{  display: grid;  grid-template-columns: auto 1fr auto;  grid-template-rows: auto auto auto;  grid-template-areas: ".       .  award"                       "message .  .    "                       ".       .  .    ";   }

登录后复制

下面我们所要做的就是命名我们的元素:

.message{  grid-area: message;}.award{  grid-area: award;}

登录后复制

就这样,message和award卡入到位,我们的页面完成:

CSS使用Grid布局构建网站首页

引入响应式

CSS Grid 使用媒体查询让重新排列整个布局变得非常简单。你所做的就是重新放置你的网格项。现在回到我们的设计,简单起见,我们只对两个宽度临界值做响应式处理,1600px 和 1050px。我们需要对一些元素(padding、margin等)进行一些小的样式调整,但是我不会把所有的样式调整都全部展示在这里。后面我会放出完整的代码,现在我们只需要关注关注网格相关的东西即可。

1600px 这个临界点的处理比较简单,当浏览器宽度到底1600px时我们将减少网站外部填充的地方。 之所以选择1600px,是到了这个宽度后12%填充看起来不太合适。为了解决这个问题,我们需要做的是在body上改变grid-template-columns的值,将第一列和最后一列减少到2%。 我们还需要调整其他元素的填充以匹配:

@media (max-width: 1600px) {  body{    grid-template-columns: 2% auto 400px 2%;  }  .top-bar{    padding: 4px 2%;  }  .main-header{    padding: 12px 2%;  }  .hero{    padding: 55px 2% 0 2%;  }  .main-footer{    padding: 25px 2%;  }}

登录后复制

对于下一个临界值,我们对网格项重新排列,使它们排列在一个列中。 再次回头看看我们原来的代码是如何对body进行设置的:

body{  display: grid;  grid-template-columns: 12% auto 400px 12%;  grid-template-rows: auto auto 950px auto auto auto;  grid-template-areas: "top-bar     top-bar     top-bar     top-bar"                       "main-header main-header main-header main-header"                       "hero        hero        hero        hero"                       ".           blog-posts  side-bar    ."                       ".           news        side-bar    ."                       "main-footer main-footer main-footer main-footer";  }

登录后复制登录后复制

下面是重新设置的媒体查询:

@media (max-width: 1050px) {  body{    grid-template-columns: 3% auto 3%;    grid-template-rows: auto auto auto auto auto auto auto;    grid-template-areas: "top-bar     top-bar     top-bar"                         "main-header main-header main-header"                         "hero        hero        hero"                         ".           blog-posts  ."                         ".           news        ."                         ".           side-bar    ."                         "main-footer main-footer main-footer";  }}

登录后复制

我们在这里做了一些重要的改变:将列数从四个减少到三个,将第一列和最后一列的值改为3%(3%在较窄的宽度上优于2%),添加了 附加行,将所有行的长度改为auto,并将side-bar移动到自己的行。 现在我们的页面元素很适合在较窄的宽度下展示:

CSS使用Grid布局构建网站首页

The Live Code

下面是我们的主页,以及完整的HTML和CSS文件。 你需要一个支持grid的浏览器来查看预览。 我建议启用Experimental Web Platform Features标志的Chrome 49+(地址栏输入 chrome:// flags ,并向下滚动到“Experimental Web Platform Features”)。

下面的嵌入式页面默认会以移动视图展示,可以点击“Edit on Codepen”在页面全宽下展示不同的效果:

在 CodePen 查看效果 Building a Home Page with Grid by Chris House (@chrishouse) .

补充:基本布局代码

相关推荐:

Grid布局方式的实例详解

Grid布局方式的实例详解

Grid布局方式的实例详解

以上就是CSS使用Grid布局构建网站首页的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2900340.html

(0)
上一篇 2025年3月10日 23:56:58
下一篇 2025年3月10日 23:57:08

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • CSS的经典三栏布局如何实现

    这次给大家带来css的经典三栏布局如何实现,实现css的经典三栏布局的注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了CSS经典三栏布局方案,分享给大家,也给自己做个笔记,具体如下: 三栏布局,顾名思义就是两边固定,中间自适应。…

    编程技术 2025年3月10日
    200
  • css3中的渐进增强和优雅降级如何使用

    这次给大家带来css3中的渐进增强和优雅降级如何使用,使用css3中的渐进增强和优雅降级的注意事项有哪些,下面就是实战案例,一起来看一下。 渐进增强和优雅降级这两个概念是在 CSS3 出现之后火起来的。由于低级浏览器不支持 CSS3,但是 …

    编程技术 2025年3月10日
    200
  • css怎么做出六边形图片

    这次给大家带来css怎么做出六边形图片,css做出六边形图片的注意事项有哪些,下面就是实战案例,一起来看一下。 用简单的div配合伪元素,即可‘画出’这幅六边形图片,原理是三个相同宽高的div,通过定位旋转拼合成一个六边形,再利用背景图层叠…

    编程技术 2025年3月10日
    200
  • CSS代码重构详解

    本文主要介绍css代码重构,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 1. 重构和架构 重构是指在不改变代码行为的前提下,重写代码,使其更加简洁、易于复用。 架构是指软件项目的各个不同部…

    编程技术 2025年3月10日
    200
  • CSS和JS实现唯美星空轨迹运动效果

    本文主要和大家分享一个使用css+js实现的唯美星空轨迹运动效果,效果非常逼真,下面小编给大家带来了实例代码,需要的朋友参考下,希望能帮助到大家。 先给大家分享效果图:   给大家分享一个使用CSS+JS实现的唯美星空轨迹运动效果, 这样的…

    2025年3月10日
    200
  • CSS选择器字段解析的实现方法

    根据上面所学的css基础语法知识,现在来实现字段的解析。首先还是解析标题。打开网页开发者工具,找到标题所对应的源代码。本文主要介绍了css选择器实现字段解析的相关资料,需要的朋友可以参考下,希望能帮助到大家 发现是在p class=&#82…

    2025年3月10日 编程技术
    200
  • CSS如何实现Tab页切换的代码分享

    tab页面切换的功能我们已经和大家分享过很多,本文我们主要和大家绍css实现tab页切换实例代码,需要的朋友可以参考下,希望能帮助到大家。 1.hover 移入其父元素.navI时,触发鼠标的hover态,给父元素添加样式为position…

    编程技术 2025年3月10日
    200
  • CSS里的BFC和IFC的用法实例分析

    之前一直听到有人提到 css里的bfc,正巧在 ife的练习里遇到了外边距折叠的问题,所以正好弄清楚bfc的机制。 (参考来源 见文末的 reference) 本文主要和大家介绍CSS里的BFC和IFC的用法的相关资料,小编觉得挺不错的,现…

    2025年3月10日 编程技术
    200
  • CSS定位实例讲解

    本文主要和大家介绍css定位的教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 1.文档流 简单说就是元素按照其在 HTML 中的位置顺序决定排布的过程。HTML的布局机制就是用文档流模型…

    编程技术 2025年3月10日
    200
  • CSS圆形缩放动画实现代码分享

    最近在做公司的登录页,ue同学希望第三方登录的图标在hover的时候有一个圆形的缩放效果(原话是波纹效果-_-||),效果参考腾讯新闻和网易新闻的分享按钮。 本文主要和大家介绍CSS圆形缩放动画简单实现的相关资料,小编觉得挺不错的,现在分享…

    2025年3月10日
    200

发表回复

登录后才能评论