前端组件库 ——WeUI 知识点大全(二)

简介: 教程来源 http://oieaw.cn WeUI是微信官方UI库,提供按钮、输入框、列表等表单组件,图标、Flex/网格等基础组件,Dialog/Toast/ActionSheet等反馈组件,以及导航、数据展示和搜索组件,全面支持微信小程序与H5页面开发。

三、核心组件详解

3.1 表单类组件
表单是用户与应用交互的核心,WeUI 提供了完整的表单组件体系。

3.1.1 按钮组件
按钮是 WeUI 中最基础的交互元素,提供了多种视觉变体:

<!-- 主要操作按钮(绿色) -->
<button class="weui-btn weui-btn_primary">主要按钮</button>

<!-- 次要操作按钮(灰色) -->
<button class="weui-btn weui-btn_default">默认按钮</button>

<!-- 警示操作按钮(红色) -->
<button class="weui-btn weui-btn_warn">警告按钮</button>

<!-- 小尺寸按钮 -->
<button class="weui-btn weui-btn_primary weui-btn_mini">小按钮</button>

<!-- 禁用按钮 -->
<button class="weui-btn weui-btn_primary weui-btn_disabled">禁用按钮</button>

<!-- 加载中按钮 -->
<button class="weui-btn weui-btn_primary weui-btn_loading">
    <i class="weui-loading"></i> 加载中
</button>

按钮状态说明:

主要按钮(绿色):用于页面的主要操作,如“提交”、“确认”

默认按钮(灰色):用于次要操作,如“取消”、“返回”

警示按钮(红色):用于危险操作,如“删除”、“注销”

3.1.2 输入框组件
输入框是表单中的核心元素,WeUI 提供了多种输入框样式:

<!-- 标准输入框 -->
<div class="weui-cell">
    <div class="weui-cell__hd">
        <label class="weui-label">用户名</label>
    </div>
    <div class="weui-cell__bd">
        <input class="weui-input" type="text" placeholder="请输入用户名">
    </div>
</div>

<!-- 带验证状态的输入框 -->
<div class="weui-cell weui-cell_warn">
    <div class="weui-cell__hd">
        <label class="weui-label">手机号</label>
    </div>
    <div class="weui-cell__bd">
        <input class="weui-input" type="tel" placeholder="请输入手机号">
    </div>
    <div class="weui-cell__ft">
        <i class="weui-icon-warn"></i>
    </div>
</div>

<!-- 文本域 -->
<div class="weui-cell">
    <div class="weui-cell__bd">
        <textarea class="weui-textarea" placeholder="请输入详细描述" rows="3"></textarea>
        <div class="weui-textarea-counter">0/200</div>
    </div>
</div>

<!-- 带前缀/后缀的输入框 -->
<div class="weui-cell">
    <div class="weui-cell__hd">
        <label class="weui-label">金额</label>
    </div>
    <div class="weui-cell__bd">
        <input class="weui-input" type="number" placeholder="0.00">
    </div>
    <div class="weui-cell__ft">
        元
    </div>
</div>

输入框结构说明:

weui-cell:表单项容器

weui-cell__hd:标签区域

weui-label:标签文本

weui-cell__bd:输入区域

weui-input:输入框样式

weui-cell__ft:右侧附加区域(图标、提示等)

weui-cell_warn:警告状态的样式修饰

3.1.3 列表表单
列表表单用于展示多个表单项的组合:

<div class="weui-cells weui-cells_form">
    <div class="weui-cell">
        <div class="weui-cell__hd">
            <label class="weui-label">姓名</label>
        </div>
        <div class="weui-cell__bd">
            <input class="weui-input" type="text" placeholder="请输入姓名">
        </div>
    </div>
    <div class="weui-cell">
        <div class="weui-cell__hd">
            <label class="weui-label">邮箱</label>
        </div>
        <div class="weui-cell__bd">
            <input class="weui-input" type="email" placeholder="请输入邮箱">
        </div>
    </div>
    <div class="weui-cell weui-cell_vcode">
        <div class="weui-cell__hd">
            <label class="weui-label">验证码</label>
        </div>
        <div class="weui-cell__bd">
            <input class="weui-input" type="number" placeholder="请输入验证码">
        </div>
        <div class="weui-cell__ft">
            <button class="weui-vcode-btn">获取验证码</button>
        </div>
    </div>
