찾다
웹 프론트엔드HTML 튜토리얼CSS Grid构建圣杯布局_html/css_WEB-ITnose

CSS 网格布局模块 ,虽然现在仍处于编译者的草案之中但是即将定稿。我们现在可以在 一些浏览器中 进行测试并可以检测其潜在的bug。

有关于CSS Grid布局模块更多的教程,可以点击这里阅读。

CSS 网格布局是真的很复杂,相较于Flexbox 更是如此。它具有17个新属性并且在如何使用CSS书写方面介绍了很多新概念。为了尝试如何使用萦绕在我脑海中的这些新规范,我决定创建一个 圣杯布局 尝试新规范工作原理。

什么是圣杯布局?

圣杯布局 是一种包括页眉、页脚和一个包含两个左右边栏的主内容区的网页布局。其布局遵循以下规则:

  • 固定宽度侧边栏自适应主内容区域
  • 中间一列应该在 标记中最先出现 ,早于两个侧边栏(但在页眉后)
  • 不管三列中包含的是什么,都应该具有 相同的高度
  • 页脚应该总是处于 浏览器视窗的底部 ,即使内容不能填满视区高度
  • 布局应该是 响应 的,在小视窗中所有的部分应该在一列中显示

大家都知道如果不使用hacks这是很难用CSS来实现的。

CSS Grid解决方案

下面是我用 CSS 网格布局想出的的解决方案。第一,标记--

<body class="hg">      <header class="hg__header">Title</header>    <main class="hg__main">Content</main>    <aside class="hg__left">Menu</aside>    <aside class="hg__right">Ads</aside>    <footer class="hg__footer">Footer</footer></body>  

CSS样式的代码只有 31 行:

.hg__header {    grid-area: header;}.hg__footer {    grid-area: footer;}.hg__main {    grid-area: main;}.hg__left {    grid-area: navigation;}.hg__right {    grid-area: ads;}.hg {    display: grid;    grid-template-areas: "header header header"                         "navigation main ads"                         "footer footer footer";    grid-template-columns: 150px 1fr 150px;    grid-template-rows: 100px                         1fr                        30px;    min-height: 100vh;}@media screen and (max-width: 600px) {    .hg {        grid-template-areas: "header"                             "navigation"                             "main"                             "ads"                             "footer";        grid-template-columns: 100%;        grid-template-rows: 100px                             50px                             1fr                            50px                             30px;    }}

把它分解

如前所述,CSS 网格布局可能非常复杂。然而,创建此布局我只用 17 个新属性中的4个:

  • grid-area
  • grid-template-areas
  • grid-template-columns
  • grid-template-rows

使用这些 CSS 网格属性创建圣杯布局可以分解成五个步骤。

定义网格

我们想要做的第一件事是定义网格区域,创建网格时我们可以引用它们的别名。这里用到的是 grid-area 属性。

.hg__header {    grid-area: header;}.hg__footer {    grid-area: footer;}.hg__main {    grid-area: main;}.hg__left {    grid-area: navigation;}.hg__right {    grid-area: ads;}

然后,使用 grid-template-areas 属性,我们可以真正直观的指定网格的布局。 grid-template-areas 属性接受一个以空格分隔的字符串。每个字符串表示一行,利用每个字符串,我们就可以获取以一个空格分隔的网格区域列表值,每一个值均定义网格区域的一列。所以如果我们要跨越两列区域,我们需要定义两次。

在我们圣杯布局中有 3 列 3 行。页眉和页脚行跨越 3 列,其他跨越 1 列。

.hg {    display: grid;    grid-template-areas: "header header header"                         "navigation main ads"                         "footer footer footer";}

利用此标记我们可以得到以下结果。

定义列宽

接下来,我们想要定义列的宽度。这里我们利用 grid-template-columns 属性定义列的宽度。此属性接受一个空格分隔的宽度列表,每一个值均表示网格中的一列。因为在我们的布局中有 3 列,我们可以指定 3 个宽度:

