搜索

CSS 教学

基本介绍

认识 CSS 开始使用 CSS CSS 语法规则 CSS 命名原则 CSS 常用样式属性

CSS 选择器

认识 CSS 选择器 优先级 ( 权重 ) 样式继承与联集 使用巢状结构语法 元素选择器 ID 和 Class 选择器 属性选择器 文件结构选择器 虚拟类别选择器 ( 结构 ) 虚拟类别选择器 ( 类型 ) 虚拟类别选择器 ( 输入 ) 虚拟类别选择器 ( 行为 ) 虚拟类别选择器 ( 超链接 ) 虚拟类别选择器 ( 逻辑 ) 虚拟类别选择器 ( 其他 ) 虚拟元素选择器 群组与组合选择器

数值与单位

全域关键字与文字数值 长度与角度单位 位置名称与时间单位 特殊样式属性 ( all、appearance)

规则与定义

变数 ( Variables ) 媒体查询 ( @media ) 容器查询 ( @container ) 自订属性值 ( @property ) 导入样式 ( @import ) 分层优先级 ( @layer ) 选择器作用域 ( @scope ) 定义字型 ( @font-face ) 计数规则 ( @counter-style ) 打印网页 ( @page )

函数类型

数学计算 文字与清单计数 形状与线段 路径 ( path )

颜色与滤镜

颜色单位 色彩模型 相对颜色 渐层色 图像滤镜 ( filter ) 背景滤镜 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字与段落

设定字型 ( font-family ) 使用外部字型 文字尺寸 文字样式 ( 常用 ) 文字样式 ( 其他实用 ) 文字样式 ( 特殊用途 ) 文字换行 文字空白与 Tab 大小 文字行高与缩排 文字水平与垂直对齐 文字书写方向 文字自动分栏 使用 Color Font ( 彩色字型 ) 使用 Icon Font ( 图示文字 ) 制作自己的 Icon Font 显示生成内容与引号

元素容器

容器显示类型 ( display ) 元素 display 对照表 盒子模型 ( Box Model ) 宽高尺寸 ( width、height ) 显示与比例 ( box-sizing、aspect-ratio ) 内边距 ( padding ) 外边界 ( margin ) 边框 ( border ) 边框圆角 ( border-radius ) 图像边框 ( border-image ) 轮廓 ( outline ) 内容溢出与裁切 ( overflow ) 内容范围 ( contain ) 可见性与透明度 缩放与调整 ( zoom、resize )

背景与阴影

背景 ( 背景色、背景裁切 ) 背景图 ( 定位、尺寸 ) 背景图 ( 固定、重复 ) 背景图 ( 多重背景、混合 ) 背景缩写 ( background ) 容器阴影 ( box-shadow )

清单与表格

清单样式 清单计数器 表格基本样式 表格边框重叠与间距 表格内容宽度与对齐

基本排版与定位

元素排版方式 浮动 ( float ) 浮动形状 ( shape-* ) 定位 ( position ) 逻辑属性 ( logical properties ) 重置 CSS ( Reset CSS ) 水平置中技巧 垂直置中技巧

Flex 弹性排版

Flexbox 弹性盒子 Flex 对齐方式 Flex 弹性伸缩

Grid 网格排版

Grid 网格容器与格线 Grid 网格空间与命名 Grid 网格流向与间距 Grid 排列网格项目 Grid 项目对齐与顺序

转场与动画

转场 ( transition ) 转场触发事件 动画 ( animation ) 自订动画路径 ( offset ) 动画触发事件 多重动画的权重与顺序 动画进度控制 ( timeline )

变形、裁切与遮罩

裁切路径 ( clip-path ) 图像遮罩 ( mask ) 对象填满方式与定位 转换函数 ( transform ) 平移、旋转与缩放 3D 转换与透视

视窗与用户行为

卷轴样式 ( scrollbar ) 拉霸、滑杆样式 ( slider ) 鼠标光标图示 ( cursor ) 鼠标事件 ( pointer-events ) 用户选取 ( user-select ) 卷动行为 ( scroll、overscroll ) 打印换页 ( break-* )

CSS 预处理器

认识 CSS 预处理器 Less ( 安装、开始使用 ) Less ( 巢状结构、选择器 ) Less ( 变数、import ) Less ( Extend、Mixin ) Less ( 逻辑、循环、函数 )

范例效果

