不只是面试 - CSS篇

88 阅读2分钟

盒模型

浏览器渲染引擎根据盒模型计算每个元素的大小(矩形):content + padding + border + margin。

box-sizing 定义了如何计算元素的总宽高:

  • content-boxwidthheight 定义了元素 content 的大小,根据盒模型,总宽高为 widthheight 分别叠加上 paddingborder
  • border-boxwidthheight 为元素的 content + padding + border,根据盒模型,总宽高即为 widthheight

参考

BFC

块级格式上下文常见的创建情况:

  • 浮动元素(float 不为 none
  • 绝对定位元素(positionabsolutefixed
  • overflow 不是 visibleclip 的块元素
  • displayflow-rootinline-blocktable-cellflex

作用:

参考

Flex 布局

需要了解主轴和交叉轴。

flex 容器常用属性:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items

flex 项目成员常用属性:

  • flex-grow
  • flex-shrink
  • flex-basis
  • flex

flex 属性常见缩写:

  • flex: initial = flex: 0 1 auto
  • flex: auto = flex: 1 1 auto
  • flex: none = flex: 0 0 auto
  • flex: <正数> = flex: <正数> 1 0

参考

水平垂直居中

flex 布局:

div {
  display: flex;
  align-items: center;
  justify-content: center;
}

绝对定位 + transform:

div {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

table-cell:

div {
  display: table-cell;
  text-align: center;
  vertical-align: middle;
}

扩展:

移动端自适应

Viewport

一些移动设备和其他窄屏幕通常在比屏幕宽的视口中呈现页面,例如 980px,然后缩小渲染结果到可以同时看到所有内容。这会导致一些媒体查询条件无法按预期生效。

我们通常添加以下 <meta> 标签表示使用设备宽度作为视口宽度,并且初始化缩放为 1:

<meta name="viewport" content="width=device-width, initial-scale=1" />

媒体查询(Media Queries)

/* 当浏览器宽度至少在 600px 及以上时 */
@media screen and (min-width: 600px) {
}

/* 当设备 DPR 为2时的样式 */
@media screen and (-webkit-min-device-pixel-ratio: 2) {
}

布局

  • Flexbox
  • CSS Grid

相对单位

  • rem
  • vw/vh(注意兼容性)

响应式图片

<picture>
  <source
    srcset="hzfe-avatar-desktop.png, hzfe-avatar-desktop-2x.png 2x"
    media="(min-width: 990px)"
  />
  <source
    srcset="hzfe-avatar-tablet.png, hzfe-avatar-tablet-2x.png 2x"
    media="(min-width: 750px)"
  />
  <source
    srcset="hzfe-avatar-mobile.png, hzfe-avatar-mobile-2x.png 2x"
    media="(min-width: 375px)"
  />
  <img
    srcset="hzfe-avatar.png, hzfe-avatar-2x.png 2x"
    src="hzfe-avatar.png"
    alt="hzfe-default-avatar"
  />
</picture>

参考