首页 > 其他分享 >grid布局

grid布局

时间:2022-10-20 17:48:16浏览次数:33  
标签:布局 solid 单元格 100px 1px grid template

概述

flex布局是一维布局,grid是二位布局。
flex考虑的是项目按行或列布局,grid需要同时考虑行和列

  • 应用场景

    左边的列表用flex布局实现更加简单,而右边整体的布局由grid来实现更适合。

grid容器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
        }

        .item{
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
    </div>
</body>
</html>

容器属性

设置行列

.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;/*列,3列都是100px,同时也是单元格宽的尺寸*/
            grid-template-rows: 100px 100px 100px;/*行,3行都是100px,同时也是单元格高的尺寸*/
        }

.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 2fr 1fr;/*fr是比列,按照比例填满整个容器*/
            grid-template-rows: 100px 100px 3fr;
        }

排列方式grid-auto-flow

.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 2fr 1fr;
            grid-template-rows: 100px 100px 3fr;
            grid-auto-flow: column;/*默认是横向排列row,纵向排列column不常用*/
        }

溢出尺寸

初始状况

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
            /*3行3列共九个,但共有11个单元格,溢出了2个
            现在是默认的横向排列,所以溢出的单元格在第4行显示*/
        }

        .item{
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
        <div class="item">10</div>
        <div class="item">11</div>
    </div>
</body>
</html>

溢出行的尺寸grid-auto-rows

.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
            grid-auto-rows: 50px;/*溢出的单元格的行高50px*/
        }

溢出列的尺寸grid-auto-columns

.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
            grid-auto-flow: column;/*纵向排列*/
            /*现在是横向排列,所以溢出的单元格在第4列显示*/
            grid-auto-columns: 50px;/*溢出的单元格的列宽50px*/
        }

容器对齐方式

横向对齐方式justify-content

以center举例,其他的stretch、start、end就不赘述了

.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
           justify-content: center;
        }

纵向对齐方式align-content

以center举例,其他的stretch、start、end就不赘述了

.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
           align-content: center;
        }

所有单元格的对齐方式

横向对齐justify-items

  • 默认stretch
 .container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
        }

  • start:从单元格内开始的位置显示
.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
            justify-items: start;
        }

  • center:在单元格的居中位置显示
justify-items: center;

  • end:在单元格结束的位置显示
justify-items: end;

纵向对齐align-items

  • stretch:默认

  • start:从单元格内开始的位置显示

.container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
            align-items: start;
        }

  • center:在单元格的居中位置显示
align-items: center;

  • end:在单元格结束的位置显示
align-items: end;

项目属性


通过这些线实现对单元格的操作

grid-column

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
        }

        .item{
            border: 1px solid red;
        }

        .first{
            
            /* grid-column-start: 1;/*以列的第一条线开始
            grid-column-end: 3;/*以列的第三条线结束
            这样就让单元格1宽度扩大了,看上去像合并单元格
            但并不是这么回事,因为单元格9会溢出 */
           
            grid-column: 1/3;/*简写*/
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item first">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
    </div>
</body>
</html>

grid-row

.first{
            
            /* grid-row-start: 1;/*以行的第一条线开始
            grid-row-end: 3;/*以行的第三条线结束*/
           
            grid-row: 1/3;/*简写*/
        }

  • 还可以调换位置
.first{
            grid-row: 2/3;
            grid-column: 2/3;
        }

项目的对齐方式

以center为例

项目的横向对齐方式justify-self

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .container{
            width: 800px;
            height: 500px;
            display: grid;
            border: 1px solid blue;
            grid-template-columns: 100px 100px 100px;
            grid-template-rows: 100px 100px 100px;
        }

        .item{
            border: 1px solid red;
        }

        .first{
            justify-self: center;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="item first">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
    </div>
</body>
</html>

项目的纵向对齐方式align-self

.first{
            align-self: center;
        }

练习


用grid布局实现网页的布局
header和footer各占了1行4列
docs、blogs、videos各占了1行3列
aside占了3行1列

标签:布局,solid,单元格,100px,1px,grid,template
From: https://www.cnblogs.com/ben10044/p/16810703.html

相关文章

  • jqGrid通用编辑规则
    一个将数据显示在grid中主要的原因是为了快速容易的编辑它,jqGrid支持3种编辑方法jqGrid单元格编辑配置,事件及方法::编辑表格中的单元格jqGrid行编辑配置:同时编辑一行中......
  • Kotlin实现流式布局
    本篇旨再使用kotlin代码实现TextView的流式排版,采用继承于ViewGroup的形式进行构建。流式布局采用的方式是由左至右,右上至下的形式。简单的理解就是textview先排满一行后,......
  • 表格布局管理器
    表格布局管理器每一个控件都是表格的一个格子,靠操纵这么个格子来管理布局。改成布局管理器<?xmlversion="1.0"encoding="utf-8"?><TableLayoutxmlns:android="http:......
  • Go 项目的文件布局
    转自kcq的https://github.com/golang-standards/project-layouthttps://github.com/golang-standards/project-layout英文版本https://github.com/golang-standards......
  • Qt -- QDockWidget嵌套布局详解-实现Visual Studio布局
    概述许多工程软件,如QtCreator,VS,matlab等,都是使用dock布局窗口,这样用户可以自定义界面,自由组合窗口。Qt的嵌套布局由QDockWidget完成,用QtCreator拖界面得到的dock布置形......
  • delphi TcxGrid自动计算
    需求:已知申购数量/单重=支数,其中[支数]为自动计算列,且[支数]字段实际存在于数据库中特殊情况:当单重为0时,支数为0当1>支数>0时,支数=......
  • delphi TcxGrid制作一个动态授权修改数据的功能
    需求明细:1.表格TV申购清单,默认OptionsData--Editing:true可写权限2.默认列属性[申购数量,单重,用途,需求日期]Options---Editing:true常规情况下,这几列......
  • 用js调试css 画出所有的css布局
    打开浏览器调试模式,在Console模式下复制下面代码执行[].forEach.call($$("*"),function(a){a.style.outline="1pxsolid#"+(~~(Math.random()*(1<<24))).toString(16)})......
  • SWT布局
    介绍不管是在Android(如果只会用Eclipse自带的可视化编辑器的话,你根本称不上是会写Android)、Swing还是SWT中,布局都是非常重要的一部分。好像NetBeans也有Swing的可视化编辑器......
  • 【Nuxt3从入门到实战】第三啪:巧用布局模板,高效开发从这里开始!
    前言大家好,我是村长,欢迎关注我的公众号村长学前端和B站Young村长!上一篇写了nuxt3路由系统,我们试用了两个重要功能:​​动态路由​​​和​​嵌套路由​​。体验便捷的同时,当......