CSS 布局

news2025/1/19 20:31:30

CSS 页面布局技术允许我们拾取网页中的元素,并且控制它们相对正常布局流、周边元素、父容器或者主视口/窗口的位置。布局有一下几种

  • 正常布局流
  • display属性
  • 弹性盒子
  • 网格
  • 浮动
  • 定位
  • CSS 表格布局
  • 多列布局

每种布局都有它们的用途,各有优缺点,相互辅助。通过理解各个布局方法的设计理念,你能够找到构建你想要的网页需要的布局方案。

正常布局流

指在不对页面进行任何布局控制时,浏览器默认的 HTML 布局方式。让我们快速地看一个 HTML 的例子:

<p>段落1</p>

<ul>
  <li>列表1</li>
  <li>列表2</li>
  <li>列表3</li>
</ul>

<p>段落2</p>

在这里插入图片描述
当使用正常布局流将完全可以创建你所需要的布局时,尽量避免使用 css 创建一个布局。因为你可以按照默认的方式来搭建页面,而不是自造车轮。

下列布局技术会覆盖默认的布局行为:

  • display 属性 — 标准的 value,比如block, inline 或者 inline-block 元素在正常布局流中的表现形式 (见 Types of CSS boxes). 接着是全新的布局方式,通过设置display的值,比如 CSS Grid 和 Flexbox.
    浮动——应用 float 值,诸如 left 能够让块级元素互相并排成一行,而不是一个堆叠在另一个上面。
  • position 属性 — 允许你精准设置盒子中的盒子的位置,正常布局流中,默认为 static ,使用其他值会引起元素不同的布局方式,例如将元素固定到浏览器视口的左上角。
  • 表格布局— 表格的布局方式可以用在非表格内容上,可以使用display: table和相关属性在非表元素上使用。
  • 多列布局— 这个 Multi-column layout 属性可以让块按列布局,比如报纸的内容就是一列一列排布的。

display 属性

在 css 中实现页面布局的主要方法是设定display属性的值。此属性允许我们更改默认的显示方式。正常布局流中的所有内容都有一个display的值,用作元素的默认行为方式。例如,段落显示在一个段落的下面,这是因为它们的样式是display:block。如果在段落中的某个文本周围创建链接,则该链接将与文本的其余部分保持内联,并且不会打断到新行。这是因为<a>元素默认为display:inline

可以更改此默认显示行为。例如,<li>元素默认为display:block,这意味着列表项显示为一个在另一个之下。如果我们将显示值更改为inline,它们现在将显示在彼此相邻。

<p>段落1</p>

<ul>
  <li>列表1</li>
  <li>列表2</li>
  <li>列表3</li>
</ul>

<p>段落2</p>

li {
  display:inline
}

在这里插入图片描述

除了可以通过将displayblockinline相互转换来更改默认显示,还有一些更大的布局方法以display值开始。但是,在使用这些属性时,通常需要调用其他属性。在讨论布局时,对我们来说最重要的两个值是 display: flexdisplay: grid

Flexbox 弹性盒子

Flexbox 是 CSS 弹性盒子布局模块(Flexible Box Layout Module)的缩写,它被专门设计出来用于创建横向或是纵向的一维页面布局。要使用 flexbox,你只需要在想要进行 flex 布局的父元素上应用display: flex ,所有直接子元素都将会按照 flex 进行布局。我们来看一个例子。

设置 display:flex

当我们把display: flex添加到元素时,该容器就变为flex容器,元素内的元素就自动按列进行排列。这是由于它们变成了flex项,按照 flex容器相关的初值进行flex布局:它们整整齐齐排成一行,是因为该元素上flex-direction的初值是row。它们全都被拉伸至和最高的元素高度相同,是因为父元素上align-items属性的初值是stretch。这就意味着所有的子元素都会被拉伸到它们的flex容器的高度,在这个案例里就是所有flex项中最高的一项。所有项目都从容器的开始位置进行排列,排列成一行后,在尾部留下一片空白。

<div class="block">
  <div>BOX1</div>
  <div>BOX2</div>
  <div>BOX3</div>
</div>

.block {
  display: flex;
}

.block > div {
  margin: 5px;
  border-radius: 5px;
  background-color: #409eff;
  color: white;
  padding: 1em;
}

