CSS Grid Layout是一种允许创建网格的W3C技术。它不需要使用浮动,表格,绝对定位甚至flexbox(另一种CSS3技术)来构建各种网格,从简单到复杂。一般情况下,请勿将此标记用于CSS网格系统。
我正在尝试制作一个 CSS 网格,将单元格均匀地分布在可用行中,以便最后一行不会大部分为空。单元格的数量是可变的,但单元格的宽度是固定的。容器
我需要制作 4x2 网格,并使其中的每个单元格的高度和宽度相等,到目前为止,我已经取得了一些成功,但无论我做什么,当我放入稍大的子元素时,单元格都会拉伸......
是否可以定义一个具有最大列数的网格,但允许元素在屏幕宽度变化时换行到新行? 我已经实现了允许行换行到新的类...
我正在显示动态框网格。 我正在使用 grid-template-columns: Repeat(auto-fit, minmax(80px, 1fr));自动将它们生成为网格的列。 它工作得很好,但是,正如你所...
CSS 网格:重复+自动调整+最小最大:如何平衡行项目数以填充空白?
我正在显示动态框网格。 我正在使用 grid-template-columns: Repeat(auto-fit, minmax(80px, 1fr));自动将它们生成为网格的列。 它工作得很好,但是,正如你所...
如何动态调整卡片数量可变的记忆游戏的 CSS 网格布局,同时保持响应式设计?
我正在构建一个记忆游戏,想要动态调整 CSS 网格布局以容纳可变数量的卡片。挑战在于确保卡片尺寸保持一致,无论......
我在使用媒体查询在较小的设备(最大宽度:600px)上禁用/删除网格时遇到一些问题。 我想要的是图片消失并且网格被禁用或打开......
我正在尝试构建一个网格布局,如屏幕截图所示。 我想实现这样的布局: 第一行:两列相邻。第一列的宽度应为 660 像素。第二栏
我正在学习 html/css vanilla 设计。 我的布局应该是一个页眉、一个页脚和 3 列,填充所有空间,无论其内容如何。 我正在考虑基于网格的 3 列布局,并且
我正在学习 html/css vanilla 设计。 我的布局应该是一个页眉、一个页脚和 3 列,填充所有空间,无论其内容如何。 我正在考虑基于网格的 3 列布局,并且
我的网格可以有不同高度的单元格内容,每行三个单元格,行高会增长以匹配最高的单元格内容,但不应低于网格宽度的1/3(基本上意味着......
我怎样才能专门从CSS网格/子网格中“排除”一个元素,或者将其正确定位在嵌套网格的复杂纠缠中......
* { 轮廓:1px 实心 rgba(255, 0, 0, .2); } 奥尔{ *:不是(李){ 网格区域:无; /* 嗯...这是不对的*/ } 填充:0; 列表样式:无; 显示:网格; 网格模板co...
如何从 css 网格/子网格中具体“排除”某个元素,或将其正确定位在复杂的嵌套网格中......
* { 轮廓:1px 实心 rgba(255, 0, 0, .2); } 奥尔{ *:不是(李){ 网格区域:无; /* 嗯...这是不对的*/ } 填充:0; 列表样式:无; 显示:网格; 网格-
我有一个 SPA,其中主视图是 HTML 主体中的标题、导航栏和响应式内容。 内容包含一个或多个(我已将它们交换为并且... 我有一个 SPA,其中主视图是 HTML main 正文中的标题、导航栏和响应式内容。 内容包含一个或多个<article>(我已将它们交换为<div>,没有区别), 当内容足够多(~100 个字符或更多)时,文章会从左到右正确显示 并响应屏幕大小调整。 但是当他们只有少量内容时,他们就变得合理了。 不起作用 - 右对齐(每篇文章中都有少量内容): 工作正常 - 左对齐(每篇文章内容较大): 这是复制问题的 HTML 和 CSS 的简化版本(我删除了侧面导航栏,这使得 行为没有区别。 这些示例显示了问题 - 使用 lorum ipsum 文本填写 <p>...</p> 内容以 看到问题消失。 :root{ --base-clr: #11121a; --header-clr: #8a918c; --header-text-clr: #2d302e; --line-clr: #42434a; --hover-clr: #222533; --text-clr: #e6e6ef; --accent-clr: #5e63ff; --secondary-text-clr: #b0b3c1; --header-bar-height: 40px; } *{ margin: 0; padding: 0; } html{ font-family: Poppins, 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.5rem; } body{ min-height: 100vh; min-height: 100dvh; background-color: var(--base-clr); color: var(--text-clr); } #spa { display: grid; grid-template-areas: "header navbar content"; grid-auto-flow: column; grid-template-columns: auto 1fr; } main{ grid-area: content; padding: min(30px, 7%); min-height: calc(100vh - var(--header-bar-height)); } main p{ color: var(--secondary-text-clr); margin-top: 5px; margin-bottom: 15px; } article{ border: 1px solid var(--line-clr); box-shadow: 2px 2px 6px 0px rgba(0, 0, 0, 0.3); border-radius: 1em; margin-bottom: 20px; padding: min(3em, 15%); h2, p { margin-top: 1em } } <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>GridCss</title> <link href="./app.css" rel="stylesheet"/> </head> <body> <div id="app"> <div id="spa"> <header> Header </header> <main> <div class="grid"> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3>Seamlessly visualize quality</h3> <p>small text</p> <button>Here's why</button> </div> </article> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3> Seamlessly visualize quality</h3> <p>tiny</p> <button>Here's why</button> </div> </article> </div> </main> </div> </div> </body> </html> 编辑: @pr0f3ss0r 的解决方案已经解决了这个主要问题,但现在还有一个次要问题。他们建议删除外部 <spa> 包装器和 CSS,但如果没有这些,页面会将 display: block; 传播到 <main> 代码,这具有将内容推送到侧栏下方的效果。 这是没有 <spa> 包装器和 CSS 的情况: 我可以通过重新引入包装器并设置其 display: grid;... 来解决这个问题 这就是为什么我认为网格需要位于外部对象上,因为它必须设置三个内容的位置;标题、导航栏和主要 编辑2:添加了第二个代码片段 原始右对齐问题已修复,但主要内容显示在 100vh 视口窗口下方。 :root{ --base-clr: #11121a; --header-clr: #8a918c; --header-text-clr: #2d302e; --line-clr: #42434a; --hover-clr: #222533; --text-clr: #e6e6ef; --accent-clr: #5e63ff; --secondary-text-clr: #b0b3c1; --header-bar-height: 40px; } *{ margin: 0; padding: 0; } html{ font-family: Poppins, 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.5rem; } body{ min-height: 100vh; min-height: 100dvh; background-color: var(--base-clr); color: var(--text-clr); } .grid{ display: grid; grid-template-areas: "header navbar content"; } header{ grid-area: header; height: var(--header-bar-height); width: 100%; border-right: none; border-top: 1px solid var(--line-clr); padding: 0; margin-bottom: 3px; position: fixed; top: 0; background-color: var(--header-clr); color: var(--header-text-clr); } main{ grid-template-columns: auto 1fr; display:flex; grid-area: content; padding: min(30px, 7%); box-sizing:border-box; } main p{ color: var(--secondary-text-clr); margin-top: 5px; margin-bottom: 15px; } article{ border: 1px solid var(--line-clr); box-shadow: 2px 2px 6px 0px rgba(0, 0, 0, 0.3); border-radius: 1em; margin-bottom: 20px; padding: min(3em, 15%); h2, p { margin-top: 1em } } #sidebar{ grid-area: navbar; box-sizing: border-box; height: calc(100vh - var(--header-bar-height)); width: 250px; padding: 5px 1em; background-color: var(--base-clr); border-right: 1px solid var(--line-clr); position: sticky; top: var(--header-bar-height); align-self: start; transition: 300ms ease-in-out; overflow: hidden; text-wrap: nowrap; } #sidebar.close{ padding: 5px; width: 60px; } #sidebar ul{ list-style: none; } #sidebar > ul > li:first-child{ display: flex; justify-content: flex-end; margin-bottom: 16px; .logo{ font-weight: 600; } } #sidebar ul li.active a{ color: var(--accent-clr); svg{ fill: var(--accent-clr); } } #sidebar a, #sidebar .nav-dropdown-btn, #sidebar .logo{ border-radius: .5em; padding: .85em; text-decoration: none; color: var(--text-clr); display: flex; align-items: center; gap: 1em; } .nav-dropdown-btn{ width: 100%; text-align: left; background: none; border: none; font: inherit; cursor: pointer; } #sidebar svg{ flex-shrink: 0; fill: var(--text-clr); } #sidebar a span, #sidebar .nav-dropdown-btn span{ flex-grow: 1; } #sidebar a:hover, #sidebar .nav-dropdown-btn:hover{ background-color: var(--hover-clr); } #sidebar .sub-menu{ display: grid; grid-template-rows: 0fr; transition: 300ms ease-in-out; > div{ overflow: hidden; } } #sidebar .sub-menu.show{ grid-template-rows: 1fr; } .nav-dropdown-btn svg{ transition: 200ms ease; } .rotate svg:last-child{ rotate: 180deg; } #sidebar .sub-menu a{ padding-left: 2em; } #sidebar-toggle-btn{ margin-left: auto; padding: 1em; border: none; border-radius: .5em; background: none; cursor: pointer; svg{ transition: rotate 150ms ease; } } #sidebar-toggle-btn:hover{ background-color: var(--hover-clr); } <header> Header </header> <nav id="sidebar"> <ul> <li> <span class="logo">coding2go</span> <button onclick=toggleSidebar() id="sidebar-toggle-btn"> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"> <path d="m313-480 155 156q11 11 11.5 27.5T468-268q-11 11-28 11t-28-11L228-452q-6-6-8.5-13t-2.5-15q0-8 2.5-15t8.5-13l184-184q11-11 27.5-11.5T468-692q11 11 11 28t-11 28L313-480Zm264 0 155 156q11 11 11.5 27.5T732-268q-11 11-28 11t-28-11L492-452q-6-6-8.5-13t-2.5-15q0-8 2.5-15t8.5-13l184-184q11-11 27.5-11.5T732-692q11 11 11 28t-11 28L577-480Z"/> </svg> </button> </li> <li class="active"> <a href="/"> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"> <path d="M240-200h120v-200q0-17 11.5-28.5T400-440h160q17 0 28.5 11.5T600-400v200h120v-360L480-740 240-560v360Zm-80 0v-360q0-19 8.5-36t23.5-28l240-180q21-16 48-16t48 16l240 180q15 11 23.5 28t8.5 36v360q0 33-23.5 56.5T720-120H560q-17 0-28.5-11.5T520-160v-200h-80v200q0 17-11.5 28.5T400-120H240q-33 0-56.5-23.5T160-200Zm320-270Z"/> </svg> <span>Home</span> </a> </li> <li> <a href="/playerDetails"> <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"> <path d="M480-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47ZM160-240v-32q0-34 17.5-62.5T224-378q62-31 126-46.5T480-440q66 0 130 15.5T736-378q29 15 46.5 43.5T800-272v32q0 33-23.5 56.5T720-160H240q-33 0-56.5-23.5T160-240Zm80 0h480v-32q0-11-5.5-20T700-306q-54-27-109-40.5T480-360q-56 0-111 13.5T260-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T560-640q0-33-23.5-56.5T480-720q-33 0-56.5 23.5T400-640q0 33 23.5 56.5T480-560Zm0-80Zm0 400Z"/> </svg> <span>Profile</span> </a> </li> </ul> </nav> <main> <div class="grid"> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3>Seamlessly visualize quality</h3> <p>Hello</p> <button>Here's why</button> </div> </article> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3> Seamlessly visualize quality</h3> <p>Hello</p> <button>Here's why</button> </div> </article> </div> </main> :root{ --base-clr: #11121a; --header-clr: #8a918c; --header-text-clr: #2d302e; --line-clr: #42434a; --hover-clr: #222533; --text-clr: #e6e6ef; --accent-clr: #5e63ff; --secondary-text-clr: #b0b3c1; --header-bar-height: 40px; } *{ margin: 0; padding: 0; } html{ font-family: Poppins, 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.5rem; } body{ min-height: 100vh; min-height: 100dvh; background-color: var(--base-clr); color: var(--text-clr); } .grid{ display: grid; padding:auto; grid-template-areas: "header navbar content"; } main{ grid-template-columns: auto 1fr; display:flex; grid-area: content; padding: min(30px, 7%); box-sizing:border-box; } main p{ color: var(--secondary-text-clr); margin-top: 5px; margin-bottom: 15px; } article{ border: 1px solid var(--line-clr); box-shadow: 2px 2px 6px 0px rgba(0, 0, 0, 0.3); border-radius: 1em; margin-bottom: 20px; padding: min(3em, 15%); h2, p { margin-top: 1em } } <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>GridCss</title> <link href="./app.css" rel="stylesheet"/> </head> <body> <header> Header </header> <main> <div class="grid"> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3>Seamlessly visualize quality</h3> <p>small text</p> <button>Here's why</button> </div> </article> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3> Seamlessly visualize quality</h3> <p>tiny</p> <button>Here's why</button> </div> </article> </div> </main> </body> </html> 删除不必要的包装,例如“spa”和“app”。在 'grid' 类上使用 display:grid 使 div 并排站立。 添加更多内容时,在“主”包装器上使用 display:flex 来展开框。
我有一个 SPA,其中主视图是 HTML 主体中的标题、导航栏和响应式内容。 内容包含一个或多个(我已将它们交换为并且... 我有一个 SPA,其中主视图是 HTML main 正文中的标题、导航栏和响应式内容。 内容包含一个或多个<article>(我已将它们交换为<div>,没有区别), 当内容足够多(~100 个字符或更多)时,文章会从左到右正确显示 并响应屏幕大小调整。 但是当他们只有少量内容时,他们就变得合理了。 不起作用 - 右对齐(每篇文章中都有少量内容): 工作正常 - 左对齐(每篇文章内容较大): 这是复制问题的 HTML 和 CSS 的简化版本(我删除了侧面导航栏,这使得 行为没有区别。 这些示例显示了问题 - 使用 lorum ipsum 文本填写 <p>...</p> 内容以 看到问题消失。 :root{ --base-clr: #11121a; --header-clr: #8a918c; --header-text-clr: #2d302e; --line-clr: #42434a; --hover-clr: #222533; --text-clr: #e6e6ef; --accent-clr: #5e63ff; --secondary-text-clr: #b0b3c1; --header-bar-height: 40px; } *{ margin: 0; padding: 0; } html{ font-family: Poppins, 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.5rem; } body{ min-height: 100vh; min-height: 100dvh; background-color: var(--base-clr); color: var(--text-clr); } #spa { display: grid; grid-template-areas: "header navbar content"; grid-auto-flow: column; grid-template-columns: auto 1fr; } main{ grid-area: content; padding: min(30px, 7%); min-height: calc(100vh - var(--header-bar-height)); } main p{ color: var(--secondary-text-clr); margin-top: 5px; margin-bottom: 15px; } article{ border: 1px solid var(--line-clr); box-shadow: 2px 2px 6px 0px rgba(0, 0, 0, 0.3); border-radius: 1em; margin-bottom: 20px; padding: min(3em, 15%); h2, p { margin-top: 1em } } <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>GridCss</title> <link href="./app.css" rel="stylesheet"/> </head> <body> <div id="app"> <div id="spa"> <header> Header </header> <main> <div class="grid"> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3>Seamlessly visualize quality</h3> <p>small text</p> <button>Here's why</button> </div> </article> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3> Seamlessly visualize quality</h3> <p>tiny</p> <button>Here's why</button> </div> </article> </div> </main> </div> </div> </body> </html> :root{ --base-clr: #11121a; --header-clr: #8a918c; --header-text-clr: #2d302e; --line-clr: #42434a; --hover-clr: #222533; --text-clr: #e6e6ef; --accent-clr: #5e63ff; --secondary-text-clr: #b0b3c1; --header-bar-height: 40px; } *{ margin: 0; padding: 0; } html{ font-family: Poppins, 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; line-height: 1.5rem; } body{ min-height: 100vh; min-height: 100dvh; background-color: var(--base-clr); color: var(--text-clr); } .grid{ display: grid; padding:auto; grid-template-areas: "header navbar content"; } main{ grid-template-columns: auto 1fr; display:flex; grid-area: content; padding: min(30px, 7%); box-sizing:border-box; } main p{ color: var(--secondary-text-clr); margin-top: 5px; margin-bottom: 15px; } article{ border: 1px solid var(--line-clr); box-shadow: 2px 2px 6px 0px rgba(0, 0, 0, 0.3); border-radius: 1em; margin-bottom: 20px; padding: min(3em, 15%); h2, p { margin-top: 1em } } <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <title>GridCss</title> <link href="./app.css" rel="stylesheet"/> </head> <body> <header> Header </header> <main> <div class="grid"> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3>Seamlessly visualize quality</h3> <p>small text</p> <button>Here's why</button> </div> </article> <article> <img src="https://www.mig-welding.co.uk/forum/data/avatars/s/40/40757.jpg" alt="Sample photo"> <div class="text"> <h3> Seamlessly visualize quality</h3> <p>tiny</p> <button>Here's why</button> </div> </article> </div> </main> </body> </html> 删除不必要的包装,例如“spa”和“app”
以编程方式更改 CSS 网格项目位置会神秘地滚动页面。为什么?我可以阻止这种行为吗?
晚上好, 我正在尝试创建一个网格系统,其中网格中的项目可以通过编程方式移动。当在 Y 轴上移动网格项时(通过更新其 grid-row 属性),文档
我正在尝试设计一种 CSS 样式,其中有两列,并且项目首先从左列向下流动,然后再从右列顶部开始。我可以让它为一组工作...
使用grid-auto-flow:column时如何拥有动态行?
嗯,这是目前人类的问题,因为人工智能无法回答。看来它只是没有完全理解CSS网格机制。所以我在这里: ul{ 显示:网格; 网格自动f...
我有一个要显示的动态项目列表。我希望它们填充网格的第一行,根据需要添加列,直到该行适合容器。接下来,它应该填充...
我正在设计一个响应式计算器,我想简化用于排列按钮的CSS代码。 目前,我正在使用 CSS Grid 来处理布局,但代码变得很长,因为......