grid-template-columns: [column 1 width]  [column 2 width]  [column 3 width];  

对于圣杯布局,我们想要将 2 个侧栏的宽度设置为 150px 。

.hg {    grid-template-columns: 150px  [column 2 width] 150px;}

对于中间列,我们想要其占据其余的全部空间。这里我们可以使用新单位 fr 。这个单位表示网格中剩余的全部空间。在我们的例子表示网格减去 300px (两个侧边栏的宽度)后的宽度。

.hg {    grid-template-columns: 150px 1fr 150px;}

设置完网格列之后, 布局看起来如下所示-

定义行高

接下来,我们就要定义行的高度了。类似于我们用 grid-template-columns 属性定义列的宽度,我们使用 grid-template-rows 属性定义行高。此属性也是接受以空格分隔的一行高度列表。虽然我们可以把它写在同一行中,但是我认为为了使其更加清晰直观将一值写一行。

.hg {    grid-template-rows: 100px                        1fr                        30px;}

所以布局中的页眉高度为 100px ,页脚高度为 30px ,中间一行(主要内容和两个侧边栏)占据 .hg 元素中其余的可用空间。

定位页脚

在圣杯布局中,即使页面内容十分稀疏,我们也想要页脚总是处于视窗的底部。要实现这一目标,我们可以在 .hg 元素中设置一个最小的视窗高度。

.hg {    min-height: 100vh;}

因为我们将中间一列的宽度和高度设置为占据 .hg 元素的剩余空间,所以它就会适应于整个屏幕。

响应式

最后,我们想要布局具有响应性。在较小的设备上所有网格项应该一个接一个的以单列显示。为此,我们需要重新定义之前的- grid-template-areas 、 grid-template-columns 和 grid-template-rows 3个属性.

首先,我们想要所有的网格项按照特定顺序在一列中显示:

@media screen and (max-width: 600px) {    .hg {        grid-template-areas: "header"                             "navigation"                             "main"                             "ads"                             "footer";    }}

接下来,我们想要所有的网格项跨越整个宽度:

@media screen and (max-width: 600px) {    .hg {        grid-template-columns: 100%;    }}

最后,我们需要重置每个行的高度。除了 main 之外的所有行都有一个已定义的高度:

@media screen and (max-width: 600px) {    .hg {        grid-template-rows: 100px /* Header */                            50px /* Navigation */                            1fr /* Main Content */                            50px /* Ads */                            30px; /* Footer */    }}

就是这样!你可以看看 这里的演示 以及 源码 (nb:你可能需要在浏览器中启用网络功能才可以看到)。

浏览器支持

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
공식 계정 웹 페이지의 캐싱 업데이트에 어려움 : 버전 업데이트 후 사용자 경험에 영향을 미치는 이전 캐시를 피하는 방법은 무엇입니까?공식 계정 웹 페이지의 캐싱 업데이트에 어려움 : 버전 업데이트 후 사용자 경험에 영향을 미치는 이전 캐시를 피하는 방법은 무엇입니까?Mar 04, 2025 pm 12:32 PM

공식 계정 웹 페이지 업데이트 캐시, 이것은 간단하고 간단하며 냄비를 마시기에 충분히 복잡합니다. 공식 계정 기사를 업데이트하기 위해 열심히 노력했지만 사용자는 여전히 기존 버전을 열었습니까? 이 기사에서는이 뒤에있는 비틀기와 회전을 살펴 보고이 문제를 우아하게 해결하는 방법을 살펴 보겠습니다. 읽은 후에는 다양한 캐싱 문제를 쉽게 처리 할 수있어 사용자가 항상 가장 신선한 콘텐츠를 경험할 수 있습니다. 기본 사항에 대해 먼저 이야기 해 봅시다. 액세스 속도를 향상시키기 위해 브라우저 또는 서버는 일부 정적 리소스 (예 : 그림, CSS, JS) 또는 페이지 컨텐츠를 저장합니다. 다음에 액세스 할 때 다시 다운로드하지 않고도 캐시에서 직접 검색 할 수 있으며 자연스럽게 빠릅니다. 그러나 이것은 또한 양날의 검입니다. 새 버전은 온라인입니다.