CSS 多重绕圈 3D 动画 CSS 圆饼图 CSS 跑马灯 Google 加载动画 电子时钟数字 渐层色的转场与动画 渐层色制作星空背景 渐层色边框 渐层色制作图案背景 不规则形状动画 弹跳的正方形动画 3D 正多面体 超链接底线动画效果 恶心黏黏球效果 CSS 视差滚动效果 卷轴控制放射形选单 卷轴改变文字背景色 CSS 页面卷动进度条 CSS 水波效果 圆点加载动画 ( 阴影动画 ) 字母翻牌效果 探照灯动画 立体双色跑马灯 楼梯文字动态效果 渐层色文字、双色文字 流动色彩文字 空心文字、文字水波背景 左右倾斜的背景效果 Icon 图示形状变换 故障文字效果 按钮的多种 hover 效果 点击展开或收折的选单 点击爱心图案放射效果 纯 CSS 数字加载进度条 纯 CSS 码表 ( 可计时 )

内容溢出与裁切 ( overflow )

当区块容器元素的内容超过了容器的范围,就可能会发生“overflow 溢出”的状况,透过 CSS 的 overflow 样式属性,就能定义是否裁切溢出的内容,或将溢出的内容隐藏并产生卷轴,这篇教学会介绍 overflow 样式相关属性值,以及延伸的 overflow-x、overflow-y 样式属性用法。

快速导览:

CSS 教学 - 内容溢出与裁切 overflow

教学影片

搭配教学影片一起阅读,效果会更好!欢迎大家订阅 STEAM 教育学习网的 Youtube 频道。

前往:https://www.youtube.com/@steam.oxxostudio

overflow 撰写语法

当网页的区块容器元素 ( block 显示属性 ) 包含内容时,内容常会产生溢出或撑开元素等显示行为,为了更方便的管理这些显示行为,CSS 提供了 overflow 样式属性,透过这个样式可以定义“可以设定宽高的 block 元素内容溢出后的行为”的样式属性,overflow 样式属性有下列的属性值:

属性值 说明
visible 完整显示内容,会发生溢出或撑开容器的状况 ( 默认值 )。
hidden 超过元素容器范围的内容就隐藏。
scroll 强制出现卷轴,内容超过范围时可用卷轴卷动浏览。
auto 元素内容没有超过容器范围时不会出现卷轴,超过容器范围时出现卷轴。

下方展示最基本的范例,当可以设定宽高的元素设定了 overflow: hidden,过长的内容就会溢出范围并且隐藏。

线上展示:https://codepen.io/oxxo/pen/RNWjEgV

<!-- HTML 程式碼 -->
<div>我是 block,Hello World!!</div>
<br>
<em>我是 inline-block,Hello World!!</em>
<br>
<span>我是 inline,Hello World!!</span>

<!-- CSS 程式碼 -->
<style>
  div, span, em {
    width: 150px;
    height: 50px;
    border: 1px solid #000;
    white-space: nowrap;       /* 強制不換行 */
    overflow: hidden;          /* 溢出後隱藏 */
  }
  em {
    display: inline-block;     /* 改變顯示類型 */
  }
</style>

CSS 教学 - 内容溢出与裁切 overflow - 基本范例

属性值 visible 和 hidden

overflow 的属性值 visible 和 hidden 分别表示元素的内容“完整显示”和“超出范围就隐藏”,隐藏的内容不代表消失,而是跑到了元素容器范围之外,下方的范例设定 overflow: hidden 的元素内容如果超过范围就会隐藏。

线上展示:https://codepen.io/oxxo/pen/JjQeKqx

<!-- HTML 程式碼 -->
<div>STEAM 教育學習網秉持著 STEAM/STEM 的精神,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。</div>
<div class="a">STEAM 教育學習網秉持著 STEAM/STEM 的精神,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。</div>


<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    width: 200px;
    height: 70px;
    padding: 10px;
    margin: 10px;
  }
  .a {
    margin-top: 60px;
    overflow: hidden;
  }
</style>

CSS 教学 - 内容溢出与裁切 overflow - visible 和 hidden

如果将内容换成具有长宽尺寸的“图片”,溢出和使用 overflow: hidden 裁切的效果就会更为明显 ( 水平垂直都发生溢出和裁切 )。

线上展示:https://codepen.io/oxxo/pen/mdZQEZJ

<!-- HTML 程式碼 -->
<div><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="a"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    width: 200px;
    height: 70px;
    margin: 10px;
  }
  img {
    opacity: .8;     /* 讓圖片變成半透明,方便觀察 */
    border: 1px solid red;
  }
  .a {
    margin-top: 230px;
    overflow: hidden;
  }
</style>

CSS 教学 - 内容溢出与裁切 overflow - 图片溢出范围

属性值 scroll

overflow 的属性值 scroll 会在元素容器“强制加上卷轴”,如果内容的宽高不足以产生卷轴,也会保留卷轴所需的空间,元素内部空间也会往内缩,下方范例呈现加上 overflow: scroll 的效果。

