皇冠365bet体育投-365bet最新备用-beat365官方网站正规

— 怀旧经典 · 永恒记忆 —

Q: ⽹⻚ 布局都有哪种?⼀ 般都⽤ 什么布局

Q: ⽹⻚ 布局都有哪种?⼀ 般都⽤ 什么布局

作者 | 大漠出品 | 淘系技术超干货长文预警。这次把网页布局方案讲得通通透透的,等高布局,水平垂直居中,经典的圣杯布局等等全都有了。随着 Web 技术不断的革新,CSS 近几年也变得更强大。在 Web 开发中,CSS 是不可或缺的一部分,对于很多 Web 开发者来说,有很多 CSS 属性不知道,或者说他们知道,但忘记在最恰当的时候使用最适合的 CSS 属性。而且时至今日,其中有一些 CSS 的属性可以让开发者能节约更多的时间。比如说,在 Web布局中,现代 CSS 特性就可以更好的帮助我们快速实现,例如等高布局,水平垂直居中,经典的圣杯布局、宽高比例、页脚保持在底部等。在本文中,我将会介绍一些不同的 CSS 属性来实现这些效果,希望大家会感兴趣。更希望对大家今后的工作有所帮助。水平垂直居中如何实现水平垂直居中 可以说是 CSS 面试题中的经典面试题,在多年前这个面试题给很多同学都带来了困惑,但 Flexbxo 布局模块 和 CSS Grid 布局模块 的到来,可以说实现水平垂直居中已是非常的容易。淘系技术 2020 技术年货 > 179x Flexbox 中实现水平垂直居中在 Flexbox 布局模块中,不管是单行还是多行,要让它们在容器中水平垂直居中都是件易事,而且方法也有多种。最常见的是在 Flex 容器上设置对齐方式,在 Flex 项目上设置 margin:auto。先来看在 Flex 容器上设置对齐方式。x Flex 容器和 x Flex 项目上设置对齐方式你可能已经知道在 Flex 容器上设置 justify-content、align-items 的值为 center 时,可以让元素在 Flex 容器中达到水平垂直居中的效果。来看一个示例:

/* CSS */.flex__container {display: flex;justify-content: center;align-items: center;}效果如下:180 < 第一部分 淘系年度精选技术栈内容 / 前端篇Demo(https://codepen.io/airen/embed/YzwYRRy)这种方式特别适应于让 Icon 图标在容器中水平垂直居中,不同的是在 Icon 图标容器上显示设置 display: inline-flex。比如下面这个示例:
/* CSS */.flex__container {display: inline-flex;align-items: center;justify-content: center;}效果如下:Demo(https://codepen.io/airen/embed/xxZpQNv)在这种模式之下,如果要让多个元素实现水平垂直居中的效果,那还需要加上 flex-direction: column,比如:淘系技术 2020 技术年货 > 181
:)
/* CSS */.flex__container {display: flex;flex-direction: column;justify-content: center;align-items: center;}效果如下:Demo(https://codepen.io/airen/embed/QWyazpZ)在 Flexbox 布局中,还可以像下面这样让 Flex 项目在 Flex 容器中达到水平垂直居中的效果:
182 < 第一部分 淘系年度精选技术栈内容 / 前端篇/* CSS */.flex__container {display: flex; // 或 inline-flexjustify-content: center;}.flex__item {align-self: center;}效果如下:Demo(https://codepen.io/airen/embed/yLepGKW)如果在 Flex 容器中有多个 Flex 项目时,该方法同样有效:.flex__container {display: flex; // 或 inline-flexjustify-content: center;}.flex__container > * {align-self: center;}淘系技术 2020 技术年货 > 183比如下面这个效果:Demo(https://codepen.io/airen/embed/bGEaOjm)除此之外,还可以使用 place-content: center 让 Flex 项目实现水平垂直居中:.flex__container {display: flex;place-content: center;}.flex__item {align-self: center;}效果如下:Demo(https://codepen.io/airen/embed/gOPoZQz)184 < 第一部分 淘系年度精选技术栈内容 / 前端篇或者换:.flex__container {display: flex;place-content: center;place-items: center;}效果如下:Demo(https://codepen.io/airen/embed/JjGMwzE)这两种方式同样适用于 Flex 容器中有多个 Flex 项目的情景:.flex__container {display: flex;flex-direction: column;place-content: center;}.flex__container > * {align-self: center;}// 或.flex__container {淘系技术 2020 技术年货 > 185display: flex;flex-direction: column;place-content: center;place-items: center;}效果如下:Demo(https://codepen.io/airen/embed/XWXVoLd)可能很多同学对于 place-content 和 place-items 会感到陌生。其实 place-content 是 align-content 和 justify-content 的简写属性;而 place-items 是 align-items 和 justify-items 的简写属性。即:.flex__container {place-content: center;place-items: center;}等效于:.flex__container {align-content: center;justify-content: center;align-items: center;justify-items: center;}186 < 第一部分 淘系年度精选技术栈内容 / 前端篇虽然扩展出来有四个属性,但最终等效于:. flex__container {display: flex;align-items: center;justify-content: center;}// 多行.flex__container {display: flex;flex-direction: column;align-items: center;justify-content: center;}在 x Flex 项目上设置: `margin: auto`如果在 Flex 容器中只有一个 Flex 项目,还可以显式在 Flex 项目中显式设置 margin 的值为auto,这样也可以让 Flex 项目在 Flex 容器中水平垂直居中。例如:.flex__container {display: flex; // 或 inline-flex}.flex__item {margin: auto;}效果如下:淘系技术 2020 技术年货 > 187Demo(https://codepen.io/airen/embed/KKVZJNp)整个过程,你可以通过下面这个示例来体验。尝试着选中不同方向的 margin 值:Demo(https://codepen.io/airen/embed/gOPoqRq)Grid 中实现水平垂直居中CSS Grid 布局可以说是现代 Web 布局中的银弹。它也是到目前为止布局系统中唯一一个二维布局系统。在 CSS Grid 布局中,只需要仅仅的几行代码也可以快速的帮助我们实现水平垂直居中的效果。比如下面这个示例:
188 < 第一部分 淘系年度精选技术栈内容 / 前端篇/* CSS */.grid {display: grid; // 或 inline-gridplace-items: center}效果如下:Demo(https://codepen.io/airen/embed/zYrRYxW)在 CSS Grid 布局模块中,只要显式设置了 display: grid(或 inline-grid)就会创建 Grid 容器和 Grid 项目,也会自动生成网格线,即行和列(默认为一行一列)。在没有显式地在 Grid 容器上设置 grid-template-columns 和 grid-template-rows,浏览器会将 Grid 容器默认设置为 Grid 内容大小:淘系技术 2020 技术年货 > 189这种方法也适用于 CSS Grid 容器中有多个子元素(Grid 项目),比如:
:)
这个时候你看到的效果如下:Demo(https://codepen.io/airen/embed/PoZQoGP)而且 palce-items 适用于每个单元格。这意味着它将居中单元格的内容。比如下面这个示例:190 < 第一部分 淘系年度精选技术栈内容 / 前端篇

Special title treatment

With supporting text below as a natural lead-in to additional content.

Go somewhere
/* CSS */.grid__container {display: grid;place-items: center;grid-template-columns: repeat(2, 1fr);gap: 2vh;}.grid__item {display: grid;place-items: center;}效果如下:Demo(https://codepen.io/airen/embed/mdVXdpe)淘系技术 2020 技术年货 > 191等高布局等高布局也是 Web 中非常常见的一种布局方式,而且实现等高布局的方案也有很多种。这里我们主要来看 Flexbox 布局模块和 Grid 布局模块给我们带来了什么样的变化。在 Flexbox 和 Grid 布局模块中,让我们实现等高布局已经是非常的简单了,比如:/* CSS */.flex__container {display: flex; // 或 inline-flex}简单地说,在容器上显式设置了 display 的值为 flex 或 inline-flex,该容器的所有子元素的高度都相等,因为容器的 align-items 的默认值为 stretch。这个时候你看到的效果如下:Demo(https://codepen.io/airen/embed/NWxyOQq)192 < 第一部分 淘系年度精选技术栈内容 / 前端篇这种方式特别适用于卡片组件中:Demo(https://codepen.io/airen/embed/OJMQoOO)在 Grid 布局模块中类似:/* CSS */.grid__container {display: grid;grid-template-columns: 20vw 1fr 20vw; /* 根据需求调整值*/}效果如下:淘系技术 2020 技术年货 > 193Demo(https://codepen.io/airen/embed/mdVXQON)同样在一些卡片类布局中运用:Demo(https://codepen.io/airen/embed/MWKQzmE)如果需求有所调整,比如在 Flex 项目 或 Grid 项目的子元素高度和容器高度相同。/* CSS */.flex__container {display: flex;}.content {height: 100%}// 或.grid__container {194 < 第一部分 淘系年度精选技术栈内容 / 前端篇display: grid;grid-auto-flow: column;}.content {height: 100%;}效果如下:Demo(https://codepen.io/airen/embed/jOWZdbo)y Sticky Footer首先用下图来描述什么是 Sticky Footer 布局效果:淘系技术 2020 技术年货 > 195Sticky Footer 实现方案和等高、垂直居中一样,同样有很多种方案可以实现(//http://css-tricks.com/couple-takes-sticky-footer/)。比如像下面这样的结构:
先来看 Flexbox 布局模块中的实现方案:body {display: flex;flex-direction: column;}footer {margin-top: auto;}Demo(https://codepen.io/airen/embed/bGELzYy)可以尝试着在 main 区域右下角向下拖动,改变主内容区域的高度,你会发现“当内容不足一屏时,
会在页面的最底部,当内容超出一屏时,
会自动往后延后”。196 < 第一部分 淘系年度精选技术栈内容 / 前端篇在 Flexbox 布局中,还可以在
区域上设置下面的样式,达到相等的效果:body {display: flex;flex-direction: column;}main {flex: 1 0 auto;}效果如下:Demo(https://codepen.io/airen/embed/zYrRXmY)
中的 flex: 1 0 auto 相当于是:main {flex-grow: 1; /*容器有剩余空间时,main 区域会扩展*/flex-shrink: 0; /*容器有不足空间时,main 区域不会收缩*/flex-basis: auto; /*main 区域高度的基准值为 main 内容自动高度*/}如果你想省事的话,可以在 main 上显式设置 flex-grow:1,因为 flex-shrink 和 flex-basis 的默认值为 1 和 auto。淘系技术 2020 技术年货 > 197在 CSS Grid 布局中我们可以借助 1fr 让
区域根据 Grid 容器剩余空间来做计算。.grid__container {display: grid;grid-template-rows: auto 1fr auto;}效果如下:Demo(https://codepen.io/airen/embed/MWKQRxd)均分列在 Web 布局中,很多时候会对列做均分布局,最为常见的就是在移动端的底部 Bar,比如下图这样的一个效果:在 Flexbox 和 Grid 还没出现之前,如果希望真正的做到均分效果,可以用 100%(或100vw)除以具体的列数。比如:198 < 第一部分 淘系年度精选技术栈内容 / 前端篇/* CCSS */.container {inline-size: 50vw;min-inline-size: 320px;display: flex-row;}.column {float: left;width: calc(100% / 3);}效果如下:Demo(https://codepen.io/airen/embed/LYGQoxL)通过浏览器调试器中可以发现,现个列的宽度都是相等的:淘系技术 2020 技术年货 > 199在 Flexbox 和 Grid 布局中,实现上面的效果会变得更容易地多。先来看 Flexbox 中的布局:/* CSS */.flex__container {inline-size: 50vw;display: flex;}.flex__item {flex: 1;}效果如下:200 < 第一部分 淘系年度精选技术栈内容 / 前端篇Demo(https://codepen.io/airen/embed/yLevWEe)在 Flexbox 布局模块中,当 flex 取的值是一个单值(无单位的数),比如示例中的 flex:1,它会当作显式的设置了 flex-grow: 1。浏览器计算出来的 flex:接下来看 Grid 中如何实现上例的效果:/* CSS */.grid__container {display: grid;grid-template-columns: repeat(3, 1fr); /*这里的 3 表示具体的列数*/}最终的效果是相同的:淘系技术 2020 技术年货 > 201Demo(https://codepen.io/airen/embed/NWxyVQP)这样的布局方式也适用于其他的布局中。但不管是 Flexbox 还是 Grid 布局中,都存在一定的缺陷,当容器没有足够的空间容纳 Flex 项目(或 Grid 项目)时,Flex 项目或 Grid 项目会溢出(或隐藏,如果 Flex 容器或 Grid 容器显式设置了 overflow:hidden):修复这种现象最简单的方式是在 Flex 容器或 Grid 容器显式设置一个 min-width(或 min-inline-size):.flex__container {min-inline-size: 300px;}不过话又说回来,比如我们的 Flex 项目(或 Grid 项目)是一个卡片,每张卡片宽度是相等之外,更希望容器没有足够空间时,Flex 项目(或 Grid 项目)会自动断行排列。我们继续通过示例向大家展示。先来看 Flexbox 实现方案:202 < 第一部分 淘系年度精选技术栈内容 / 前端篇.flex__container {display: flex;flex-wrap: wrap;}.flex__item {flex: 0 1 calc((100vw - 18vh) / 4); /* calc(100vw -18vh) / 4 是 flex-basis 的基准值 */}Demo(https://codepen.io/airen/embed/dyGdBpw)你可以尝试着调整浏览器的视窗宽度,当浏览器的视窗越来越小时,Flex 容器宽度也就会越来越小,当 Flex 容器小到没有足够的空间容纳四个 Flex 项目(就此例而言),那么 Flex 项目就会断行排列:基于该例,如果把 Flex 项目的 flex 值改成:.flex__item {flex: 0 0 400px;}淘系技术 2020 技术年货 > 203这个时候,当 Flex 容器没有足够空间时,Flex 项目会按 flex-basis: 400px 计算其宽度,Flex 容器没有足够空间时,Flex 就会断行:反过来,如果 Flex 项目的值 flex 改成:.flex__item {flex: 1 0 400px;}当 Flex 容器没有足够空间排列 Flex 项目时,Flex 项目会按 flex-basis: 400px 计算其宽度,Flex 会断行,并且同一行出现剩余空间时,Flex 项目会扩展,占满整个 Flex 容器:204 < 第一部分 淘系年度精选技术栈内容 / 前端篇在 Grid 中实现类似的效果要更复杂一点。可以使用 repeat()函数,1fr 以及 auto-fit 等特性:.grid__container {display: grid;grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));gap: 2vh;}效果如下:Demo(https://codepen.io/airen/embed/RwrQzeN)如果你对这方面知识感兴趣的话,还可移步阅读《Container Query Solutions with CSSGrid and Flexbox(//moderncss.dev/container-query-solutions-with-css-grid-and-flexbox/)》一文。其实在 Grid 中与 auto-fit 对比的值还有一个叫 auto-fill。但两者的差异是非常地大,用下图来描述 auto-fit 和 auto-fill 的差异:淘系技术 2020 技术年货 > 205另外这种方式也是到目前为止一种不需要借助 CSS 媒体查询就可以实现响应式布局效果。圣杯布局圣杯布局(Holy Grail Layout)(//http://en.wikipedia.org/wiki/Holygrail(web_design))是Web 中典型的布局模式(//http://alistapart.com/article/holygrail/)。看上去像下图这样:对于圣杯布局而言,HTML 结构是有一定的要求,那就是内容为先:206 < 第一部分 淘系年度精选技术栈内容 / 前端篇
在这里主要还是和大家一起探讨,如何使用 Flexbox 和 Grid 布局模块来实现圣杯布局。先来看 Flexbox 实现方案:body {width: 100vw;display: flex;flex-direction: column;}main {flex: 1;min-height: 0;display: flex;align-items: stretch;width: 100%;}footer {margin-top: auto;}nav {width: 220px;order: -1;}淘系技术 2020 技术年货 > 207article {flex: 1;}aside {width: 220px;}效果如下:Demo(https://codepen.io/airen/embed/rNxJXYb)通过在 nav、aside 和 article 上显式设置 order 的值,可以很好的控制这三个区域的布局顺序。比如说,希望

相关推荐

beat365官方网站正规 乌龟壳有什么作用与功效

乌龟壳有什么作用与功效

📅 07-12 👁️ 9569
365bet最新备用 生物小科普|鸟巢之迷

生物小科普|鸟巢之迷

📅 07-14 👁️ 4104
beat365官方网站正规 【李响专栏】一届缺少新秀和运动战进球的世界杯

【李响专栏】一届缺少新秀和运动战进球的世界杯

📅 08-07 👁️ 2862
皇冠365bet体育投 2025年中国十大最好军校名单 国内43所军校排行榜

2025年中国十大最好军校名单 国内43所军校排行榜

📅 07-24 👁️ 7399
365bet最新备用 曲的五笔编码和拆分图解

曲的五笔编码和拆分图解

📅 09-07 👁️ 7276
365bet最新备用 PUBG苹果版怎么下载?(IOS手机详细安装教程)

PUBG苹果版怎么下载?(IOS手机详细安装教程)

📅 07-08 👁️ 9180
365bet最新备用 腾达路由器怎么样(腾达哪个路由器)

腾达路由器怎么样(腾达哪个路由器)

📅 07-08 👁️ 2145
beat365官方网站正规 早晨红红的太阳像什么,红红的太阳像大火球?

早晨红红的太阳像什么,红红的太阳像大火球?

📅 09-01 👁️ 4611
皇冠365bet体育投 怎么使用PS修改文字?超简单的PS改字教程​

怎么使用PS修改文字?超简单的PS改字教程​

📅 06-30 👁️ 5726
365bet最新备用 梦幻真人客服的电话是多少?

梦幻真人客服的电话是多少?

📅 09-06 👁️ 5409
皇冠365bet体育投 dnf红眼哪个耳环最后

dnf红眼哪个耳环最后

📅 07-06 👁️ 5014