实现响应式布局

响应式:页面根据用户设备环境(系统平台、屏幕尺寸、屏幕定向等)自动进行相应的响应和调整 实现:

  • 弹性布局(flex、grid)
  • 媒体查询
  • 相对单位(rem、百分比、vw/vh)

隐藏页面元素

  • display: none
  • visibility: hidden
  • opacity: 0
  • position: absolute 移到显示范围外(不推荐)
  • 宽高改为 0(不推荐)
display: nonevisibility: hiddenopacity: 0
页面中不存在存在存在
绑定事件不触发不触发触发
回流不会不会
重绘如果是 transition 时走独立合成层,不会重绘

视差滚动

多层背景以不同的速度移动,形成立体的运动效果

实现

background-attachment: fixed 让背景固定,不会随着元素的内容移动

padding-top/bottom 和 margin-top/bottom 的百分比相对于什么

相对于父元素的 width

原因:我们认为,正常流中的大多数元素都会足够高以包含其后代元素(包括外边距),如果一个元素的上下外边距是父元素的 height 的百分数,就可能导致一个无限循环,父元素的 height 会增加,以适应后代元素上下外边距的增加,而相应的,上下外边距因为父元素 height 的增加也会增加,无限循环。

一个比较经典的应用场景:移动端图片展示,盒子设高度为 0,宽度为 100%,padding-top 设置为 100%,这样这个盒子的高度始终会和盒子的宽度一样,之后里面的图片尺寸按照 1:1 设计,宽高都设置为 100% 就可以完美显示了。

line-height 的百分比相对于什么

自身的字体大小

两列布局

flex

.container {
  display: flex;
}
 
.left {
  flex: 1; /* 左列自适应剩余空间 */
}
 
.right {
  flex: 0 0 300px; /* 右列固定宽度 */
}

grid

.container {
  display: grid;
  grid-template-columns: 1fr 300px; /* 左列自适应,右列固定300px */
  gap: 20px;
}

浮动

.left {
  float: left;
  width: calc(100% - 320px); /* 总宽度减去右列+间隙 */
}
 
.right {
  float: right;
  width: 300px;
}
 
/* 清除浮动 */
.container::after {
  content: '';
  display: block;
  clear: both;
}

0.5px 的线

transform: scaleY(0.5)