搜索

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 码表 ( 可计时 )

轮廓 ( outline )

轮廓是一种会出现在元素“边框外缘”的一种“装饰线条”,具有不占空间又不受限矩形的特性,这篇教学会介绍控制轮廓样式的 outline、outline-style、outline-width 和 outline-color 用法,最后还会介绍什么是“不规则形状”的轮廓。

快速导览:

CSS 教学 - CSS outline 轮廓

教学影片

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

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

outline 轮廓 ( 缩写格式 )

轮廓是元素的一种“装饰”,会出现在“边框外缘”,跟元素边框有点类似,如果元素套用边框圆角的样式属性,轮廓也会出现边框圆角效果,但也有下列几种差别:

差异 轮廓 outline 边框 border
空间 不具空间,装饰性质 具有空间,会推挤其元素
形状 不一定要矩形 ( 行内容器有时会合并成不规则形状 ) 矩形
浏览器默认渲染 部分元素的 :focus 会有轮廓 部分元素会有边框
独立控制四个边缘 不行,一次控制全部轮廓 可以
不显示 使用 none 使用 none 或 hidden

CSS 教学 - 轮廓 outline - 认识 outline

如果要控制轮廓样式,最简单的方法可以使用“缩写形式”的 outline,一次设定“轮廓粗细、轮廓样式、轮廓颜色”,撰写语法如下:

div {
  border: 輪廓粗細 輪廓樣式 輪廓顏色;
}

虽然缩写形式很方便,但仍有一些相关规则:

  • 属性值使用“空白”分隔。
  • 属性值“没有先后顺序规则”。
  • 缩写形式如果没有轮廓样式,会自动套用 none,不会呈现轮廓。

下方的范例会让三个 div 呈现不同轮廓,并用 span 作为实际内容区域,从中可以注意轮廓包覆着边框,如果有设定边框圆角,轮廓也会变成圆角。

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