线上展示:https://codepen.io/oxxo/pen/bGPQePg

<!-- HTML 程式碼 -->
<div>預設值</div>
<div class="a">overflow: scroll;</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    width: 200px;
    height: 70px;
    margin: 10px;
    background: orange;
  }
  .a {
    overflow: scroll;
  }
</style>

CSS 教学 - 内容溢出与裁切 overflow - scroll 保留卷轴所需的空间

元素设定 overflow:scroll 之后,内容如果是没有指定换度的 inline 行内容器元素,会将宽度限制在父元素的容器宽度里,若高度超过容器高度就会产生卷轴,而如果是图片或区块容器元素,超过父元素容器范围内容就不会显示,并出现卷轴。

线上展示:https://codepen.io/oxxo/pen/KKjrMjX

<!-- HTML 程式碼 -->
<div class="a">STEAM 教育學習網秉持著 STEAM/STEM 的精神,透過一系列免費且高品質的教學與範例,讓所有人都能輕鬆跨入 STEAM 的學習領域。</div>
<div class="a"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    width: 150px;
    height: 150px;
    margin: 10px;
    overflow: scroll;
  }
</style>

CSS 教学 - 内容溢出与裁切 overflow - inline 或 block 元素设定 overflow:scroll

如果要单独显示 x y 方向的卷轴,除了可以透过 overflow-x 或 overflow-y 的样式属性,也可以在 overflow 撰写“两个属性值”,就会分别代表 x y 方向是否要出现卷轴或是否隐藏内容,如果属性值是 hidden 表示不会出现卷轴与卷轴空间,如果属性值是 auto 表示会自动出现卷轴,没有出现卷轴时不会有卷轴空间,如果属性值为 scroll 则是会强制出现卷轴空间。

  • 如果只撰写一个属性值,等同两个相同属性值,例如 hidden 等于 hidden hidden,会同时隐藏 x y 方向溢出内容。
  • 只要有一个属性值出现 auto、hidden 或 scroll,容器就会忽略 visible,隐藏溢出内容。

下方范例使用六个 div,分别呈现两个属性值所产生的不同效果,

线上展示:https://codepen.io/oxxo/pen/rNEQLEK

<!-- HTML 程式碼 -->
<div class="a">下方出現捲軸空間</div>
<div class="b">自動產生捲軸,沒有產生時隱藏捲軸空間。</div>
<div class="c">自動產生捲軸,沒有產生時隱藏捲軸空間。</div>
<div class="d"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="e"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="f"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>


<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    width: 200px;
    height: 100px;
    margin: 5px;
    background: yellow;
    float: left;
  }
  .a {overflow: scroll hidden;}  /* 水平強制出現捲軸 */
  .b {overflow: visible hidden;} /* 水平自動出現捲軸 */
  .c {overflow: auto hidden;}    /* 水平自動出現捲軸 */
  .d {overflow: hidden scroll;}  /* 垂直強制出現捲軸 */
  .e {overflow: hidden visible;} /* 垂直自動出現捲軸 */
  .f {overflow: scroll auto;}    /* 水平強制出現捲軸,垂直自動出現捲軸 */
</style>

CSS 教学 - 内容溢出与裁切 overflow - 使用两个属性值

属性值 auto

overflow 的属性值 auto 会产生“自动隐藏和显示”的卷轴,有别于 scroll 会强制出现卷轴空间,设定 auto 之后只有在内容超过范围时,才会产生卷轴,其他情形不会出现卷轴空间,下方范例的三个 div 会呈现设定 auto 的不同结果。

线上展示:https://codepen.io/oxxo/pen/qBzQNzv

<!-- HTML 程式碼 -->
<div class="a"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="b"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="c"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    width: 200px;
    height: 100px;
    margin: 10px;
    background: yellow;
    overflow: auto;
  }
  .a img{width: 50px;}  /* 沒有捲軸 */
  .b img{width: 100px;} /* 垂直方向有捲軸 */
  .c img{width: 200px;} /* 垂直水平都有捲軸 */
</style>

CSS 教学 - 内容溢出与裁切 overflow - 属性值 auto

overflow-x、overflow-y 撰写语法

除了使用 overflow 两个属性值设定 x y 轴的内容溢出显示方式,也可以使用 overflow-x、overflow-y 单独设定 x y 轴的内容溢出显示方式,使用的属性值和 overflow 完全相同,设定后就等同 overflow 设定两个属性值,下方列出两者产生相同结果的写法:

