当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何实现 grid 布局顶部对齐?

钦楚青
2024-01-10

各位好,我在用 grid 做一个页面的布局,请看代码

<div class="fruit-grid">    <div class="fruit">hello1</div>    <div class="fruit">hello2</div>    <div class="fruit">hello3</div>    <div class="fruit">hello4</div>    <div class="fruit">hello5</div>    <div class="fruit">hello6</div>    <div class="fruit">hello7</div></div>

我想实现的是一共分三列,最左边的一列是 hello1 和 hello2;中间是 3,4,5;最右侧是 6 和 7。 css 部分代码如下

.fruit-grid {  display: grid;  grid-template-columns: repeat(3, 1fr);  gap: 10px;  align-items: start;}.fruit {  width: 100%;  margin-bottom: 10px;}/* 显示在最左 */.fruit:nth-child(1),.fruit:nth-child(2) {  grid-column: 1;}/* 显示在中间 */.fruit:nth-child(3),.fruit:nth-child(4),.fruit:nth-child(5) {  grid-column: 2;}/* 显示在最右 */.fruit:nth-child(6),.fruit:nth-child(7) {  grid-column: 3;}

现在遇到的问题是,中间和右侧的内容不顶部对齐,我想要的显示形式是

1 3 6
2 4 7
5

但实际的效果是

12 3   4  5 6    7

请问这个该怎么解决,谢谢。

如上问题所说,想知道错在哪里了

共有3个答案

戚飞雨
2024-01-10

你这个描述前后有点矛盾啊

最左边的一列是 hello1 和 hello2;中间是 3,4,5;最右侧是 6 和 7
现在遇到的问题是,中间和右侧的内容不顶部对齐,我想要的显示形式是1 3 62 4 75

不应该是

1 3 62 4 7  5

.fruit-grid上添加grid-auto-flow: dense就可以了,它会使元素尽可能的使用前面空的网格,而不是产生新的。

秦时铭
2024-01-10
  <div class="parent">    <div class="div1">1</div>    <div class="div2">2</div>    <div class="div3">\3</div>    <div class="div4">4</div>    <div class="div5">5</div>    <div class="div6">6</div>    <div class="div7">7</div>  </div>
.parent {  display: grid;  grid-template-columns: repeat(3, 1fr);  grid-template-rows: repeat(3, 1fr);  grid-column-gap: 0px;  grid-row-gap: 0px;}.div1 {  grid-area: 1 / 1 / 2 / 2;}.div2 {  grid-area: 2 / 1 / 3 / 2;}.div3 {  grid-area: 1 / 2 / 2 / 3;}.div4 {  grid-area: 2 / 2 / 3 / 3;}.div5 {  grid-area: 3 / 1 / 4 / 2;}.div6 {  grid-area: 1 / 3 / 2 / 4;}.div7 {  grid-area: 2 / 3 / 3 / 4;}

image.png

丁兴德
2024-01-10

你的问题出在对齐项的理解上。你想要的布局是一个列从左到右排列,然后下一列从上到下排列,再下一列也是从上到下排列。但是,你当前的 CSS 代码将所有的列都设置为从上到下排列。

要解决这个问题,你需要将每一列的子元素设置为不同的对齐方式。在 CSS Grid 中,可以使用 align-itemsalign-self 属性来控制对齐。

以下是修改后的 CSS 代码:

.fruit-grid {  display: grid;  grid-template-columns: repeat(3, 1fr);  gap: 10px;}.fruit {  width: 100%;  margin-bottom: 10px;}/* 显示在最左 */.fruit:nth-child(1),.fruit:nth-child(2) {  grid-column: 1;  align-self: start; /* 控制这两列的对齐方式 */}/* 显示在中间 */.fruit:nth-child(3),.fruit:nth-child(4),.fruit:nth-child(5) {  grid-column: 2;  align-self: end; /* 控制这三列的对齐方式 */}/* 显示在最右 */.fruit:nth-child(6),.fruit:nth-child(7) {  grid-column: 3;  align-self: start; /* 控制这两列的对齐方式 */}

这样,每一列的子元素都会根据你指定的对齐方式进行排列,从而实现了你想要的布局效果。

 类似资料:
  • 要求是这样的(目前的话换行单选多选判断换行展示已经处理完了): 但是现在有个问题就是选项的个数问题,选项最多是9个(也就是从A~I),最少是3~4个(判断的选项就是两个,但是若遇到判断就换行了,倒是不用太操心),选项个数不固定每题的宽度就不固定,宽度不固定列数就不固定,列数有影响到了行数,但又要求每列得对齐。 大致就是: 1.选项个数不固定 2.支持横排、竖排的切换 3.每列得对齐 所以想问问各位

  • 本文向大家介绍如何实现Flex布局?相关面试题,主要包含被问及如何实现Flex布局?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 文章链接: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool(语法篇) 简单的分为容器属性和元素属性 容器的属性: flex-direction:决定主轴的方

  • 本文向大家介绍flex布局如何实现?相关面试题,主要包含被问及flex布局如何实现?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: flex 是 Flexible Box 的缩写,意为"弹性布局"。指定容器display: flex即可。 容器有以下属性:flex-direction,flex-wrap,flex-flow,justify-content,align-items,align

  • 本文向大家介绍一行JavaScript代码如何实现瀑布流布局,包括了一行JavaScript代码如何实现瀑布流布局的使用技巧和注意事项,需要的朋友参考一下 写在前面 一行 JavaScript 代码究竟可以完成什么布局?今天我们就来用一行 JavaScript 代码完成经典布局的一种,瀑布流布局。 所谓的瀑布流布局就是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动

  • Grid 宫格布局 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 该组件外层为u-grid组件包裹,通过col设置内部宫格的列数 内部通过ugrid-item组件的slot设置宫格的内容 如果不需要宫格的边框,可以设置border为false <template> <u-grid :col="3"> <u-gr

  • Grid 与 Flex 布局有一定的相似性,但是功能更加强大,学习起来也有不少难度,不过相信下面的内容会帮你更快的掌握 Grid。 1. 官方定义 通过设置 display: grid; 可以定义一个 CSS 网格。然后使用 grid-template-rows 和 grid-template-columns 属性来定义网格的 columns 和 rows。 使用这些属性定义的网格被描述为 显式网