CSS中的栅格布局

这篇具有很好参考价值的文章主要介绍了CSS中的栅格布局。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CSS中的栅格布局

在写前端项目的时候,我之前一直习惯使用flex布局,flex布局写起来比较随心,几乎可以实现任意形式的页面布局。不过自从B占看到某位大佬的grid布局后,发现布局居然还可以这么玩,正好自己在写一个vue3的项目,需要写几个大屏展示方案,用栅格布局实现了一下,发现真香

看一下最后的实现效果,真实效果比这个好很多,因为有数据和地图,但这里主要记录怎么使用栅格布局,所以我只将精髓

CSS中的栅格布局,web开发,css,前端

页面分上中下三部分,整体使用flex布局,排列方向是column。上面是标题,中间是数据看板,下面是展示的核心内容

上面也是用的flex布局,中间和下面都是grid布局

先看下完整代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>网格布局</title>
  <style>
    .main-screen {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
    }
    .header {
      width: 100%;
      height: 80px;
      background-color: #030829;
      display: flex;
      align-items: center;
      justify-content: space-between;
    }
    .time {
      color: #fff;
      margin-left: 20px;
    }

    .tip {
      color: #fff;
      margin-right: 20px;
      display: flex;
      justify-content: center;
      align-items: center;
    }
    .header-title {
      width: 30%;
      text-align: center;
      color: #FFFFff;
      background-size: 100% 100%;
      height: 80px;
      font-family: "微软雅黑" !important;
    }
    h2 {
      margin-top: 16px !important;
      font-size: 28px !important;
    }
    .content {
      width: 100%;
      background-color: #081832;
      padding-top: 10px;
      padding-bottom: 5px;
      height: 950px;
      display: flex;
      flex-direction: column;
    }
    .numeric {
      padding: 10px;
      display: grid;
      grid-template-columns: 1fr 1fr 1fr;
      gap: 30px;
      // background-color: #034c6a;
      height: 15%;
      width: 100%;
    }
    .chart {
      height: 85%;
      width: 100%;
      // border: 1px solid #fff;
      display: grid;
      grid-template-columns: repeat(10, 1fr);
      gap: 10px;
      padding: 10px;
    }
    .box {
      box-shadow: -10px 0px 15px #034c6a inset,
      0px -10px 15px #034c6a inset,
      10px 0px 15px #034c6a inset,
      0px 10px 15px #034c6a inset;
      border: 1px solid #034c6a;
      box-sizing: border-box;
      margin-top: 10px;
      position: relative;
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
    }
    .title {
      background-color: #034c6a;
      border-radius: 18px;
      position: absolute;
      height: 35px;
      width: 60%;
      top: -15px;
      color: #ffffff;
      font-weight: bold;
      font-size: 16px;
      left: 20%;
      line-height: 35px;
      text-align: center;
    }
    .top-left {
      grid-row: 1/4;
      grid-column: 1/3;
    }

    .bottom-left {
      grid-row: 4/7;
      grid-column: 1/3;
    }

    .middle-map-left {
      grid-row: 1/5;
      grid-column: 3/6;
    }

    .middle-map-right {
      grid-row: 1/5;
      grid-column: 6/9;
    }

    .middle-bottom-left {
      grid-row: 5/7;
      grid-column: 3/5;
    }

    .middle-bottom-bottom {
      grid-row: 5/7;
      grid-column: 5/7;
    }

    .middle-bottom-right {
      grid-row: 5/7;
      grid-column: 7/9;
    }

    .right-top {
      grid-row: 1/4;
      grid-column: 9/11;
    }

    .right-bottom {
      grid-row: 4/7;
      grid-column: 9/11;
    }

    .numeric-box {
      background-color: #034c6a;
      border-radius: 8px;
      height: 100%;
      display: flex;
      justify-content: space-around;
      align-items: center;
    }

  </style>