使用display: flex;
在这里插入图片描述

不使用display: flex;
在这里插入图片描述

设置 flex 属性

除了上述可以被应用到 flex 容器的属性以外,还有很多属性可以被应用到flex项上面。这些属性可以改变 flex 项在 flex 布局中占用宽/高的方式,允许它们通过伸缩来适应可用空间。

作为一个简单的例子,我们可以在所有子元素上添加flex 属性,并赋值为1,这会使得所有的子元素都伸展并填充容器,而不是在尾部留下空白。它们会调整自己直到占用相同宽度的空间。

.block > div {
  margin: 5px;
  border-radius: 5px;
  background-color: #409eff;
  color: white;
  padding: 1em;
  /* 增加 */
  flex: 1;
}

在这里插入图片描述

Grid 布局

Flexbox 用于设计横向或纵向的布局,而 Grid 布局则被设计用于同时在两个维度上把元素按行和列排列整齐

设置 display: grid

同 flex 一样,你可以通过指定 display 的值来转到 grid 布局:display: grid。下面的例子除了使用display:grid,我们还分别使用 grid-template-rows 和 grid-template-columns 两个属性定义了一些行和列的轨道。定义了三个1fr 2fr 1fr(把行等分为4份)的列,还有两个50px 80px的行之后,无需再在子元素上指定任何规则,它们自动地排列到了我们创建的格子当中。

<div class="block">
  <div>GRID1</div>
  <div>GRID2</div>
  <div>GRID3</div>
  <div>GRID4</div>
  <div>GRID5</div>
  <div>GRID6</div>
</div>

.block {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr;
  grid-template-rows: 50px 80px;
  grid-gap: 5px;
}

.block > div {
  border-radius: 5px;
  background-color: #409eff;
  color: white;
  padding: 1em;
}

在这里插入图片描述

在网格内放置元素

一旦你拥有了一个 grid,你也可以显式地将元素摆放在里面,而不是依赖于浏览器进行自动排列。在下面的第二个例子里,我们定义了一个和上面一样的 grid,但是这一次我们只有三个子元素。我们利用 grid-column 和 grid-row 两个属性来指定每一个子元素应该从哪一行/列开始,并在哪一行/列结束。这就能够让子元素在多个行/列上展开。

<div class="wrapper">
  <div class="box1">One</div>
  <div class="box2">Two</div>
  <div class="box3">Three</div>
  <div class="box4">Four</div>
  <div class="box5">Five</div>
  <div class="box6">Six</div>
</div>

.block {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 50px 50px;
  grid-gap: 5px;
}

.block > div {
  border-radius: 5px;
  background-color: #409eff;
  color: white;
  padding: 1em;
}

.box1 {
  grid-column: 2 / 4;
  grid-row: 1;
}

.box2 {
  grid-column: 1;
  grid-row: 1 / 3;
}

.box3 {
  grid-row: 2;
  grid-column: 3;
}

在这里插入图片描述

注:这两个例子只是展示了 grid 布局的冰山一角,要深入了解 grid 布局,请参阅其他资料

浮动

把一个元素“浮动”(float) 起来,会改变该元素本身和在正常布局流中跟随它的其他元素的行为。这一元素会浮动到左侧或右侧,并且从正常布局流中移除,这时候其他的周围内容就会在这个被设置浮动 (float) 的元素周围环绕。

float 属性值:

  • left — 将元素浮动到左侧。
  • right — 将元素浮动到右侧。
  • none — 默认值,不浮动。
  • inherit — 继承父元素的浮动属性。

把一个

元素浮动到左侧,并且给了他一个右侧的margin,把文字推开。这给了我们文字环绕着这个
元素的效果。

<h1>滕王阁序</h1>

<div class="box">王勃(约650—676年),唐代诗人。汉族,字子安。绛州龙门(今山西河津)人。王勃与杨炯、卢照邻、骆宾王齐名,世称“初唐四杰”,其中王勃是“初唐四杰”之首。</div>