</div>

3.1.4 选择器

<!-- 单选框组 -->
<div class="weui-cells weui-cells_radio">
    <label class="weui-cell weui-check__label" for="radio1">
        <div class="weui-cell__bd">
            <p>选项一</p>
        </div>
        <div class="weui-cell__ft">
            <input type="radio" class="weui-check" name="radio" id="radio1" checked>
            <span class="weui-icon-checked"></span>
        </div>
    </label>
    <label class="weui-cell weui-check__label" for="radio2">
        <div class="weui-cell__bd">
            <p>选项二</p>
        </div>
        <div class="weui-cell__ft">
            <input type="radio" class="weui-check" name="radio" id="radio2">
            <span class="weui-icon-checked"></span>
        </div>
    </label>
</div>

<!-- 复选框组 -->
<div class="weui-cells weui-cells_checkbox">
    <label class="weui-cell weui-check__label" for="checkbox1">
        <div class="weui-cell__hd">
            <input type="checkbox" class="weui-check" id="checkbox1">
            <i class="weui-icon-checked"></i>
        </div>
        <div class="weui-cell__bd">
            <p>选项一</p>
        </div>
    </label>
    <label class="weui-cell weui-check__label" for="checkbox2">
        <div class="weui-cell__hd">
            <input type="checkbox" class="weui-check" id="checkbox2">
            <i class="weui-icon-checked"></i>
        </div>
        <div class="weui-cell__bd">
            <p>选项二</p>
        </div>
    </label>
</div>

<!-- 开关 -->
<div class="weui-cell weui-cell_switch">
    <div class="weui-cell__bd">接收通知</div>
    <div class="weui-cell__ft">
        <input class="weui-switch" type="checkbox">
    </div>
</div>

<!-- 滑块 -->
<div class="weui-cell">
    <div class="weui-cell__bd">音量</div>
    <div class="weui-cell__ft">
        <input class="weui-slider" type="range" min="0" max="100" value="50">
    </div>
</div>

3.2 基础组件
3.2.1 图标组件
WeUI 内置了丰富的图标,覆盖了常见的状态和操作场景:

<!-- 成功图标 -->
<i class="weui-icon-success"></i>
<i class="weui-icon-success-no-circle"></i>

<!-- 提示图标 -->
<i class="weui-icon-info"></i>
<i class="weui-icon-info-circle"></i>

<!-- 警告图标 -->
<i class="weui-icon-warn"></i>

<!-- 等待/加载图标 -->
<i class="weui-icon-waiting"></i>
<i class="weui-icon-waiting-circle"></i>

<!-- 安全提示图标 -->
<i class="weui-icon-safe"></i>
<i class="weui-icon-safe-success"></i>

<!-- 取消/关闭图标 -->
<i class="weui-icon-cancel"></i>

<!-- 搜索图标 -->
<i class="weui-icon-search"></i>

<!-- 清除图标 -->
<i class="weui-icon-clear"></i>

<!-- 返回图标 -->
<i class="weui-icon-back"></i>

<!-- 更多图标 -->
<i class="weui-icon-more"></i>

图标使用场景:

weui-icon-success:操作成功提示

weui-icon-warn:警告或错误提示

weui-icon-info:普通信息提示

weui-icon-waiting:等待状态提示

weui-icon-search:搜索框占位符

weui-icon-clear:清空输入内容

3.2.2 Flex 布局
WeUI 提供了基于 Flexbox 的布局工具类:

<!-- 水平布局 -->
<div class="weui-flex">
    <div class="weui-flex__item">弹性项目1</div>
    <div class="weui-flex__item">弹性项目2</div>
    <div class="weui-flex__item">弹性项目3</div>
</div>

<!-- 垂直布局 -->
<div class="weui-flex weui-flex_column">
    <div>项目1</div>
    <div>项目2</div>
    <div>项目3</div>