HTML5 양식 유효성 검사 속성을 사용하여 사용자 입력을 유효성있게하려면 어떻게합니까?HTML5 양식 유효성 검사 속성을 사용하여 사용자 입력을 유효성있게하려면 어떻게합니까?Mar 17, 2025 pm 12:27 PM

이 기사에서는 브라우저에서 직접 사용자 입력을 검증하기 위해 필요한, Pattern, Min, Max 및 Length 한계와 같은 HTML5 양식 검증 속성을 사용하는 것에 대해 설명합니다.

HTML5의 크로스 브라우저 호환성에 대한 모범 사례는 무엇입니까?HTML5의 크로스 브라우저 호환성에 대한 모범 사례는 무엇입니까?Mar 17, 2025 pm 12:20 PM

기사는 HTML5 크로스 브라우저 호환성을 보장하기위한 모범 사례에 대해 논의하고 기능 감지, 점진적 향상 및 테스트 방법에 중점을 둡니다.

웹 페이지의 PNG 이미지에 뇌졸중 효과를 효율적으로 추가하는 방법은 무엇입니까?웹 페이지의 PNG 이미지에 뇌졸중 효과를 효율적으로 추가하는 방법은 무엇입니까?Mar 04, 2025 pm 02:39 PM

이 기사는 CSS를 사용한 웹 페이지에 효율적인 PNG 테두리 추가를 보여줍니다. CSS는 JavaScript 또는 라이브러리에 비해 우수한 성능을 제공하며, 미묘하거나 눈에 띄는 효과를 위해 테두리 너비, 스타일 및 색상 조정 방법을 자세히 설명합니다.

& lt; datalist & gt의 목적은 무엇입니까? 요소?& lt; datalist & gt의 목적은 무엇입니까? 요소?Mar 21, 2025 pm 12:33 PM

이 기사는 HTML & LT; Datalist & GT에 대해 논의합니다. 자동 완성 제안을 제공하고, 사용자 경험을 향상시키고, 오류를 줄임으로써 양식을 향상시키는 요소. 문자 수 : 159

& lt; meter & gt의 목적은 무엇입니까? 요소?& lt; meter & gt의 목적은 무엇입니까? 요소?Mar 21, 2025 pm 12:35 PM

이 기사는 HTML & lt; meter & gt에 대해 설명합니다. 범위 내에 스칼라 또는 분수 값을 표시하는 데 사용되는 요소 및 웹 개발의 일반적인 응용 프로그램. & lt; meter & gt; & lt; Progress & Gt; 그리고 Ex

html5 & lt; time & gt; 의미 적으로 날짜와 시간을 나타내는 요소?html5 & lt; time & gt; 의미 적으로 날짜와 시간을 나타내는 요소?Mar 12, 2025 pm 04:05 PM

이 기사는 html5 & lt; time & gt; 시맨틱 날짜/시간 표현 요소. 인간이 읽을 수있는 텍스트와 함께 기계 가독성 (ISO 8601 형식)에 대한 DateTime 속성의 중요성을 강조하여 Accessibilit를 향상시킵니다.

& lt; Progress & Gt의 목적은 무엇입니까? 요소?& lt; Progress & Gt의 목적은 무엇입니까? 요소?Mar 21, 2025 pm 12:34 PM

이 기사는 HTML & lt; Progress & Gt에 대해 설명합니다. 요소, 그 목적, 스타일 및 & lt; meter & gt의 차이; 요소. 주요 초점은 & lt; progress & gt; 작업 완료 및 & lt; meter & gt; Stati의 경우

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전