<!-- HTML 程式碼 -->
<div class="a"><span>apple</span></div>
<div class="b"><span>banana</span></div>
<div class="c"><span>oxxo</span></div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 200px;
    height: 50px;
    margin: 20px;
    padding: 10px;
    border: 5px solid red;
  }
  span {
    display: block;
    width: 100%;
    height: 100%;
    background: orange;
  }
  .a {outline: 2px solid #000;}
  .b {outline: 5px solid #000;}
  .c {
    border-radius: 30px;     /* 邊框圓角 */
    outline: 5px solid #000;
  }
</style>

CSS 教学 - 轮廓 outline - outline 撰写语法

由于 outline 只是装饰性质,不占任何空间,因此如果轮廓宽度较大,就会发生遮蔽其他元素的状况,下方范例呈现同样宽度的 border 与 outline 在空间上的差异。

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

<!-- HTML 程式碼 -->
<div class="a">border: 30px solid #f005;</div>
<span>hello oxxo!!</span>
<br>
<span>good morning</span>
<div class="b">outline: 30px solid #0f0;</div>
<span>hello oxxo!!</span>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 240px;
    height: 50px;
    margin-left: 30px;
  }
  span {font-size: 20px;}
  .a {border: 15px solid #f00;}
  .b {outline: 15px solid #0f0;}
</style>

CSS 教学 - 轮廓 outline - outline 不占任何空间

outline-style 轮廓样式

outline-style 可以“设定轮廓样式”,需要使用特定的“样式名称”,就能产生对应的“轮廓样式”,下方列出 CSS 支援的轮廓样式名称 ( 几乎和边框相同 ):

边框样式名称 说明
auto 让浏览器自动渲染轮廓样式 ( 每种浏览器和每个元素都不太相同 )。
none 没有轮廓,轮廓宽度为 0。
solid 实线。
double 双实线,双实线的总宽度为轮廓的宽度。
dotted 圆点虚线,圆点直径等于宽度,圆点间隔根据浏览器自行定义。
dashed 方形虚线,长度与间隔根据浏览器自行定义。
groove 凹槽雕刻效果轮廓。
ridge 浮雕效果轮廓。
inset 陷入效果轮廓。
outset 突起效果轮廓。

下方范例会使用多个 div,分别表现不同的轮廓样式。

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

<!-- HTML 程式碼 -->
<div class="a">solid</div>
<div class="b">double</div>
<div class="c">dotted</div>
<div class="d">dashed</div>
<div class="e">groove</div>
<div class="f">ridge</div>
<div class="g">inset</div>
<div class="h">outset</div>
<div class="i">auto</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 120px;
    padding: 20px 10px;
    margin: 15px;
    outline: 10px solid red;
    float: left;
  }
  .a {outline-style: solid;}
  .b {outline-style: double;}
  .c {outline-style: dotted;}
  .d {outline-style: dashed;}
  .e {outline-style: groove;}
  .f {outline-style: ridge;}
  .g {outline-style: inset;}
  .h {outline-style: outset;}
  .i {outline-style: auto;}
</style>

CSS 教学 - 轮廓 outline - outline-style 边框样式

outline-width 轮廓粗细

outline-width 可以“设定轮廓的粗细”,需要使用“具有长度单位”的数值,和边框粗细的差异是,边框粗细可以单独设定上下左右的粗细,而轮廓只能一次性设定全部轮廓的粗细,下方列出 CSS 支援的轮廓粗细长度单位:

延伸阅读:长度与角度单位

长度单位 性质 说明
px 绝对长度 像素。
em 相对长度 元素本身字体大小的几倍。
rem 相对长度 根元素字体大小的几倍。
thin 细 ( 关键字 ) 通常是 1px~2px,由浏览器决定。
medium 中等 ( 关键字 ) 通常是 2px~4px,由浏览器决定。
thick 粗 ( 关键字 ) 通常是 3px~5px,由浏览器决定。
pt、cm、mm、in 绝对长度 印刷单位。

下方范例使会使用五个 div,分别呈现不同轮廓粗细的设定方式。

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

<!-- HTML 程式碼 -->
<div class="a">outline-width: 10px;</div>
<div class="b">outline-width: 0.5em;</div>
<div class="c">outline-width: 1rem;</div>
<div class="d">outline-width: thin;</div>
<div class="e">outline-width: thick;</div>

<!-- CSS 程式碼 -->
<style>
  :root {
    font-size: 20px;
  }
  div {
    width: 200px;
    margin: 30px;
    padding: 10px;
    outline:10px solid #000;
    font-size: 14px;
  }
  .a {outline-width: 10px;}
  .b {outline-width: 0.5em;} /* 14px x 0.5 = 7px */
  .c {outline-width: 1rem;}  /* 20px x 1 = 20px */
  .d {outline-width: thin;}
  .e {outline-width: thick;}
</style>

CSS 教学 - 轮廓 outline - outline-width 轮廓粗细

outline-color 轮廓颜色

outline-color 可以“设定轮廓的颜色”,使用“具有颜色单位”的数值且只支援“单色”,每种颜色单位都可以添加不同程度的透明度,下方列出 CSS 支援的轮廓颜色单位。

延伸阅读:颜色单位、CSS 函数 ( 色彩模型 )

颜色单位 性质 范例
颜色名称 使用 CSS 支援色颜色名称 red、blue
transparent ( 关键字 ) 透明。 transparent
十六进制色码 红绿蓝十六进制色码。 #ffc900、#ffc90055
十六进制色码 ( 简写 ) 简写红绿蓝十六进制色码。 f00、f005
rgb() RGB 色彩模型 ( sRGB 色彩空间 )。 rgb(255, 0, 0, 0.5)
hsl() HSL 色彩模型 ( sRGB 色彩空间 )。 hsl(120, 50%, 30%, 0.5)
lab() Lab 色彩模型 ( CIELab 色彩空间 )。 lab(100% -125 125 / 0.2)
lch() LCH 色彩模型 ( CIELab 色彩空间 )。 lch(50% 50 180 / 0.3)
oklab() OkLab 色彩模型 ( OkLab 色彩空间 )。 oklab(0.3 -0.4 0.4 / 0.8)
oklch() OkLCH 色彩模型 ( OkLab 色彩空间 )。 oklch(0.3 0.2 0 / 0.5)
color() 指定色彩空间颜色。 color(display-p3 0.5 1 0)
color-mix() 颜色混合。 color-mix(in srgb, blue 60%, white)
light-dark() 深色与浅色模式。 light-dark(#fa0, #06f)

下方范例使会使用五个 div,分别呈现不同边框颜色的设定方式,颜色单位可以混合使用,只要最后可以正确计算出颜色数值就可以。

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

<!-- HTML 程式碼 -->
<div class="a">outline-color: orange;</div>
<div class="b">outline-color: #a0a;</div>
<div class="c">outline-color: #ff000077;</div>
<div class="d">outline-color: rgb(0,200,100);</div>
<div class="e">outline-color: hsl(50, 50%, 30%, 0.5);</div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 260px;
    margin: 30px;
    padding: 10px;
    outline:10px solid #000;
    font-size: 14px;
  }
  .a {outline-color: orange;}
  .b {outline-color: #a0a;}
  .c {outline-color: #ff000077;}
  .d {outline-color: rgb(0,200,100);}
  .e {outline-color: hsl(50, 50%, 30%, 0.5);}
</style>

CSS 教学 - 轮廓 outline - outline-color 轮廓颜色

outline-offset 轮廓位置

outline-offset 可以“设定轮廓位置”,使用“具有长度单位”的数值且,轮廓位置表示“轮廓和边框”的间距,正值往外负值往内,下方范例会呈现不同数值所影响的轮廓位置,可以看出如果设定为为 0 ( 默认值 ),轮廓会紧接边框外缘,根据正值或负值往外或往内移动。

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

<!-- HTML 程式碼 -->
<div class="a"><span>apple</span></div>
<div class="b"><span>banana</span></div>
<div class="c"><span>oxxo</span></div>
<div class="d"><span>oxxo</span></div>


<!-- CSS 程式碼 -->
<style>
  div {
    width: 200px;
    height: 50px;
    margin: 20px;
    padding: 10px;
    border: 10px solid red;
    outline: 2px dashed #000;
  }
  .a {outline-offset: 0;}
  .b {outline-offset: 10px;}
  .c {outline-offset: -10px;}
  .d {outline-offset: -30px;}
</style>

CSS 教学 - 轮廓 outline - outline-offset 轮廓位置

不规则形状的 outline

outline 最大的特色就是“不受限矩形”范围,这种现象在 inline 或 inline-* 等行内容器特别明显,虽然网页元素容器都是矩形,但行内元素的换行或不同高度间的组合,对于 outline 而言却会合并成一个“不规则形状”,因此就会替这个不规则形状加上轮廓。

下方的范例展示设定了 outline 的 div、span 里的 strong 以及整个 span,可以看见行内容器组合后的不规则轮廓,以及 div 仍保留矩形轮廓的效果。

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

<!-- HTML 程式碼 -->
<div><span>STEAM 教育學習網<strong>透過一系列免費且高品質的教學與範例</strong>,讓所有人都能輕鬆跨入 STEAM 的學習領域。</span></div>
<span>STEAM 教育學習網<img class="a" src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg">透過一系列免費且高品質的教學與範例</span>
  
<!-- CSS 程式碼 -->
<style>
  div {
    width: 240px;
    margin: 30px;
    padding: 10px;
    outline: 3px dotted #000;
  }
  strong {outline: 3px solid red;}
  span {outline: 3px dashed blue;}
  img {width:100px;}
</style>

CSS 教学 - 轮廓 outline - 行内容器不规则形状的 outline

但如果行内容器每一行的“行高太高”,造成上下行的间距超过了容器本身容器空间,也就是行框没有接触 ( 参考“文字行高、文字缩排” ),这时就会变成两个独立的容器空间,轮廓也就会分开。

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

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

<!-- CSS 程式碼 -->
<style>
  div {
    width: 240px;
    margin: 20px;
    padding: 10px;
    outline: 3px solid #000;
  }
  .a {line-height: 50px;}
  strong {outline: 5px solid red;}
  span {outline: 2px dashed blue;}
</style>

CSS 教学 - 轮廓 outline - 行内容器行高太高的 outline

小结

元素轮廓 outline 是一个满有意思的样式属性,虽然没有 border 的丰富多变,但其“不影响容器边界”的特性,更适合用来操作一些不希望影响排版的样式,相信对于网页设计一定很有帮助。

意见反馈

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