</div>

<!-- 两端对齐 -->
<div class="weui-flex weui-flex_justify-between">
    <div>左</div>
    <div>中</div>
    <div>右</div>
</div>

<!-- 居中对齐 -->
<div class="weui-flex weui-flex_align-center">
    <div>内容会自动垂直居中</div>
</div>

<!-- 等分布局 -->
<div class="weui-flex">
    <div class="weui-flex__item">1/3</div>
    <div class="weui-flex__item">1/3</div>
    <div class="weui-flex__item">1/3</div>
</div>

3.2.3 网格布局

<!-- 三列网格 -->
<div class="weui-grids">
    <a href="#" class="weui-grid">
        <div class="weui-grid__icon">
            <img src="./images/icon1.png" alt="">
        </div>
        <p class="weui-grid__label">网格1</p>
    </a>
    <a href="#" class="weui-grid">
        <div class="weui-grid__icon">
            <img src="./images/icon2.png" alt="">
        </div>
        <p class="weui-grid__label">网格2</p>
    </a>
    <!-- 更多网格... -->
</div>

3.3 操作反馈组件
3.3.1 对话框(Dialog)
Dialog 用于需要用户确认的重要操作:

<div class="weui-dialog" id="dialog">
    <div class="weui-dialog__hd">
        <strong class="weui-dialog__title">提示</strong>
    </div>
    <div class="weui-dialog__bd">
        确定要删除这条数据吗?此操作不可恢复。
    </div>
    <div class="weui-dialog__ft">
        <a href="javascript:;" class="weui-dialog__btn weui-dialog__btn_default">取消</a>
        <a href="javascript:;" class="weui-dialog__btn weui-dialog__btn_primary">确定</a>
    </div>
</div>

<script>
// 显示对话框
document.getElementById('dialog').style.display = 'block';

// 隐藏对话框
function hideDialog() {
    document.getElementById('dialog').style.display = 'none';
}
</script>

3.3.2 提示框(Toast)
Toast 用于显示轻量级的操作反馈,通常 2-3 秒后自动消失:

<!-- 成功提示 -->
<div class="weui-toast">
    <i class="weui-icon-success-no-circle weui-icon_toast"></i>
    <p class="weui-toast__content">操作成功</p>
</div>

<!-- 失败提示 -->
<div class="weui-toast">
    <i class="weui-icon-warn weui-icon_toast"></i>
    <p class="weui-toast__content">操作失败</p>
</div>

<!-- 加载提示 -->
<div class="weui-toast">
    <i class="weui-loading weui-icon_toast"></i>
    <p class="weui-toast__content">加载中</p>
</div>

<!-- 纯文字提示 -->
<div class="weui-toast">
    <p class="weui-toast__content">仅文字提示</p>
</div>

<script>
// 动态显示 Toast 的函数
function showToast(message, type = 'success') {
    const toastHtml = `
        <div class="weui-toast" style="display: flex; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 9999;">
            <i class="weui-icon-${type === 'success' ? 'success-no-circle' : 'warn'} weui-icon_toast"></i>
            <p class="weui-toast__content">${message}</p>
        </div>
    `;
    const toast = document.createElement('div');
    toast.innerHTML = toastHtml;
    document.body.appendChild(toast);

    setTimeout(() => {
        document.body.removeChild(toast);
    }, 2000);
}
</script>

3.3.3 操作表(ActionSheet)
ActionSheet 从底部弹出,提供多个操作选项:

<div class="weui-actionsheet" id="actionSheet">
    <div class="weui-actionsheet__title">
        <p class="weui-actionsheet__title-text">请选择操作</p>
    </div>
    <div class="weui-actionsheet__menu">
        <div class="weui-actionsheet__cell" data-value="share">分享给朋友</div>
        <div class="weui-actionsheet__cell" data-value="copy">复制链接</div>
        <div class="weui-actionsheet__cell" data-value="delete">删除</div>
    </div>
    <div class="weui-actionsheet__action">
        <div class="weui-actionsheet__cell" data-value="cancel">取消</div>
    </div>
</div>