<p>
豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临;宇文新州之懿范,襜帷暂驻。十旬休假,胜友如云;千里逢迎,高朋满座。腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库。家君作宰,路出名区;童子何知,躬逢胜饯。
</p>
<p>
时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿;临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。
</p>
<p>
披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰弥津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。
</p>
<p>
遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。四美具,二难并。穷睇眄于中天,极娱游于暇日。天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。怀帝阍而不见,奉宣室以何年?
</p>
<p>
嗟乎!时运不齐,命途多舛。冯唐易老,李广难封。屈贾谊于长沙,非无圣主;窜梁鸿于海曲,岂乏明时?所赖君子见机,达人知命。老当益壮,宁移白首之心?穷且益坚,不坠青云之志。酌贪泉而觉爽,处涸辙以犹欢。北海虽赊,扶摇可接;东隅已逝,桑榆非晚。孟尝高洁,空余报国之情;阮籍猖狂,岂效穷途之哭!
</p>
<p>
勃,三尺微命,一介书生。无路请缨,等终军之弱冠;有怀投笔,慕宗悫之长风。舍簪笏于百龄,奉晨昏于万里。非谢家之宝树,接孟氏之芳邻。他日趋庭,叨陪鲤对;今兹捧袂,喜托龙门。杨意不逢,抚凌云而自惜;钟期既遇,奏流水以何惭?
</p>
<p>
呜乎!胜地不常,盛筵难再;兰亭已矣,梓泽丘墟。临别赠言,幸承恩于伟饯;登高作赋,是所望于群公。敢竭鄙怀,恭疏短引;一言均赋,四韵俱成。请洒潘江,各倾陆海云尔:
</p>
<p>
滕王高阁临江渚,佩玉鸣鸾罢歌舞。
</p>
<p>
画栋朝飞南浦云,珠帘暮卷西山雨。
</p>
<p>
闲云潭影日悠悠,物换星移几度秋。
</p>
<p>
阁中帝子今何在?槛外长江空自流。
</p>

body {
  width: 90%;
  max-width: 900px;
  margin: 0 auto;
}

p {
  line-height: 2;
  word-spacing: 0.1rem;
}

.box {
  background-color: rgb(207, 232, 220);
  border: 2px solid rgb(79, 185, 227);
  padding: 10px;
  border-radius: 5px;
}
/* 浮动float */
.box {
  float: left;
  width: 200px;
  height: 150px;
  margin-right: 30px;
}

在这里插入图片描述

定位

定位 (positioning) 能够让我们把一个元素从它原本在正常布局流中应该在的位置移动到另一个位置。定位并不是一种用来给你做主要页面布局的方式,它更像是让你去管理和微调页面中的一个特殊项的位置。

有一些非常有用的技术在特定的布局下依赖于position属性。同时,理解定位也能够帮助你理解正常布局流,理解把一个元素移出正常布局流是怎么一回事。

有五种主要的定位类型

  • 静态定位(Static positioning)是每个元素默认的属性——它表示“将元素放在文档布局流的默认位置——没有什么特殊的地方”。
  • 相对定位(Relative positioning)允许我们相对于元素在正常的文档流中的位置移动它——包括将两个元素叠放在页面上。这对于微调和精准设计(design pinpointing)非常有用。
  • 绝对定位(Absolute positioning)将元素完全从页面的正常布局流(normal layout flow)中移出,类似将它单独放在一个图层中。我们可以将元素相对于页面的 <html>元素边缘固定,或者相对于该元素的最近被定位祖先元素(nearest positioned ancestor element)。绝对定位在创建复杂布局效果时非常有用,例如通过标签显示和隐藏的内容面板或者通过按钮控制滑动到屏幕中的信息面板。
  • 固定定位(Fixed positioning)与绝对定位非常类似,但是它是将一个元素相对浏览器视口固定,而不是相对另外一个元素。这在创建类似在整个页面滚动过程中总是处于屏幕的某个位置的导航菜单时非常有用。
  • 粘性定位(Sticky positioning)是一种新的定位方式,它会让元素先保持和 position: static 一样的定位,当它的相对视口位置(offset from the viewport)达到某一个预设值时,它就会像 position: fixed 一样定位。

简单定位示例

其实也就是标签原本的默认位置

<h1>定位</h1>

<p>块元素1</p>
<p>块元素2</p>
<p>块元素3</p>

body {
  width: 500px;
  margin: 0 auto;
}

p {
  background-color: #409eff;
  color: white;
  border: 2px solid rgb(79, 185, 227);
  padding: 10px;
  margin: 10px;
  border-radius: 5px;
}