overflow-x、overflow-y 写法 等同 overflow 两个属性值写法
overflow-x: hidden; overflow: hidden visible;
overflow-x: auto; overflow: auto visible;
overflow-y: scroll; overflow: visible scroll;
overflow-x: hidden;
overflow-y: hidden;
overflow: hidden hidden;
overflow-x: auto;
overflow-y: hidden;
overflow: auto hidden;

下方范例呈现 overflow-x、overflow-y 写法和 overflow 两个属性值写法所呈现的相同效果。

线上展示:https://codepen.io/oxxo/pen/mdZQENJ

<!-- HTML 程式碼 -->
<div class="a"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="aa"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="b"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="bb"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="c"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
<div class="cc"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>


<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
    width: 200px;
    height: 100px;
    margin: 10px 10px 30px;
    background: yellow;
    float: left;
  }
  .a{overflow-x: auto;}
  .aa{overflow: auto visible;}
  .b{overflow-x: hidden;}
  .bb{overflow: hidden visible;}
  .c{
    overflow-x: auto;
    overflow-y: scroll;
  }
  .cc{overflow: auto scroll;}
</style>

CSS 教学 - 内容溢出与裁切 overflow - overflow-x、overflow-y 撰写语法

overflow 与 position 定位关系

如果 overflow 属性值不为 visible 的元素,里面包含的子元素定位样式 position 是“absolute 或 sticky”,都会被 overflow 所影响而造成内容裁切,且 sticky 的效果也会消失,下方范例可以看出绝对定位图片仍然会因为内容溢出而被裁切,黏贴定位图片在 overflow:auto 的状态下也会失去黏贴定位的效果。

线上展示:https://codepen.io/oxxo/pen/BagGzXL

<!-- HTML 程式碼 -->
<main>
  overflow: auto; + 絕對定位的圖片
  <div class="a"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
  overflow: visible; + 黏貼定位圖片
  <div class="b"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
  overflow: auto; + 黏貼定位圖片
  <div class="c"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
</main>


<!-- CSS 程式碼 -->
<style>
  main {height: 2000px;}
  div {
    border: 1px solid #000;
    width: 200px;
    height: 150px;
    margin: 10px 10px 30px;
    background: yellow;
  }
  .a{
    overflow: auto;
    position:relative;
  }
  .a img {
    top: -100px;
    position: absolute;
  }
  .b{overflow: visible;}
  .b img, .c img {
    width: 300px;
    height:100px;
    top: 50px;
    position: sticky;   /* 黏貼定位 */
  }
  .c{overflow: auto;}
</style>

CSS 教学 - 内容溢出与裁切 overflow - overflow 与 position 定位关系

不过使用 absolute 需要注意,如果设定 overflow 的元素是“非 static 元素”,内容会被元素的 overflow 所影响,反之则不会被影响,简单整理如下表所示:

内容定位方式 被父元素 overflow 影响
fixed 不会影响,可能会溢出内容
absolute ( 父元素是 static 元素 ) 不会影响,可能会溢出内容
absolute ( 父元素不是 static 元素 ) 会影响,隐藏溢出内容
sticky 会影响,隐藏溢出内容,且 sticky 效果可能会消失
relative 会影响,隐藏溢出内容

下方范例的 div 不设定 position ( 使用默认值 static ),而外层 main 设定为 relative,这时 div 里的图片如果进行 absolute 绝对定位,就会参考 main 的位置,而不受到 div 影响,而 position:fixed 会参考页面视窗定位,不会受到 overflow 影响 ( 参考“定位 position”)

线上展示:https://codepen.io/oxxo/pen/MWMzeNQ

<main>
  div 有設定 relative
  <div class="a"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
  div 沒有設定 relative
  <div class="b"><img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg" alt=""></div>
</main>


<!-- CSS 程式碼 -->
<style>
  main {
    border: 1px solid red;
    width:360px;
    height:420px;
    position:relative;   /* main 有設定 relative */
  }
  div {
    border: 1px solid #000;
    width: 200px;
    height: 150px;
    margin: 10px 10px 30px;
    background: yellow;
  }
  .a{
    overflow: auto;
    position:relative;   /* .a 有設定 relative */
  }
  .b{overflow: auto; }   /* .b 沒有設定 relative */
  img {
    border: 1px dotted #000;
    bottom: -70px;
    right: -70px;
    position: absolute;
  }
</style>

CSS 教学 - 内容溢出与裁切 overflow - overflow 与使用 absolute 元素的关系

小结

overflow 也是排版中常见的样式属性,甚至许多设计师会利用这个样式属性,将 div 伪装成 textarea 使用,或透过这个样式属性隐藏部分内容或图案,只要学会了 overflow 的用法,就能让网页排版更有灵活操控的弹性。

意见反馈

微信二维码 微信扫码关注 抖音二维码 抖音扫码关注