<script>
function showActionSheet(callback) {
    const sheet = document.getElementById('actionSheet');
    const mask = document.createElement('div');
    mask.className = 'weui-mask';
    mask.style.display = 'block';
    document.body.appendChild(mask);
    sheet.style.transform = 'translate(0, 0)';

    const cells = sheet.querySelectorAll('.weui-actionsheet__cell');
    cells.forEach(cell => {
        cell.onclick = () => {
            mask.remove();
            sheet.style.transform = '';
            if (callback) callback(cell.dataset.value);
        };
    });
}
</script>

3.4 导航组件
3.4.1 顶部导航栏

<div class="weui-navbar">
    <div class="weui-navbar__item weui-bar__item_on" data-tab="tab1">
        选项一
    </div>
    <div class="weui-navbar__item" data-tab="tab2">
        选项二
    </div>
    <div class="weui-navbar__item" data-tab="tab3">
        选项三
    </div>
</div>

<!-- 对应的内容面板 -->
<div class="weui-tab__panel">
    <div class="weui-tab__content" id="tab1" style="display: block;">内容一</div>
    <div class="weui-tab__content" id="tab2" style="display: none;">内容二</div>
    <div class="weui-tab__content" id="tab3" style="display: none;">内容三</div>
</div>

<script>
// 标签页切换
document.querySelectorAll('.weui-navbar__item').forEach(item => {
    item.addEventListener('click', function() {
        const tabId = this.dataset.tab;
        // 切换导航栏选中状态
        document.querySelectorAll('.weui-navbar__item').forEach(nav => {
            nav.classList.remove('weui-bar__item_on');
        });
        this.classList.add('weui-bar__item_on');
        // 切换内容面板
        document.querySelectorAll('.weui-tab__content').forEach(content => {
            content.style.display = 'none';
        });
        document.getElementById(tabId).style.display = 'block';
    });
});
</script>

3.4.2 底部标签栏

<div class="weui-tabbar">
    <a href="#" class="weui-tabbar__item weui-bar__item_on">
        <div class="weui-tabbar__icon">
            <img src="./images/icon_home.png" alt="">
        </div>
        <p class="weui-tabbar__label">首页</p>
    </a>
    <a href="#" class="weui-tabbar__item">
        <div class="weui-tabbar__icon">
            <img src="./images/icon_find.png" alt="">
        </div>
        <p class="weui-tabbar__label">发现</p>
    </a>
    <a href="#" class="weui-tabbar__item">
        <div class="weui-tabbar__icon">
            <img src="./images/icon_notify.png" alt="">
        </div>
        <p class="weui-tabbar__label">通知</p>
    </a>
    <a href="#" class="weui-tabbar__item">
        <div class="weui-tabbar__icon">
            <img src="./images/icon_profile.png" alt="">
        </div>
        <p class="weui-tabbar__label">我的</p>
    </a>
</div>

3.4.3 面包屑导航

<div class="weui-breadcrumb">
    <a href="#" class="weui-breadcrumb__link">首页</a>
    <span class="weui-breadcrumb__sep">&gt;</span>
    <a href="#" class="weui-breadcrumb__link">产品中心</a>
    <span class="weui-breadcrumb__sep">&gt;</span>
    <span class="weui-breadcrumb__current">当前页面</span>
</div>

3.5 数据展示组件
3.5.1 列表(Cells)
列表是 WeUI 中最常用的数据展示组件:

<!-- 基础列表 -->
<div class="weui-cells">
    <div class="weui-cell">
        <div class="weui-cell__bd">
            <p>列表项1</p>
        </div>
        <div class="weui-cell__ft">
            详细信息
        </div>
    </div>
    <div class="weui-cell weui-cell_access">
        <div class="weui-cell__bd">
            <p>可点击列表项</p>
        </div>
        <div class="weui-cell__ft weui-cell__ft_in-access">
        </div>
    </div>
    <div class="weui-cell weui-cell_swiped">
        <div class="weui-cell__bd">
            <p>可滑动列表项</p>
        </div>
        <div class="weui-cell__ft">
            <a href="#" class="weui-swiped-btn">删除</a>
        </div>
    </div>
