其他分享
首页 > 其他分享> > 【第二届青训营-寒假前端场】- 理解CSS之布局(layout)笔记

【第二届青训营-寒假前端场】- 理解CSS之布局(layout)笔记

作者:互联网

将自己在掘金上发的笔记搬了过来:掘金笔记:布局(layout)个人博客

布局(layout)

当对一个文档进行布局(lay out)的时候,浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型CSS basic box model),将所有元素表示为一个个矩形的盒子(box)。CSS 决定这些盒子的大小、位置以及属性(例如颜色、背景、边框尺寸…)。
每个盒子由四个部分(或称区域)组成,其效用由它们各自的边界(Edge)所定义(原文:defined by their respective edges,可能意指容纳、包含、限制等)。如图,与盒子的四个组成区域相对应,每个盒子有四个边界:内容边界 Content edge内边距边界 Padding Edge边框边界 Border Edge外边框边界 Margin Edge

width

指定content box 宽度,可取值为长度、百分数、auto等,百分数是相对于content box的宽度。

height

指定content box 高度可取值为长度、百分数、auto等,百分数是相对于content box的高度。weight/height都需注意的若使用百分比则其content box需指定宽度/高度否则不生效。

padding

指定四个方向上的内边距。其百分比是相对于容器宽度,说明见 padding - CSS(层叠样式表) | MDN (mozilla.org)

margin

指定四个方向上的外边距。其百分比是相对于容器宽度,说明见margin - CSS(层叠样式表) | MDN (mozilla.org)

border

指定边框,border-width指定宽度、border-style指定类型(实线/虚线)、border-color指定边框颜色。通常直接将三者结合简写为 border ,MDN描述见border - CSS(层叠样式表) | MDN (mozilla.org)

box-sizing

box-sizing - CSS(层叠样式表) | MDN (mozilla.org)

CSS 盒子模型的默认定义里,对一个元素所设置的 widthheight 只会应用到这个元素的内容区。如果这个元素有任何的 borderpadding ,绘制到屏幕上时的盒子宽度和高度会加上设置的边框和内边距值。这意味着当你调整一个元素的宽度和高度时需要时刻注意到这个元素的边框和内边距。当我们实现响应式布局时,这个特点尤其烦人。

box-sizing 属性可以被用来调整这些表现:

overflow

overflow - CSS(层叠样式表) | MDN (mozilla.org)

CSS属性 overflow 定义当一个元素的内容太大而无法适应 块级格式化上下文 时候该做什么。它是 overflow-xoverflow-y简写属性

将其设置为auto,则当内容过多的时候会显示滚动条,否则不显示。而为使 overflow有效果,块级容器必须有一个指定的高度(height或者max-height)或者将white-space设置为nowrap

块级元素

块级元素 - HTML(超文本标记语言) | MDN (mozilla.org)

块级元素占据其父元素(容器)的整个水平空间,垂直空间等于其内容高度,通常浏览器会在块级元素前后另起一个新行。

行级元素

行内元素 - HTML(超文本标记语言) | MDN (mozilla.org)

一个行内元素只占据它对应标签的边框所包含的空间
行级元素和其他行级元素一起,不使用盒模型中的width、height属性

说到display属性,其说明display - CSS(层叠样式表) | MDN (mozilla.org)

display 属性可以设置元素的内部和外部显示类型 display types。元素的外部显示类型 outer display types 将决定该元素在流式布局中的表现(块级或内联元素);元素的内部显示类型 inner display types 可以控制其子元素的布局(例如:flow layoutgridflex)。

常规流(Normal Flow)

行内格式化上下文(Inline formatting context)

行内格式化上下文(Inline formatting context) - CSS(层叠样式表) | MDN

行内格式化上下文是一个网页的渲染结果的一部分。其中,各行内框(inline boxes)一个接一个地排列,其排列顺序根据书写模式(writing-mode)的设置来决定:

  • 对于水平书写模式,各个框从左边开始水平地排列
  • 对于垂直书写模式,各个框从顶部开始水平地排列

在下面给出的例子中,带黑色边框的两个(<div>)元素组成了一个块级格式化上下文(block formatting context),其中的每一个单词都参与一个行内格式化上下文中。水平书写模式下的各个框水平地排列,垂直书写模式下的各个框垂直地排列。

image.png

块级格式化上下文(Block Formatting Context)

块格式化上下文 | MDN

FlexBox

flex 布局的基本概念 | MDN

重点再讲一下主轴和交叉轴的对齐,以默认的由右往左排列(row),其主轴为水平轴,交叉轴为垂直轴。其中主轴(justify-content)的对齐方式有以下几种(初始值为flex-start ):

交叉轴的对齐方式如下(初始值为stretch):

如果想给flex中的某个元素搞特殊,那么可以给他设置一个align-self属性,如图

image.png

order 可以设置元素们在布局时的顺序

image.png

那如果网页拉伸或者缩小,flex容器中的内容会如何变呢?

关于flex布局,之前在codepen看到过一个演示项目,可以了解其每个属性的相应作用,强烈推荐自己多试试:Flexbox playground (codepen.io)

image.png

Grid布局

Grid - 术语表 | MDN (mozilla.org)

照着课上写的一个小demo:Grid (codepen.io),也算是一个直观的例子了。

#container {
  width: 300px;
  height: 500px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr 1fr 1fr;
}

image.png

.a {
  grid-row-start: 1;
  grid-column-start: 1;
  grid-row-end: 3;
  grid-column-end: 3;
}

可简写为:

.a {
  grid-area:1/1/3/3;
}

如图,可以发现A占据了两行两列
image.png

.a {
  grid-area:2/2/4/4;
}
.b {
  grid-area:1/1/3/3;
}

image.png

浮动(float)

早期的时候,图文环绕利用float实现,现在只需了解即可。详细的还是看float - CSS(层叠样式表) | MDN (mozilla.org)

position定位

position 属性用于指定一个元素在文档中的定位方式。toprightbottomleft 属性则决定了该元素的最终位置。

position有如下几种定位类型:

相对定位(relative)

position:relative

绝对定位(absolute)

position:absolute

建议及感想

也算是给自己CSS学习的一个梳理,关于以上布局,主要还是多用,多查,在实践中成长,用多了自然而然的就记住了,然后平时看到感兴趣的前端项目也要进行学习,看看优秀的项目是如何进行布局的。

标签:flex,layout,元素,grid,青训营,MDN,上下文,CSS
来源: https://blog.csdn.net/qq_45890533/article/details/122629094