</head>
<body style="margin: 0; padding: 0;">
  <div class="main-screen">
    <div class="header">
      <div class="time">2023-10-27 16:59:59</div>
      <div class="header-title">
        <h2><strong>无锡市今日数据看板</strong></h2>
      </div>
      <div class="tip">
        <span>提示:数据每小时更新</span>
      </div>
    </div>
    <div class="content">
      <div class="numeric">
        <div class="numeric-box"></div>
        <div class="numeric-box"></div>
        <div class="numeric-box"></div>
      </div>

      <div class="chart">
        <div class="box top-left">
          <div class="title">江阴市</div>

        </div>
        <div class="box bottom-left">
          <div class="title">宜兴市</div>

        </div>
        <div class="box middle-map-left">
          <div class="title">今日地图</div>

        </div>
        <div class="box middle-map-right">
          <div class="title">当前地图</div>

        </div>
        <div class="box middle-bottom-left">
          <div class="title">滨湖区</div>

        </div>
        <div class="box middle-bottom-bottom">
          <div class="title">新吴区</div>

        </div>
        <div class="box middle-bottom-right">
          <div class="title">梁溪区</div>

        </div>
        <div class="box right-top">
          <div class="title">锡山区</div>

        </div>
        <div class="box right-bottom">
          <div class="title">惠山区</div>

        </div>
      </div>
    </div>
  </div>
</body>
</html>

先看中间的三个数据展示面板的网格布局,样式代码如下

    .numeric {
      padding: 10px;
      display: grid;
      grid-template-columns: 1fr 1fr 1fr;
      gap: 30px;
      // background-color: #034c6a;
      height: 15%;
      width: 100%;
    }
    .numeric-box {
      background-color: #034c6a;
      border-radius: 8px;
      height: 100%;
      display: flex;
      justify-content: space-around;
      align-items: center;
    }

主要看上面的numeric,这是一个很基础的网格布局,核心就是设置grid-template-columns,因为有3列,所以写三个1fr就行了,然后就是样式的美化,gap是样式之间的间隔

下面来看比较复杂的grid布局

下面那部分内容,我要展示7个小的方块,2个大一点的方块,大的方块要放在中间,为了布局好看点,我进行了如下的设计:

CSS中的栅格布局,web开发,css,前端

每个方块,都有一个box属性,就是设置背景颜色和阴影的。其他的属性直接在图上标注了。

那现在的重点就是如何用栅格布局来设计这种响应式的大屏页面了,根据代码:

首先看容器的样式

    .chart {
      height: 85%;
      width: 100%;
      // border: 1px solid #fff;
      display: grid;
      grid-template-columns: repeat(10, 1fr);
      gap: 10px;
      padding: 10px;
    }

关键的代码就是设置了grid-template-columns: repeat(10, 1fr);意思是横向上重复10列,也就是有10个网格,这个10如何而来,自然是根据上面的设计,从B到K正好10格。

接下来看每个方块是怎么设置的

 	.top-left {
      grid-row: 1/4;
      grid-column: 1/3;
    }

    .bottom-left {
      grid-row: 4/7;
      grid-column: 1/3;
    }

    .middle-map-left {
      grid-row: 1/5;
      grid-column: 3/6;
    }

    .middle-map-right {
      grid-row: 1/5;
      grid-column: 6/9;
    }

    .middle-bottom-left {
      grid-row: 5/7;
      grid-column: 3/5;
    }

    .middle-bottom-bottom {
      grid-row: 5/7;
      grid-column: 5/7;
    }

    .middle-bottom-right {
      grid-row: 5/7;
      grid-column: 7/9;
    }

    .right-top {
      grid-row: 1/4;
      grid-column: 9/11;
    }

    .right-bottom {
      grid-row: 4/7;
      grid-column: 9/11;
    }

其实都是设置了2个属性

  • grid-row,这个属性表示的意思是,元素的行占位,比如1/4,其中1表达的意思是从第1行开始,4表达的意思是占3行,1+3=4,再比如5/7,5表示从第5行开始,占2行,5+2=7
  • grid-column和grid-row一样

所以关键就是设计好上面那个页面,然后根据这两个参数,就能完成一个响应式的grid部局了,比自己手写flex布局效果要好得多

还有一些细节,就是网格之间还会有间距,可以用gap来设置文章来源地址https://www.toymoban.com/news/detail-734442.html