在这里插入图片描述

相对定位

相对定位 (relative positioning) 让你能够把一个正常布局流 (normal flow) 中的元素从它的默认位置按坐标进行相对移动。比如将一个图标往下调一点,以便放置文字。我们可以通过下面的规则添加相对定位来实现效果:

这里我们给中间段落的position 一个 relative值——这属性本身不做任何事情,所以我们还添加了top和left属性。这些可以将受影响的元素向下向右移——这可能看起来和你所期待的相反,但你需要把它看成是左边和顶部的元素被“推开”一定距离,这就导致了它的向下向右移动。

<h1>定位</h1>

<p>块元素1</p>
<p class='positioned'>块元素2</p>
<p>块元素3</p>

body {
  width: 500px;
  margin: 0 auto;
}

p {
  background-color: #409eff;
  color: white;
  border: 2px solid rgb(79, 185, 227);
  padding: 10px;
  margin: 10px;
  border-radius: 5px;
}

.positioned {
  background: rgba(200, 150, 150, 0.2);
  position: relative;
  top: 30px;
  left: 30px;
}

在这里插入图片描述

绝对定位

绝对定位用于将元素移出正常布局流 (normal flow),以坐标的形式相对于它的容器定位到 web 页面的任何位置,以创建复杂的布局。有趣的是,它经常被用于与相对定位和浮动的协同工作。

这里我们给我们的中间段一个position的 absolute值,并且和前面一样加上 top 和left 属性。但是,添加此代码将给出以下结果:

<h1>相对定位</h1>

<p>块元素1</p>
<p class='positioned'>块元素2</p>
<p>块元素3</p>

body {
  width: 500px;
  margin: 0 auto;
}

p {
  background-color: #409eff;
  color: white;
  border: 2px solid rgb(79, 185, 227);
  padding: 10px;
  margin: 10px;
  border-radius: 5px;
}

.positioned {
  background: rgba(200, 150, 150, 0.2);
  position: absolute;
  color: black;
  top: 30px;
  left: 30px;
}

在这里插入图片描述

固定定位

固定定位 (fixed positioning) 同绝对定位 (absolute positioning) 一样,将元素从文档流 (document flow) 当中移出了。但是,定位的坐标不会应用于"容器"边框来计算元素的位置,而是会应用于视口 (viewport) 边框。利用这一特性,我们可以轻松搞出一个固定位置的菜单,而不受底下的页面滚动的影响。

在这个例子里面,我们在 HTML 加了三段很长的文本来使得页面可滚动,又加了一个带有position: fixed的盒子。

<h1>滕王阁序</h1>

<div class="positioned">王勃</div>

<p>
豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临;宇文新州之懿范,襜帷暂驻。十旬休假,胜友如云;千里逢迎,高朋满座。腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库。家君作宰,路出名区;童子何知,躬逢胜饯。
</p>
<p>
时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿;临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。
</p>
<p>
披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰弥津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。
</p>
<p>
遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。四美具,二难并。穷睇眄于中天,极娱游于暇日。天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。怀帝阍而不见,奉宣室以何年?
</p>
<p>
嗟乎!时运不齐,命途多舛。冯唐易老,李广难封。屈贾谊于长沙,非无圣主;窜梁鸿于海曲,岂乏明时?所赖君子见机,达人知命。老当益壮,宁移白首之心?穷且益坚,不坠青云之志。酌贪泉而觉爽,处涸辙以犹欢。北海虽赊,扶摇可接;东隅已逝,桑榆非晚。孟尝高洁,空余报国之情;阮籍猖狂,岂效穷途之哭!
</p>
<p>
勃,三尺微命,一介书生。无路请缨,等终军之弱冠;有怀投笔,慕宗悫之长风。舍簪笏于百龄,奉晨昏于万里。非谢家之宝树,接孟氏之芳邻。他日趋庭,叨陪鲤对;今兹捧袂,喜托龙门。杨意不逢,抚凌云而自惜;钟期既遇,奏流水以何惭?
</p>
<p>
呜乎!胜地不常,盛筵难再;兰亭已矣,梓泽丘墟。临别赠言,幸承恩于伟饯;登高作赋,是所望于群公。敢竭鄙怀,恭疏短引;一言均赋,四韵俱成。请洒潘江,各倾陆海云尔:
</p>
<p>
滕王高阁临江渚,佩玉鸣鸾罢歌舞。
</p>
<p>
画栋朝飞南浦云,珠帘暮卷西山雨。
</p>
<p>
闲云潭影日悠悠,物换星移几度秋。
</p>
<p>
阁中帝子今何在?槛外长江空自流。
</p>

