CSS Overflow

当元素内容超出自身宽高时,多出来的部分怎么处理?overflow 属性就是答案:它可以裁剪、隐藏多余内容,或让容器出现滚动条,是防止文字溢出、裁切图片、实现省略号的必备属性。

默认值 visible

不设置 overflow 时,超出的内容照样显示出来,只是"越界"而已,可能盖住后面的元素:

div {
  width: 200px;
  height: 60px;
  /* overflow 默认是 visible:超出的文字直接露在盒子外面 */
}

hidden:直接裁剪

超出容器的内容被裁掉且无法滚动查看,适合做固定大小的图片裁切(如头像、封面图):

.avatar {
  width: 80px;
  height: 80px;
  overflow: hidden;    /* 多余部分直接裁掉 */
  border-radius: 50%;
}
/* 效果:长方形图片被裁成圆形头像 */

scroll:总是显示滚动条

无论内容是否超出,都会显示滚动条(通常是横向、纵向各一条),保证容器可以滚动查看全部内容:

.news {
  width: 300px;
  height: 150px;
  overflow: scroll;    /* 内容过多时可上下滚动查看 */
}

auto:按需出现

只在内容真的超出时才出现滚动条,是最"聪明"、最推荐的取值:

.comment {
  max-height: 200px;
  overflow: auto;      /* 超过 200px 才出现纵向滚动条 */
}
/* 效果:短评论没有滚动条,长评论出现滚动条且不撑破版面 */

分别控制 x / y 方向

overflow-x 与 overflow-y 可以分别设置水平、垂直方向,例如代码区禁止纵向滚动、只允许横向滚动:

pre {
  overflow-x: auto;    /* 超长代码行横向滚动 */
  overflow-y: hidden;  /* 纵向固定不滚动 */
}

单行省略号小技巧

溢出处理常与文本省略配合:white-space 禁止换行 + overflow 隐藏 + text-overflow 打点,让超长标题变成"…":

.title {
  white-space: nowrap;       /* 不换行 */
  overflow: hidden;          /* 隐藏溢出内容 */
  text-overflow: ellipsis;   /* 溢出部分显示省略号 */
}
/* 效果:超长标题只显示一行,尾部自动变成 ... */

小结

overflow 决定内容溢出后的命运:visible 外露、hidden 裁剪、scroll 常显滚动条、auto 按需滚动,还可以按 x/y 方向分别控制;配合 text-overflow 可实现单行省略号,是保持版面整洁的常用手段。

笔记加载中…