到了这里,关于CSS中的栅格布局的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [HTML]Web前端开发技术11(HTML5、CSS3、JavaScript )页面布局设计 “三行模式”或“三列模式”“三行二列”“三行三列”模式 多行多列复杂模式水平导航菜单——喵喵画网页

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,佬佬会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 页面布局设计 “三行模式”或“三列模式” “三行二列”、“三行三列”模式 多行多列复杂模式 导

    2024年02月02日
    浏览(61)
  • Web前端开发:HTML、CSS

    在介绍Web网站工作流程的时候提到, 前端开发,主要的职责就是将数据以好看的样式呈现出来,说白了,就是开发网页程序 ,如下图所示: 1.   网页有哪些部分组成 ? 文字、图片、音频、视频、超链接、表格等等。 2.  我们看到的网页,背后的本质是什么 ? 程序员写的前端

    2023年04月18日
    浏览(41)
  • 【Web前端开发基础】CSS的盒子模型

    能够认识不同选择器的优先级公式 能够进行CSS权重叠加计算,分析并解决CSS 冲突问题 能够认识盒子模型的组成部分 能够掌握盒子模型的边框、内边距、外边距的作用及简写形式 能够计算盒子的实际大小 能够了解外边距折叠现象,并知道如何解决盒子塌陷问题 2.1 CSS三大特

    2024年01月22日
    浏览(45)
  • 【Web前端开发基础】CSS的定位和装饰

    能够说出 定位 的常见应用场景 能够说出 不同定位方式 的特点 能够使用 子绝父相 完成元素水平垂直案例 能够写出三种常见的 光标类型 (cursor) 能够使用 圆角边框 属性完成 正圆 和 胶囊按钮 效果 能够说出 display 和 visibility 让 元素本身隐藏 的区别 2.1 定位 目标:能够说

    2024年01月23日
    浏览(44)
  • 【web前端开发】CSS最常用的11种选择器

    CSS (Cascading Style Sheets,层叠样式表),是一种用来为结构化文档(如 HTML 文档或 XML 应用)添加样式(字体、间距和颜色等)的计算机语言,CSS 文件扩展名为 .css。 CSS的作用:给HTML里面的标签设置样式 简单点来说就是让HTML的页面变得更加好看 CSS是写在 style 标签里面的,而st

    2023年04月09日
    浏览(41)
  • 【前端|CSS系列第4篇】CSS布局之网格布局

    最近在做的一个项目前台首页有一个展示词条的功能,每一个词条都以一个固定大小的词条卡片进行展示,要将所有的词条卡片展示出来,大概是下面这种布局 每一行的卡片数目会随着屏幕大小自动变化,并且希望整个卡片区域周围不要有太大的留白,可是由于本人css学的并

    2024年02月16日
    浏览(40)
  • 【Web前端开发基础】CSS3之空间转换和动画

    目标:使用transform属性实现元素在空间内的位移、旋转、缩放等效果 1.1 概述 空间:是从坐标轴角度定义的。x 、y 和z三条坐标轴构成了一个立体空间,z轴位置与视线方向相同 空间转换也叫3D转换 属性:transform 2D转换能够改变元素X轴和Y轴方向特性,3D转换还能改变Z轴方向特

    2024年01月25日
    浏览(52)
  • 【Web前端开发基础】CSS3之Web字体、字体图标、平面转换、渐变

    1.1 Web字体概述 每种字体都对应着相应的字体文件,没有 @font-face 规则之前,客户端是否能够正确显示 fontfamily 规定的字体,是由该字体的文件是否预装在客户端决定的。而 @font-face 规则可以将字体文件存放在服务器端,渲染页面时客户端请求从服务器端下载改字体文件进行

    2024年01月25日
    浏览(63)
  • web前端开发中的响应式布局设计是什么意思?

    响应式布局是指网页设计和开发中的一种技术方法,旨在使网页能够在不同大小的屏幕和设备上都能良好地显示和交互。这种方法使得网页可以自动适应不同的屏幕尺寸,包括桌面电脑、平板电脑和手机等。 在Web前端开发中,响应式布局通常使用CSS(层叠样式表)来实现。以

    2024年02月11日
    浏览(44)
  • 响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 第1章 HTML5+CSS3初体验 项目1-1 三栏布局页面

    三栏布局是一种常用的网页布局结构。 除了头部区域、底部区域外,中间的区域(主体区域)划分成了三个栏目,分别是左侧边栏、内容区域和右侧边栏,这三个栏目就构成了三栏布局。当浏览器的宽度发声变化时,页面中左侧边栏和右侧边栏的宽度固定不变,而内容区域的

    2024年01月17日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包