</div>

<!-- 带头像的列表 -->
<div class="weui-cells">
    <div class="weui-cell">
        <div class="weui-cell__hd">
            <img src="./images/avatar.jpg" style="width: 40px; height: 40px; border-radius: 50%;">
        </div>
        <div class="weui-cell__bd">
            <p>张三</p>
            <p class="weui-cell__desc">这里是描述信息</p>
        </div>
        <div class="weui-cell__ft">昨天</div>
    </div>
</div>

3.5.2 面板(Panel)
面板用于组合展示相关内容:

<div class="weui-panel">
    <div class="weui-panel__hd">面板标题</div>
    <div class="weui-panel__bd">
        <div class="weui-media-box weui-media-box_text">
            <h4 class="weui-media-box__title">标题</h4>
            <p class="weui-media-box__desc">描述内容,这里是一段简短的描述文字。</p>
        </div>
        <div class="weui-media-box weui-media-box_text">
            <h4 class="weui-media-box__title">另一个标题</h4>
            <p class="weui-media-box__desc">另一段描述内容。</p>
        </div>
    </div>
    <div class="weui-panel__ft">
        <a href="#" class="weui-cell weui-cell_access weui-cell_link">
            <div class="weui-cell__bd">查看更多</div>
            <span class="weui-cell__ft"></span>
        </a>
    </div>
</div>

<!-- 图文面板 -->
<div class="weui-panel">
    <div class="weui-panel__hd">热门推荐</div>
    <div class="weui-panel__bd">
        <a href="#" class="weui-media-box weui-media-box_appmsg">
            <div class="weui-media-box__hd">
                <img class="weui-media-box__thumb" src="./images/thumb.jpg" alt="">
            </div>
            <div class="weui-media-box__bd">
                <h4 class="weui-media-box__title">文章标题</h4>
                <p class="weui-media-box__desc">文章描述...</p>
            </div>
        </a>
    </div>
</div>

3.5.3 卡片

<div class="weui-card">
    <div class="weui-card__header">
        <div class="weui-card__header-title">卡片标题</div>
        <div class="weui-card__header-extra">更多</div>
    </div>
    <div class="weui-card__body">
        <p>卡片内容区域,可以放置任意 HTML 内容。</p>
    </div>
    <div class="weui-card__footer">
        <div class="weui-card__footer-item">点赞</div>
        <div class="weui-card__footer-item">评论</div>
        <div class="weui-card__footer-item">分享</div>
    </div>
</div>

3.6 搜索组件

<!-- 搜索栏 -->
<div class="weui-search-bar">
    <form class="weui-search-bar__form">
        <div class="weui-search-bar__box">
            <i class="weui-icon-search"></i>
            <input type="search" class="weui-search-bar__input" id="searchInput" placeholder="搜索">
            <a href="javascript:" class="weui-icon-clear" id="searchClear"></a>
        </div>
        <label class="weui-search-bar__label" id="searchText">
            <i class="weui-icon-search"></i>
            <span>搜索</span>
        </label>
    </form>
    <a href="javascript:" class="weui-search-bar__cancel-btn" id="searchCancel">取消</a>
</div>

<script>
// 搜索栏交互逻辑
const searchBar = document.querySelector('.weui-search-bar');
const searchInput = document.getElementById('searchInput');
const searchCancel = document.getElementById('searchCancel');
const searchClear = document.getElementById('searchClear');

searchInput.addEventListener('focus', () => {
    searchBar.classList.add('weui-search-bar_focusing');
});

searchCancel.addEventListener('click', () => {
    searchBar.classList.remove('weui-search-bar_focusing');
    searchInput.value = '';
});

searchClear.addEventListener('click', () => {
    searchInput.value = '';
    searchInput.focus();
});
</script>

来源:
http://qcycj.cn