body {
  width: 500px;
  margin: 0 auto;
}

.positioned {
  background-color: #409eff;
  color: white;
  padding: 10px;
  margin: 10px;
  border-radius: 5px;
}

.positioned {
  position: fixed;
  top: 100px;
  left: 10px;
}

在这里插入图片描述

粘性定位

粘性定位 (sticky positioning) 是最后一种我们能够使用的定位方式。它将默认的静态定位 (static positioning) 和固定定位 (fixed positioning) 相混合。当一个元素被指定了position: sticky时,它会在正常布局流中滚动,直到它出现在了我们给它设定的相对于容器的位置,这时候它就会停止随滚动移动,就像它被应用了position: fixed一样。

<h1>滕王阁序</h1>



<p>
豫章故郡,洪都新府。星分翼轸,地接衡庐。襟三江而带五湖,控蛮荆而引瓯越。物华天宝,龙光射牛斗之墟;人杰地灵,徐孺下陈蕃之榻。雄州雾列,俊采星驰。台隍枕夷夏之交,宾主尽东南之美。都督阎公之雅望,棨戟遥临;宇文新州之懿范,襜帷暂驻。十旬休假,胜友如云;千里逢迎,高朋满座。腾蛟起凤,孟学士之词宗;紫电青霜,王将军之武库。家君作宰,路出名区;童子何知,躬逢胜饯。
</p>
<p>
时维九月,序属三秋。潦水尽而寒潭清,烟光凝而暮山紫。俨骖騑于上路,访风景于崇阿;临帝子之长洲,得天人之旧馆。层峦耸翠,上出重霄;飞阁流丹,下临无地。鹤汀凫渚,穷岛屿之萦回;桂殿兰宫,即冈峦之体势。
</p>

<div class="positioned">王勃</div>

<p>
披绣闼,俯雕甍,山原旷其盈视,川泽纡其骇瞩。闾阎扑地,钟鸣鼎食之家;舸舰弥津,青雀黄龙之舳。云销雨霁,彩彻区明。落霞与孤鹜齐飞,秋水共长天一色。渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。
</p>
<p>
遥襟甫畅,逸兴遄飞。爽籁发而清风生,纤歌凝而白云遏。睢园绿竹,气凌彭泽之樽;邺水朱华,光照临川之笔。四美具,二难并。穷睇眄于中天,极娱游于暇日。天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。望长安于日下,目吴会于云间。地势极而南溟深,天柱高而北辰远。关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。怀帝阍而不见,奉宣室以何年?
</p>
<p>
嗟乎!时运不齐,命途多舛。冯唐易老,李广难封。屈贾谊于长沙,非无圣主;窜梁鸿于海曲,岂乏明时?所赖君子见机,达人知命。老当益壮,宁移白首之心?穷且益坚,不坠青云之志。酌贪泉而觉爽,处涸辙以犹欢。北海虽赊,扶摇可接;东隅已逝,桑榆非晚。孟尝高洁,空余报国之情;阮籍猖狂,岂效穷途之哭!
</p>
<p>
勃,三尺微命,一介书生。无路请缨,等终军之弱冠;有怀投笔,慕宗悫之长风。舍簪笏于百龄,奉晨昏于万里。非谢家之宝树,接孟氏之芳邻。他日趋庭,叨陪鲤对;今兹捧袂,喜托龙门。杨意不逢,抚凌云而自惜;钟期既遇,奏流水以何惭?
</p>

<p>
呜乎!胜地不常,盛筵难再;兰亭已矣,梓泽丘墟。临别赠言,幸承恩于伟饯;登高作赋,是所望于群公。敢竭鄙怀,恭疏短引;一言均赋,四韵俱成。请洒潘江,各倾陆海云尔:
</p>
<p>
滕王高阁临江渚,佩玉鸣鸾罢歌舞。
</p>
<p>
画栋朝飞南浦云,珠帘暮卷西山雨。
</p>
<p>
闲云潭影日悠悠,物换星移几度秋。
</p>
<p>
阁中帝子今何在?槛外长江空自流。
</p>

