Ionic基础组件 #
一、按钮组件(Button) #
1.1 基本用法 #
html
<!-- 基本按钮 -->
<ion-button>默认按钮</ion-button>
<!-- 不同类型 -->
<ion-button>Default</ion-button>
<ion-button fill="solid">Solid</ion-button>
<ion-button fill="outline">Outline</ion-button>
<ion-button fill="clear">Clear</ion-button>
1.2 按钮颜色 #
html
<!-- 预设颜色 -->
<ion-button color="primary">Primary</ion-button>
<ion-button color="secondary">Secondary</ion-button>
<ion-button color="tertiary">Tertiary</ion-button>
<ion-button color="success">Success</ion-button>
<ion-button color="warning">Warning</ion-button>
<ion-button color="danger">Danger</ion-button>
<ion-button color="light">Light</ion-button>
<ion-button color="medium">Medium</ion-button>
<ion-button color="dark">Dark</ion-button>
1.3 按钮尺寸 #
html
<!-- 不同尺寸 -->
<ion-button size="small">Small</ion-button>
<ion-button size="default">Default</ion-button>
<ion-button size="large">Large</ion-button>
1.4 按钮形状 #
html
<!-- 不同形状 -->
<ion-button shape="round">Round</ion-button>
<ion-button shape="default">Default</ion-button>
1.5 按钮扩展 #
html
<!-- 块级按钮 -->
<ion-button expand="block">Block Button</ion-button>
<!-- 全宽按钮 -->
<ion-button expand="full">Full Button</ion-button>
1.6 带图标的按钮 #
html
<!-- 图标在左侧 -->
<ion-button>
<ion-icon slot="start" name="star"></ion-icon>
收藏
</ion-button>
<!-- 图标在右侧 -->
<ion-button>
发送
<ion-icon slot="end" name="send"></ion-icon>
</ion-button>
<!-- 仅图标按钮 -->
<ion-button>
<ion-icon slot="icon-only" name="heart"></ion-icon>
</ion-button>
1.7 按钮状态 #
html
<!-- 禁用状态 -->
<ion-button disabled>禁用按钮</ion-button>
<!-- 加载状态 -->
<ion-button>
<ion-spinner slot="start" name="crescent"></ion-spinner>
加载中...
</ion-button>
1.8 按钮组 #
html
<!-- 按钮组 -->
<ion-buttons>
<ion-button>取消</ion-button>
<ion-button>确定</ion-button>
</ion-buttons>
<!-- 工具栏按钮 -->
<ion-toolbar>
<ion-buttons slot="start">
<ion-button>
<ion-icon name="menu"></ion-icon>
</ion-button>
</ion-buttons>
<ion-title>标题</ion-title>
<ion-buttons slot="end">
<ion-button>
<ion-icon name="search"></ion-icon>
</ion-button>
</ion-buttons>
</ion-toolbar>
1.9 样式定制 #
scss
// 自定义按钮样式
ion-button {
--background: #3880ff;
--background-hover: #4285f4;
--background-activated: #3367d6;
--background-focused: #2962ff;
--color: #ffffff;
--color-hover: #ffffff;
--color-activated: #ffffff;
--color-focused: #ffffff;
--border-radius: 8px;
--border-width: 1px;
--border-style: solid;
--border-color: transparent;
--box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
--padding-top: 12px;
--padding-bottom: 12px;
--padding-start: 20px;
--padding-end: 20px;
}
二、图标组件(Icon) #
2.1 基本用法 #
html
<!-- 基本图标 -->
<ion-icon name="heart"></ion-icon>
<!-- 不同尺寸 -->
<ion-icon name="heart" size="small"></ion-icon>
<ion-icon name="heart" size="large"></ion-icon>
<!-- 指定大小 -->
<ion-icon name="heart" style="font-size: 32px;"></ion-icon>
2.2 图标颜色 #
html
<!-- 预设颜色 -->
<ion-icon name="heart" color="primary"></ion-icon>
<ion-icon name="heart" color="danger"></ion-icon>
<ion-icon name="heart" color="success"></ion-icon>
<!-- 自定义颜色 -->
<ion-icon name="heart" style="color: #ff0000;"></ion-icon>
2.3 图标类型 #
Ionic使用Ionicons图标库:
html
<!-- 实心图标 -->
<ion-icon name="heart"></ion-icon>
<!-- 线框图标 -->
<ion-icon name="heart-outline"></ion-icon>
<!-- 常用图标 -->
<ion-icon name="home"></ion-icon>
<ion-icon name="search"></ion-icon>
<ion-icon name="person"></ion-icon>
<ion-icon name="settings"></ion-icon>
<ion-icon name="notifications"></ion-icon>
<ion-icon name="mail"></ion-icon>
<ion-icon name="call"></ion-icon>
<ion-icon name="camera"></ion-icon>
<ion-icon name="image"></ion-icon>
<ion-icon name="location"></ion-icon>
2.4 图标槽位 #
html
<!-- 列表项图标 -->
<ion-item>
<ion-icon name="mail" slot="start"></ion-icon>
<ion-label>邮件</ion-label>
</ion-item>
<!-- 按钮图标 -->
<ion-button>
<ion-icon slot="start" name="download"></ion-icon>
下载
</ion-button>
<!-- 输入框图标 -->
<ion-item>
<ion-icon name="search" slot="start"></ion-icon>
<ion-input placeholder="搜索..."></ion-input>
</ion-item>
2.5 动画图标 #
html
<!-- 旋转动画 -->
<ion-icon name="refresh" class="rotating"></ion-icon>
<!-- 脉冲动画 -->
<ion-icon name="heart" class="pulsing"></ion-icon>
scss
// 旋转动画
.rotating {
animation: rotate 1s linear infinite;
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
// 脉冲动画
.pulsing {
animation: pulse 1s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.2); }
}
三、加载组件(Spinner) #
3.1 基本用法 #
html
<!-- 默认加载器 -->
<ion-spinner></ion-spinner>
<!-- 不同类型 -->
<ion-spinner name="crescent"></ion-spinner>
<ion-spinner name="dots"></ion-spinner>
<ion-spinner name="bubbles"></ion-spinner>
<ion-spinner name="circles"></ion-spinner>
<ion-spinner name="lines"></ion-spinner>
<ion-spinner name="lines-small"></ion-spinner>
3.2 加载器颜色 #
html
<!-- 预设颜色 -->
<ion-spinner color="primary"></ion-spinner>
<ion-spinner color="secondary"></ion-spinner>
<ion-spinner color="danger"></ion-spinner>
<!-- 自定义颜色 -->
<ion-spinner style="color: #ff0000;"></ion-spinner>
3.3 加载器尺寸 #
html
<!-- 不同尺寸 -->
<ion-spinner style="transform: scale(0.5);"></ion-spinner>
<ion-spinner style="transform: scale(1);"></ion-spinner>
<ion-spinner style="transform: scale(1.5);"></ion-spinner>
3.4 加载状态 #
html
<!-- 页面加载 -->
<ion-content>
<div class="loading-container" *ngIf="isLoading">
<ion-spinner name="crescent"></ion-spinner>
<p>加载中...</p>
</div>
<div *ngIf="!isLoading">
<!-- 内容 -->
</div>
</ion-content>
3.5 样式定制 #
scss
ion-spinner {
--color: #3880ff;
width: 50px;
height: 50px;
}
.loading-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100%;
}
四、徽章组件(Badge) #
4.1 基本用法 #
html
<!-- 基本徽章 -->
<ion-badge>99</ion-badge>
<!-- 带颜色 -->
<ion-badge color="primary">新</ion-badge>
<ion-badge color="danger">99+</ion-badge>
<ion-badge color="success">完成</ion-badge>
4.2 徽章位置 #
html
<!-- 图标徽章 -->
<ion-icon name="notifications">
<ion-badge color="danger">5</ion-badge>
</ion-icon>
<!-- 按钮徽章 -->
<ion-button>
<ion-icon name="mail"></ion-icon>
<ion-badge color="danger">3</ion-badge>
</ion-button>
<!-- 列表项徽章 -->
<ion-item>
<ion-label>消息</ion-label>
<ion-badge slot="end" color="danger">12</ion-badge>
</ion-item>
4.3 徽章样式 #
scss
ion-badge {
--background: #eb445a;
--color: #ffffff;
--padding-start: 8px;
--padding-end: 8px;
--padding-top: 4px;
--padding-bottom: 4px;
font-size: 12px;
font-weight: bold;
border-radius: 10px;
}
五、头像组件(Avatar) #
5.1 基本用法 #
html
<!-- 图片头像 -->
<ion-avatar>
<img src="assets/avatar.jpg" alt="头像">
</ion-avatar>
<!-- 占位头像 -->
<ion-avatar>
<ion-icon name="person"></ion-icon>
</ion-avatar>
5.2 头像尺寸 #
html
<!-- 小头像 -->
<ion-avatar style="width: 30px; height: 30px;">
<img src="avatar.jpg">
</ion-avatar>
<!-- 大头像 -->
<ion-avatar style="width: 80px; height: 80px;">
<img src="avatar.jpg">
</ion-avatar>
5.3 头像位置 #
html
<!-- 列表项头像 -->
<ion-item>
<ion-avatar slot="start">
<img src="avatar.jpg">
</ion-avatar>
<ion-label>
<h2>用户名</h2>
<p>用户描述</p>
</ion-label>
</ion-item>
<!-- 头像带徽章 -->
<ion-avatar>
<img src="avatar.jpg">
<ion-badge>在线</ion-badge>
</ion-avatar>
六、缩略图组件(Thumbnail) #
6.1 基本用法 #
html
<!-- 图片缩略图 -->
<ion-thumbnail>
<img src="image.jpg" alt="缩略图">
</ion-thumbnail>
6.2 缩略图尺寸 #
html
<!-- 小缩略图 -->
<ion-thumbnail slot="start" style="--size: 50px;">
<img src="image.jpg">
</ion-thumbnail>
<!-- 大缩略图 -->
<ion-thumbnail style="--size: 100px;">
<img src="image.jpg">
</ion-thumbnail>
6.3 缩略图形状 #
scss
// 圆形缩略图
ion-thumbnail {
--border-radius: 50%;
}
// 圆角缩略图
ion-thumbnail {
--border-radius: 8px;
}
七、芯片组件(Chip) #
7.1 基本用法 #
html
<!-- 基本芯片 -->
<ion-chip>默认芯片</ion-chip>
<!-- 带颜色 -->
<ion-chip color="primary">Primary</ion-chip>
<ion-chip color="success">Success</ion-chip>
<ion-chip color="danger">Danger</ion-chip>
7.2 芯片内容 #
html
<!-- 带图标 -->
<ion-chip>
<ion-icon name="heart"></ion-icon>
<ion-label>收藏</ion-label>
</ion-chip>
<!-- 带头像 -->
<ion-chip>
<ion-avatar>
<img src="avatar.jpg">
</ion-avatar>
<ion-label>用户名</ion-label>
</ion-chip>
<!-- 可关闭 -->
<ion-chip>
<ion-label>标签</ion-label>
<ion-icon name="close-circle"></ion-icon>
</ion-chip>
7.3 芯片样式 #
scss
ion-chip {
--background: #e0e0e0;
--color: #333333;
height: 32px;
font-size: 14px;
}
八、分割线组件(Divider) #
8.1 基本用法 #
html
<!-- 基本分割线 -->
<ion-item-divider>
<ion-label>分组标题</ion-label>
</ion-item-divider>
<!-- 列表分割 -->
<ion-list>
<ion-item-divider>
<ion-label>组一</ion-label>
</ion-item-divider>
<ion-item>项目1</ion-item>
<ion-item>项目2</ion-item>
<ion-item-divider>
<ion-label>组二</ion-label>
</ion-item-divider>
<ion-item>项目3</ion-item>
<ion-item>项目4</ion-item>
</ion-list>
8.2 分割线样式 #
scss
ion-item-divider {
--background: #f4f5f8;
--color: #333333;
--padding-start: 16px;
font-weight: bold;
}
九、骨架屏组件(Skeleton Text) #
9.1 基本用法 #
html
<!-- 骨架屏加载 -->
<div *ngIf="isLoading">
<ion-list>
<ion-item>
<ion-avatar slot="start">
<ion-skeleton-text animated></ion-skeleton-text>
</ion-avatar>
<ion-label>
<h3><ion-skeleton-text animated style="width: 60%;"></ion-skeleton-text></h3>
<p><ion-skeleton-text animated style="width: 80%;"></ion-skeleton-text></p>
</ion-label>
</ion-item>
</ion-list>
</div>
9.2 骨架屏样式 #
scss
ion-skeleton-text {
--background: #e0e0e0;
--background-rgb: 224, 224, 224;
height: 16px;
border-radius: 4px;
}
十、最佳实践 #
10.1 组件组合 #
html
<!-- 用户卡片 -->
<ion-card>
<ion-item>
<ion-avatar slot="start">
<img src="avatar.jpg">
</ion-avatar>
<ion-label>
<h2>用户名</h2>
<p>用户描述</p>
</ion-label>
<ion-badge slot="end" color="success">在线</ion-badge>
</ion-item>
<ion-card-content>
<p>这是用户发布的内容...</p>
</ion-card-content>
<ion-row>
<ion-col>
<ion-button fill="clear" expand="block">
<ion-icon slot="start" name="heart-outline"></ion-icon>
点赞
</ion-button>
</ion-col>
<ion-col>
<ion-button fill="clear" expand="block">
<ion-icon slot="start" name="chatbubble-outline"></ion-icon>
评论
</ion-button>
</ion-col>
</ion-row>
</ion-card>
10.2 响应式设计 #
scss
// 响应式按钮
ion-button {
@media (max-width: 576px) {
font-size: 14px;
--padding-start: 12px;
--padding-end: 12px;
}
@media (min-width: 576px) {
font-size: 16px;
--padding-start: 20px;
--padding-end: 20px;
}
}
10.3 无障碍支持 #
html
<!-- 添加无障碍属性 -->
<ion-button aria-label="添加到收藏">
<ion-icon name="heart"></ion-icon>
</ion-button>
<ion-icon
name="notifications"
aria-label="通知"
role="img">
</ion-icon>
十一、总结 #
11.1 组件对比 #
| 组件 | 用途 | 特点 |
|---|---|---|
| Button | 用户交互 | 多种样式、颜色、尺寸 |
| Icon | 图标显示 | 丰富的图标库 |
| Spinner | 加载状态 | 多种动画效果 |
| Badge | 数量提示 | 小巧、醒目 |
| Avatar | 用户头像 | 支持图片和图标 |
| Chip | 标签展示 | 可组合、可关闭 |
11.2 下一步 #
掌握了基础组件后,接下来让我们学习 表单组件,了解Ionic的表单处理!
最后更新:2026-03-28