相关文章
|
人工智能 运维 关系型数据库
智能运维+多模型服务能力,阿里云 RDS AI 助手旗舰版正式上线!
RDS AI 助手旗舰版在 RDS AI 助手专业版智能运维能力的基础上,提供灵活模型选择、智能模型路由、多模型灾备、API Key 集成等更自主可控、灵活便捷的模型服务,并支持纳管运维各类环境部署的数据库。
智能运维+多模型服务能力,阿里云 RDS AI 助手旗舰版正式上线!
|
2月前
|
缓存 安全 Linux
Linux 内核 Copy Fail 漏洞对加密货币基础设施安全影响研究
2026年曝出的Linux内核漏洞Copy Fail(CVE-2026-31431),源于2017年代码缺陷,可让低权限用户稳定提权至root,具备无磁盘痕迹、跨容器逃逸、利用极简等特点,已遭野外利用。该漏洞对加密货币行业构成系统性威胁,覆盖交易所、节点、钱包、矿池等核心设施。本文基于权威报道,剖析其技术机理与风险传导,提出含内核加固、权限隔离、eBPF检测、应急响应的全生命周期防御体系,并提供可复现代码与工程化方案。(239字)
202 7
|
2月前
|
NoSQL Java MongoDB
Spring Boot 整合 MongoDB 最佳实践:CRUD、分页、事务、索引全覆盖
Spring Data MongoDB提供了简洁的API,让开发者能够专注于业务逻辑,快速构建高性能的应用。通过合理使用MongoDB的特性,可以充分发挥其文档数据库的优势。
124 6
|
3月前
|
存储 缓存 自然语言处理
PHP的OPcache与全栈性能优化——从字节码缓存到预加载
PHP的执行过程分为四个阶段:词法/语法解析→生成抽象语法树(AST)→编译为字节码(opcodes)→执行(ZendVM)
227 9
|
2月前
|
数据采集 自动驾驶 算法
8类道路交通车辆目标检测数据集(2600张)|YOLO训练数据集 智慧交通 自动驾驶 车流统计 车辆识别
本数据集含2600张真实道路图像,精细标注8类车辆(公交、重型/中型/牵引卡车、皮卡、轿车、两轮车、面包车),YOLO格式,覆盖城市/城郊多场景,支持智慧交通、自动驾驶、车流统计等任务,开箱即用。
748 10
|
3月前
|
存储 消息中间件 BI
如何通过阿里云接入招投标数据:从市场购买到业务上线全流程指南
本文详解如何通过阿里云市场(集成世舶科技等服务商)快速接入招投标API:涵盖选购试用、AppCode认证、多维筛选调用、Serverless自动拉取、RocketMQ解耦、RDS+Tair存储及Quick BI分析,助力企业构建数据驱动的商机获取体系。
625 3
|
1月前
|
人工智能 自然语言处理 测试技术
【阿里云官方】2026新版OpenClaw运行调试实用窍门
阿里云官方推出的OpenClaw智能助理,基于通义千问大模型,零代码3分钟即可部署。覆盖超级助理、内容创作、股票分析、一人团队、开发助手、海外运营六大场景,助力开发者高效成长、降本增效。(239字)
|
1月前
|
人工智能 自然语言处理 API
购买并部署OpenClaw应用镜像
OpenClaw是一款开源、本地优先的AI智能体平台,支持多模型接入与多端控制,可理解自然语言并自动执行文件管理、邮件收发、代码运行等真实任务,真正实现“聊天即操作”。
|
1月前
|
安全 Android开发 数据安全/隐私保护
App Inventor iOS App编译全流程:7步搞定苹果签名上架
App Inventor 编译 iOS 应用需7步:下载CSR、创建证书、注册App ID、添加设备、生成配置文件、上传构建、安装/上架。流程复杂,依赖Apple开发者账号(99美元/年)、证书签名与iTools安装,且仅限绑定设备测试。鸿蒙编译更简免费,安卓仍最便捷。
194 3
|
2月前
|
负载均衡 Java Nacos
5-微服务篇-2
Spring Boot核心注解为@SpringBootApplication,由@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan组成;跨域问题可通过@CrossOrigin注解、WebMvcConfigurer配置或网关(如Spring Cloud Gateway)统一处理;项目使用Spring Boot 2.3.4等主流版本及Nacos、Sentinel等云原生组件。
228 5