body {
  width: 500px;
  margin: 0 auto;
}

.positioned {
  background-color: #409eff;
  color: white;
  padding: 10px;
  margin: 10px;
  border-radius: 5px;
}

.positioned {
  position: sticky;
  top: 100px;
  left: 10px;
}

在这里插入图片描述
在这里插入图片描述

表格布局

<form>
  <p>基本信息</p>
  
  <div>
    <label for="name">姓名:</label>
    <input type="text" id="name" />
  </div>
  <div>
    <label for="age">年龄:</label>
    <input type="text" id="age" />
  </div>
  <div>
    <label for="school">学校:</label>
    <input type="text" id="school" />
  </div>
</form>

form {
  display: table;
  margin: 0 auto;
}

form div {
  display: table-row;
}

form label,
form input {
  display: table-cell;
  margin-bottom: 10px;
}

form label {
  width: 80px;
  padding-right: 10px;
  text-align: right;
}

form input {
  width: 150px;
}

form p {
  display: table-caption;
  caption-side: bottom;
  color: #409eff;
  font-style: italic;
}

在这里插入图片描述

多列布局

多列布局把内容按列排序的方式,就像报纸上排列那样。

要转变成多列容器 (multicol container),我们可以使用 column-count属性来告诉浏览器我们需要多少列,也可以使用column-width来告诉浏览器以至少某个宽度的尽可能多的列来填充容器。

<div class="content">
  <h1>马说</h1>

  <p>韩愈</p>
  <p>
    世有伯乐,然后有千里马。千里马常有,而伯乐不常有。故虽有名马,祗辱于奴隶人之手,骈死于槽枥之间,不以千里称也。
  </p>
  <p>
    马之千里者,一食或尽粟一石。食马者不知其能千里而食也。是马也,虽有千里之能,食不饱,力不足,才美不外见,且欲与常马等不可得,安求其能千里也?
  </p>
  <p>
    策之不以其道,食之不能尽其材,鸣之而不能通其意,执策而临之,曰:“天下无马!”呜呼!其真无马邪?其真不知马也!
  </p>
</div>

<div class="content">
  <h1>岳阳楼记</h1>

  <p>范仲淹</p>
  <p>
    庆历四年春,滕子京谪守巴陵郡。越明年,政通人和,百废具兴,乃重修岳阳楼,增其旧制,刻唐贤今人诗赋于其上,属予作文以记之。
  </p>
  <p>
    予观夫巴陵胜状,在洞庭一湖。衔远山,吞长江,浩浩汤汤,横无际涯,朝晖夕阴,气象万千,此则岳阳楼之大观也,前人之述备矣。然则北通巫峡,南极潇湘,迁客骚人,多会于此,览物之情,得无异乎?
  </p>
  <p>
    至若春和景明,波澜不惊,上下天光,一碧万顷,沙鸥翔集,锦鳞游泳,岸芷汀兰,郁郁青青。而或长烟一空,皓月千里,浮光跃金,静影沉璧,渔歌互答,此乐何极!登斯楼也,则有心旷神怡,宠辱偕忘,把酒临风,其喜洋洋者矣。
  </p>
  <p>
    若夫淫雨霏霏,连月不开,阴风怒号,浊浪排空,日星隐曜,山岳潜形,商旅不行,樯倾楫摧,薄暮冥冥,虎啸猿啼。登斯楼也,则有去国怀乡,忧谗畏讥,满目萧然,感极而悲者矣。
  </p>
  <p>
    嗟夫!予尝求古仁人之心,或异二者之为,何哉?不以物喜,不以己悲,居庙堂之高则忧其民,处江湖之远则忧其君。是进亦忧,退亦忧。然则何时而乐耶?其必曰“先天下之忧而忧,后天下之乐而乐”乎!噫!微斯人,吾谁与归?
  </p>
  <p>时六年九月十五日。</p>
</div>

.content {
  column-count: 3;
  border: 1px solid #ccc;
  margin: 5px;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS伪类选择器和伪元素

伪类&#xff08;Pseudo-classes&#xff09; 伪类用于定义元素的特殊状态。它们被添加到选择器中以指定元素在其生命周期的特定状态下的样式。伪类不创建新的文档内容&#xff0c;也不创建新的文档树中的元素。相反&#xff0c;它们提供了一种方法来根据元素的状态来应用样式…

统信UOS系统连接打印机操作步骤

系统版本 操作步骤 首先点击开始菜单 搜索框输入打印&#xff0c;点击打印管理器 点击图下所示的号 按照图下所示&#xff0c;手动查找->输入打印机的ip地址->点击查找 等到如图下所示&#xff0c;出现打印机的时候&#xff0c;选择打印机&#xff0c;然后选择驱动&…

嵌入式AI快速入门课程-K510篇 (第三篇 环境搭建及开发板操作)

第三篇 环境搭建及开发板操作 文章目录 第三篇 环境搭建及开发板操作1.配置VMware使用桥接网卡1.1 vmware设置1.2 虚拟网络编辑器设置 2.安装软件2.2 安装 Windows 软件2.3 使用MobaXterm远程登录Ubuntu2.4 使用FileZilla在Windows和Ubuntu之间传文件2.5编程示例&#xff1a;Ub…

迎接“云+AI”智算时代!生态案例分论坛议程一览 | 2024 龙蜥大会

2024 龙蜥操作系统大会由中国计算机学会开源发展委员会、中关村科学城委员会、海淀区委网信办、中国开源软件推进联盟指导&#xff0c;龙蜥社区主办&#xff0c;阿里云、中兴通讯、Intel、浪潮信息、Arm、中科方德等 24 家理事单位共同承办&#xff0c;主题为“进化重构赴未来”…

海南云亿商务咨询有限公司助力抖音商家破浪前行

在当下这个短视频与直播电商风起云涌的时代&#xff0c;抖音作为头部平台&#xff0c;正以其庞大的用户基数和强大的算法推荐机制&#xff0c;成为众多品牌与商家竞相追逐的新蓝海。而在这片波澜壮阔的海洋中&#xff0c;海南云亿商务咨询有限公司如同一艘稳健的航船&#xff0…

软件测试 —— JMeter 参数化4种方式!

一、JMeter参数化简介 1.JMeter参数化的概念 当使用JMeter进行测试时&#xff0c;测试数据的准备是一项重要的工作。若要求每次迭代的数据不一样时&#xff0c;则需进行参数化&#xff0c;然后从参数化的文件中来读取测试数据。 参数化&#xff1a;是自动化测试脚本的一种常…

【Prettier】代码格式化工具Prettier的使用和配置介绍

前言 前段时间&#xff0c;因为项目的prettier的配置和eslint格式检查有些冲突&#xff0c;在其prettier官网和百度了一些配置相关的资料&#xff0c;在此做一些总结&#xff0c;以备不时之需。 Prettier官网 Prettier Prettier 是一种前端代码格式化工具&#xff0c;支持ja…

从ESG尽职调查、ESG立法与ESG诉讼谈ESG营销(01)

哈佛大学2024年中回顾全球ESG发展近况 作者&#xff1a;哈佛大学 编辑&#xff1a;数字化营销工兵 2024年上半年&#xff0c;环境、社会和治理&#xff08;ESG&#xff09;问题以及对方法的不同意见继续成为全球头条新闻。今年年初&#xff0c;公司及其利益相关者在ESG的支持…

AppenTalk | 不止于赛场,巴黎奥运会上的中国AI科技

当地时间8月11日&#xff0c;第33届夏季奥林匹克运动会在巴黎法兰西体育场落下帷幕。本届奥运会&#xff0c;中国体育代表团收获令人振奋的40金27银24铜总计91枚奖牌&#xff0c;其中金牌数更是创下了境外参加奥运会的最佳成绩。 在中国健儿闪耀奥运赛场时&#xff0c;中国AI科…

Transformer系列-4丨DETR模型和代码解析

1 前言 往期的文章中&#xff0c;笔者从网络结构和代码实现角度较为深入地和大家解析了Transformer模型、Vision Transformer模型&#xff08;ViT&#xff09;以及BERT模型&#xff0c;其具体的链接如下&#xff1a; 基础Transformer解析 ViT模型与代码解析 BERT模型与代码解…

嵌入式AI快速入门课程-K510篇 (第七篇 系统BSP开发)

第七篇 系统BSP开发 文章目录 第七篇 系统BSP开发1. 嵌入式Linux系统介绍嵌入式Linux系统组成产品形态嵌入式芯片启动流程Linux系统Linux系统框架嵌入式编译环境 2.嵌入式Linux开发准备手册文档开发工具配套硬件工程源码 3.嵌入式Linux开发组成概述编译工具链什么是工具链什么是…

[Linux#43][线程] 死锁 | 同步 | 基于 BlockingQueue 的生产者消费者模型

目录 1. 死锁 解决死锁问题 2. 同步 2.1 条件变量函数 cond 2.2 条件变量的使用&#xff1a; 3.CP 问题--理论 4. 基于 BlockingQueue 的生产者消费者模型 1. 基本概念 2.BlockQueue.hpp 基本设置&#xff1a; 生产关系控制&#xff1a; 消费关系的控制 ⭕思考点 …

公开整理-全国各省AI算力数据集(2000-2024年)

数据来源&#xff1a;本数据来源于&#xff0c;根据显卡HS编码筛选统计后获得时间跨度&#xff1a;2000-2024年数据范围&#xff1a;省级层面数据指标&#xff1a; 由于未发布2015至2016年的数据&#xff0c;因此该年份数据存在缺失。下表仅展示了部分指标及数据 年份 省份…

Mac apache 配置

命令 sudo apachectl -v //查看apache 版本 sudo apachectl -k start //启动apache sudo apachectl -k stop //停止apache sudo apachectl -k restart //重启apache配置 apache 的配置在 /etc/apache2/httpd.conf 默认情况下httpd.conf 为锁定状态&#xff0c;无法编辑 使用…

SAP B1 三大基本表单标准功能介绍-业务伙伴主数据(三)

背景 在 SAP B1 中&#xff0c;科目表、业务伙伴主数据、物料主数据被称为三大基本表单&#xff0c;其中的标准功能是实施项目的基础。本系列文章将逐一介绍三大基本表单各个字段的含义、须填内容、功能等内容。 附上 SAP B1 10.0 的帮助文档&#xff1a;SAP Business One 10…

单片机外部中断+定时器实现红外遥控NEC协议解码

单片机外部中断定时器实现红外遥控NEC协议解码 概述解码过程参考代码 概述 红外(Infrared&#xff0c;IR)遥控&#xff0c;是一种通过调制红外光实现的无线遥控器&#xff0c;常用于家电设备&#xff1a;电视机、机顶盒等等。NEC协议采用PPM(Pulse Position Modulation&#x…

敏感词替换为星号

编写一个函数&#xff0c;接收一个字符串参数&#xff0c;将其中 的敏感词替换为星号&#xff0c;并返回替换后的结果。 def getReplace(s):wordList["阿里巴巴","苹果","亚马逊","京东","字节","脸书"]for word …

月圆之夜梦儿时 贡秋竹唱响游子心声

自今年年初贡秋竹的首支单曲《逐梦》发布以来&#xff0c;其人气和传唱度便一直屡创新高&#xff0c;口碑上佳表现良好&#xff0c;网友们纷纷隔空喊话贡秋竹再发新作。时至今日&#xff0c;久经打磨的贡秋竹全新力作《低头思故乡》在千呼万唤中终于震撼首发&#xff01; 贡秋竹…

500以内开放式耳机哪款好?五款高性价比开放式耳机推荐

现在很多人会利用休闲时间进行锻炼&#xff0c;增强体质&#xff0c;在锻炼之前很多人会先入手一些运动设备&#xff0c;像慢跑鞋&#xff0c;还有臂环&#xff0c;运动手表等~当然运动耳机肯定也不能少&#xff0c;边运动边听音乐真的是一大享受&#xff01;但是哪种耳机比较适…

从零到一,全面掌握Apache DolphinScheduler发版流程,实战派经验分享!

引言 Apache DolphinScheduler的发版流程对于确保软件质量和社区协作至关重要&#xff0c;社区Committer王兴杰为我们详细介绍了Apache DolphinScheduler的发版流程&#xff0c;包括环境准备、流程文档、基础工具准备、依赖包确认等关键步骤&#xff0c;并指出了发版流程中可能…