HTML列表怎样样式化_自定义项目符号方法

要自定义html列表的项目符号,主要通过css实现,控制力由弱到强依次为:1. 使用list-style-type和list-style-position设置预定义符号类型及位置;2. 使用list-style-image将图片设为项目符号,但控制不够灵活;3. 使用::marker伪元素样式化标记,可调整颜色、大小、内容等,但仍有限;4. 最常用且最灵活的方式是使用list-style: none;结合::before伪元素完全自定义,包括文本、图标或svg,并进行精确定位。传统方法如list-style-type和list-style-image因符号类型有限、图片控制不灵活等问题,在复杂设计中难以满足需求;而::marker虽有改进,但无法实现复杂布局或图标嵌入。使用::before时需清除默认样式、为

  • 设置position: relative以定位伪元素、通过content插入自定义符号并设置样式,同时注意padding、line-height、字体渲染及浏览器兼容性问题。尽管主流浏览器支持较好,仍需测试不同环境下表现,确保对齐与视觉一致性。

    HTML列表怎样样式化_自定义项目符号方法

    HTML列表的样式化,尤其是自定义项目符号,主要通过CSS来实现。你可以利用list-style系列属性进行基础设置,但要实现更精细、更具设计感的自定义,通常需要借助CSS伪元素(::marker::before)来获得完全的控制权。

    HTML列表怎样样式化_自定义项目符号方法

    解决方案

    要自定义HTML列表的项目符号,你有多种CSS方法可以选择,从简单到复杂,控制力也逐渐增强:

    HTML列表怎样样式化_自定义项目符号方法

    使用list-style-typelist-style-position这是最基础的方式,list-style-type允许你选择预定义的项目符号类型(如disc, circle, square, decimal等),而list-style-position则控制项目符号是在列表项内容“内部”(inside)还是“外部”(outside)。

    ul {    list-style-type: square; /* 方块符号 */    list-style-position: outside; /* 符号在内容区域外 */}ol {    list-style-type: upper-roman; /* 大写罗马数字 */}

    使用list-style-image如果你想用图片作为项目符号,可以使用这个属性。

    HTML列表怎样样式化_自定义项目符号方法

    ul {    list-style-image: url('path/to/your-custom-bullet.png');}

    不过说实话,这个属性用起来有点笨拙,图片大小和位置的控制不够灵活。

    立即学习“前端免费学习笔记(深入)”;

    使用::marker伪元素:这是CSS Level 3引入的一个非常方便的特性,可以直接样式化列表项的标记(也就是项目符号本身)。你可以改变它的颜色、字体大小、甚至添加一些简单的动画。

    li::marker {    color: #ff6600; /* 改变项目符号颜色 */    font-size: 1.2em; /* 改变项目符号大小 */    content: "? "; /* 甚至可以替换成自定义文本或emoji */}

    这个方法的好处是,它依然保留了标记本身的语义,并且与内容是分离的。

    使用list-style: none;结合::before伪元素(最灵活且常用):这是实现高度自定义列表样式最常用的方法。首先,你移除默认的项目符号,然后利用::before伪元素在每个列表项内容之前插入自定义的元素,并对其进行完全的CSS控制。

    ul {    list-style: none; /* 移除默认的项目符号 */    padding-left: 0; /* 移除默认的左内边距,根据需要调整 */}li {    position: relative; /* 为伪元素定位提供参考 */    padding-left: 25px; /* 为自定义符号留出空间 */    margin-bottom: 8px;}li::before {    content: "✓"; /* 可以是任何文本、Unicode字符或图标 */    color: green; /* 自定义颜色 */    font-size: 1.1em;    position: absolute;    left: 0; /* 定位到列表项的左侧 */    top: 0; /* 垂直对齐,可能需要根据字体和行高微调 */    line-height: inherit; /* 继承父元素的行高,保持对齐 */}/* 也可以用背景图作为自定义符号 */li.custom-icon::before {    content: ""; /* 内容为空,只显示背景图 */    background-image: url('path/to/your-icon.svg');    background-size: 18px 18px; /* 控制图标大小 */    background-repeat: no-repeat;    background-position: center left;    width: 18px; /* 伪元素的宽度 */    height: 18px; /* 伪元素的高度 */    display: inline-block; /* 让背景图生效 */    vertical-align: middle; /* 垂直居中对齐 */    left: 0;    top: 50%; /* 尝试垂直居中 */    transform: translateY(-50%); /* 精确垂直居中 */}

    我个人觉得,当你需要那种像素级的精确控制,或者想用SVG图标、Font Awesome图标作为项目符号时,::before几乎是唯一的选择。它虽然需要多写几行CSS,但带来的自由度是其他方法无法比拟的。

    为什么传统的list-style属性有时不够用?

    说实话,list-style-typelist-style-image在实际项目开发中,很多时候都显得力不从心。它们的局限性非常明显,尤其当你追求现代网页设计那种精细、统一的视觉效果时,它们几乎帮不上什么忙。

    首先,list-style-type提供的项目符号类型非常有限,基本上就是圆点、方块、空心圆,或者一些数字和字母的变体。如果你想要一个箭头、一个自定义的图标、或者一个品牌专属的符号,它就完全无能为力了。这就像给你一盒只有红黄蓝三色的蜡笔,却让你画出五彩斑斓的风景画,根本不可能。

    其次,list-style-image虽然允许你使用图片,但它的控制能力简直是“灾难级”的。你很难精确控制图片的大小、位置、颜色(如果你用的是单色图片,想换个颜色?抱歉,你得重新切图),更别提图片和文本之间的间距调整了。它就像一个“傻瓜相机”,拍出来的照片你几乎没法后期处理。我记得以前尝试用它,为了让图片和文本对齐,或者调整图片大小,最后往往是各种Hack,或者干脆放弃,效率极低。

    至于::marker伪元素,它确实是向前迈了一大步,可以直接控制标记的颜色、字体大小,甚至替换成文本或Emoji。但它依然有局限性,比如你不能直接改变标记的“形状”(除非用content替换成其他字符),也不能直接用复杂的SVG图标或者对标记进行复杂的布局调整。它更像是对原生标记的一种“美化”,而不是完全的“替换”。所以,当设计稿上出现一个特别的、非标准的项目符号时,或者需要项目符号和文本有复杂的对齐关系时,list-style家族的这些属性就显得力不从心了,这时候就得请出::before这个“大杀器”了。

    Replit Ghostwrite Replit Ghostwrite

    一种基于 ML 的工具,可提供代码完成、生成、转换和编辑器内搜索功能。

    Replit Ghostwrite 93 查看详情 Replit Ghostwrite

    如何用CSS伪元素实现更灵活的自定义项目符号?

    用CSS伪元素,特别是::before,来定制项目符号,这才是真正能让你玩出花来的地方。它的核心思想是:先彻底移除浏览器自带的项目符号,然后自己“画”一个上去,并把它定位到你想要的位置。

    具体步骤通常是这样的:

    干掉默认的: 给你的

        设置list-style: none;,同时记得把默认的padding-leftmargin-left也清掉,因为浏览器默认会给列表一个左边距来容纳项目符号。比如:

        ul {    list-style: none;    padding-left: 0; /* 很多时候需要这个 */}

        为伪元素定位做准备: 给每个

      1. 元素设置position: relative;。这是关键一步,否则你后面给::before设置的position: absolute;就会相对于文档流的根元素(body)去定位,而不是相对于它所属的
      2. 。刚开始接触的时候,我经常会犯这个错误,忘记给li设置position: relative;,导致::before定位乱飞,那感觉真是抓狂。

        插入你的自定义符号: 使用::before伪元素,通过content属性来插入你想要的符号。

        文本/Unicode字符: 最简单的方式,比如content: "➤ "; 或者 content: "\2713 "; /* Unicode的对勾符号 */SVG图标/背景图: 如果是更复杂的图标,content留空,然后用background-imagebackground-sizebackground-repeat等属性来控制图标的显示。CSS Counters(计数器): 对于自定义编号列表,这招特别好用。你可以完全控制数字的格式、前缀、后缀。

        /* 例子1:使用Unicode字符作为项目符号 */li.custom-bullet::before {    content: "\2713"; /* 对勾符号 */    color: #4CAF50; /* 绿色 */    font-size: 1.1em;    position: absolute;    left: 0;    top: 0.2em; /* 微调垂直位置 */    width: 1.5em; /* 预留空间,避免与文本重叠 */    text-align: center; /* 如果符号有宽度,可以居中 */}li.custom-bullet {    padding-left: 1.8em; /* 给文本留出符号的空间 */}/* 例子2:使用SVG图标作为项目符号 */li.icon-bullet::before {    content: ""; /* 内容为空 */    background-image: url('data:image/svg+xml;utf8,'); /* 内联SVG,记得编码颜色 */    background-size: 18px 18px;    background-repeat: no-repeat;    background-position: center;    width: 18px;    height: 18px;    display: inline-block; /* 必须是块级或行内块级元素才能设置宽高和背景 */    position: absolute;    left: 0;    top: 50%; /* 尝试垂直居中 */    transform: translateY(-50%); /* 精确垂直居中 */}li.icon-bullet {    padding-left: 25px; /* 留出图标空间 */    line-height: 1.6; /* 保持行高,有助于对齐 */}/* 例子3:自定义编号列表 */ol.custom-counter {    list-style: none;    counter-reset: my-list-counter; /* 初始化计数器 */    padding-left: 0;}ol.custom-counter li {    position: relative;    padding-left: 35px; /* 留出编号空间 */}ol.custom-counter li::before {    counter-increment: my-list-counter; /* 每次列表项出现,计数器加1 */    content: "Step " counter(my-list-counter) ". "; /* 自定义显示格式 */    color: #007bff;    font-weight: bold;    position: absolute;    left: 0;    top: 0;    width: 30px; /* 编号区域宽度 */    text-align: right; /* 编号右对齐 */}

        这种方法给了你几乎无限的自由度,你可以控制符号的颜色、大小、字体、背景、边框、阴影,甚至可以做动画。但要注意,如果你的列表内容很多,或者符号本身比较复杂,确保你的CSS不会导致性能问题。另外,对于语义,虽然我们移除了原生的项目符号,但列表的HTML结构(

          ,

        • )依然保留了其语义,这对于屏幕阅读器等辅助技术是很重要的。

          在不同浏览器中,自定义列表样式有哪些兼容性挑战?

          兼容性这事儿,真是老生常谈了,但又不得不提。即便是在CSS标准日益统一的今天,一些细节上的差异仍然可能让你头大。

          首先,::marker伪元素虽然现在主流浏览器支持度已经相当不错了(Chrome、Firefox、Safari、Edge都支持),但在一些老旧的浏览器版本中,或者特定情况下,它的表现可能不尽相同。比如,你可能发现它在某个浏览器里垂直对齐有点跑偏,或者对某些CSS属性的支持不那么完善。我记得有一次,我在Chrome里调得好好的一个列表样式,到Safari里一看,项目符号的位置就有点跑偏,当时就觉得头大。

          其次,当你采用list-style: none;结合::before伪元素这种方式时,虽然它的兼容性普遍很好,因为::beforeposition等属性都是CSS的基础特性,但一些微小的默认样式差异仍然可能带来问题。例如:

          默认的paddingmargin 不同浏览器对ulolli的默认padding-leftmargin-left值可能不同。如果你不进行统一的CSS Reset,就可能导致自定义的项目符号与文本的间距在不同浏览器中不一致。所以,通常我会习惯性地给ul, ol { padding-left: 0; margin-left: 0; }行高(line-height)和垂直对齐: 当你使用position: absolute;来定位::before伪元素时,如果列表项的line-height设置不当,或者伪元素本身的font-sizeheight与行高不匹配,就很容易出现项目符号和文本垂直不对齐的问题。这需要你仔细调整top值、transform: translateY(-50%)或者利用flexbox来辅助对齐。这部分往往是调试中最耗时的地方。字体渲染差异: 如果你用Unicode字符作为content,不同操作系统和浏览器对字体的渲染方式可能导致字符的粗细、形状略有差异,虽然不影响功能,但可能会影响像素级的完美呈现。内联SVG和数据URI: 当你把SVG代码直接编码成数据URI放入background-image时,虽然方便,但需要注意编码的正确性,以及一些老旧浏览器对数据URI大小的限制。

          所以,多测试几遍,尤其是在你目标用户群体常用的浏览器和设备上进行测试,绝对没错。开发者工具里的“检查元素”功能和“模拟设备”模式是你的好帮手,可以帮你快速发现并解决这些兼容性问题。

          以上就是HTML列表怎样样式化_自定义项目符号方法的详细内容,更多请关注创想鸟其它相关文章!

          版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
          如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
          发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1094975.html

  • (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    蛙漫官网首页入口_蛙漫全网漫画洁净阅读环境
    上一篇 2025年12月2日 10:58:49
    QQ音乐怎么调灯光蹦迪_QQ音乐律动灯光模式设置教程
    下一篇 2025年12月2日 10:58:52

    相关推荐

    • 如何在MindSpore中训练AI大模型?华为AI框架的训练教程

      如何在MindSpore中训练AI大模型?华为AI框架的训练教程如何在MindSpore中训练AI大模型?华为AI框架的训练教程如何在MindSpore中训练AI大模型?华为AI框架的训练教程如何在MindSpore中训练AI大模型?华为AI框架的训练教程

      答案:MindSpore通过自动并行、混合精度、优化器状态分片等技术,结合Profiler工具调试性能瓶颈,实现大模型高效分布式训练。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 在MindSpore中训练AI大模型,核心在于巧妙地利用其…

      2026年9月21日 用户投稿
      300
    • MySQL数据库如何支持多租户业务_设计策略与实现?

      MySQL数据库如何支持多租户业务_设计策略与实现?MySQL数据库如何支持多租户业务_设计策略与实现?MySQL数据库如何支持多租户业务_设计策略与实现?MySQL数据库如何支持多租户业务_设计策略与实现?

      mysql 支持多租户架构的关键在于选择合适的数据隔离策略,并兼顾性能与运维管理。1. 常见方式包括共享数据库共享表(资源利用率高但隔离性差)、共享数据库独立表(平衡隔离性与维护成本)和独立数据库(隔离性强但管理复杂)。2. 租户识别需在请求前确定租户id,并自动附加到sql查询中,可通过视图或中间…

      2026年9月21日 用户投稿
      000
    • VSCode怎么启动Layui项目_VSCode运行Layui前端框架项目教程

      必须使用本地服务器运行Layui项目,因为直接打开HTML文件通过file://协议会受浏览器安全限制,导致AJAX、跨域等功能异常,Layui组件无法正常加载;推荐安装Node.js后使用npm全局安装http-server,通过命令行启动服务,或在VSCode中安装Live Server插件,右…

      2026年9月21日
      000
    • 俄罗斯Яндекс账号登录入口 Yandex电脑版官方网站登录

      答案是https://www.yandex.com/。该网站提供搜索、地图、新闻、翻译等服务,界面简洁,支持个性化设置与账户同步,并拥有邮箱、云存储及丰富的应用生态。 1、立即进入“☞☞☞☞点击俄罗斯yandex搜索引擎入口☜☜☜☜”; 2、立即进入“☞☞☞☞点击快速获取Yandex免登录官网链接☜…

      2026年9月21日
      000
    • 蝴蝶号直播掉帧、断流怎么办?技术实用建议

      蝴蝶号直播掉帧、断流怎么办?技术实用建议蝴蝶号直播掉帧、断流怎么办?技术实用建议蝴蝶号直播掉帧、断流怎么办?技术实用建议蝴蝶号直播掉帧、断流怎么办?技术实用建议

      解决蝴蝶号直播掉帧、断流问题需从硬件、软件、网络三方面入手。1. 硬件方面:检查cpu和gpu压力,必要时升级硬件或降低分辨率、帧率;确保摄像头、采集卡、内存正常工作。2. 软件方面:调整分辨率、帧率、码率至合适水平;使用h.265或硬件编码减轻cpu负担;设置关键帧间隔为2秒;关闭后台程序并检查平…

      2026年9月21日 用户投稿
      300
    • 如何使用Ribbet的AI功能裁剪图片?快速实现精准图像裁剪

      答案:Ribbet的AI裁剪功能可快速智能识别主体并推荐裁剪方案,支持手动微调与多种比例选择,结合亮度、色彩等编辑工具优化效果,适用于制作符合社交媒体尺寸要求的封面图,操作简便且大部分功能免费,适合追求效率的普通用户。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepS…

      2026年9月21日
      400
    • SystemTap

      SystemTap 简介 systemtap 是一款用于诊断 linux 系统性能或功能问题的开源工具。它使得对运行中的 linux 系统进行诊断和调试变得更加便捷和高效。有了 systemtap,开发者和调试人员无需重新编译内核、安装新内核或重启系统等繁琐步骤。为了解决系统问题或提升性能,开发者只…

      2026年9月21日
      100
    • Xdebug性能优化:解决PHP调试器导致页面加载缓慢或超时的问题

      当Xdebug配置不当,即使未主动调试,也可能导致PHP应用页面加载缓慢或超时。本文将深入探讨Xdebug的工作原理,指导如何通过正确配置xdebug.mode、排查多配置文件冲突,并利用Xdebug日志进行诊断,从而有效解决调试器造成的性能瓶颈,确保开发环境的流畅运行。 理解Xdebug的连接机制…

      2026年9月21日
      000
    • 卢伟冰:功能手机、智能手机之后 手机行业正进入新周期

      9月4日,小米集团总裁卢伟冰表示,继功能机时代与智能机时代之后,全球手机产业正迈入一个全新时代。 卢伟冰今日在社交平台发文提到:“我从2002年进入手机行业,有幸完整见证了功能手机和智能手机两大发展阶段。如今,AI时代已经到来,整个行业正在酝酿深刻变革,步入全新的发展周期。” 回望过去,功能手机时期…

      2026年9月21日
      200
    • 谷歌浏览器官方主站入口 最新Chrome在线登录页面

      谷歌浏览器官方主站入口是https://www.google.com,该页面具备界面简洁、操作流畅、集成化服务入口和个性化推荐等特点,支持多设备访问且无广告干扰。 谷歌浏览器官方主站入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来谷歌浏览器最新Chrome在线登录页面相关信息,感兴趣的…

      2026年9月21日
      000
    • win11怎么退回win10系统_win11降级回win10系统操作教程

      可在10天内通过系统恢复功能退回Windows 10,保留文件但卸载新增应用;超期则需用媒体工具或第三方软件重装,后者操作更简便但会清除数据。 如果您最近将系统升级到 Windows 11,但发现使用不习惯或存在兼容性问题,则可以考虑退回至 Windows 10。在特定时间窗口内,Windows 提…

      2026年9月21日
      000
    • MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录

      MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录MySQL重复数据检测与清理逻辑_Sublime脚本批量处理历史冗余记录

      处理mysql重复数据的核心步骤是识别并清理,可使用group by或窗口函数定位重复项,再通过分批删除或倒腾法安全清理;sublime text可用于高效生成和编辑sql语句。1. 识别重复数据常用group by+having或row_number()窗口函数;2. 清理策略包括分批删除、使用临…

      2026年9月21日 用户投稿
      100
    • 如何用PyTorch训练AI大模型?构建高效神经网络的完整教程

      如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程如何用PyTorch训练AI大模型?构建高效神经网络的完整教程

      PyTorch大模型训练需综合运用分布式训练、内存优化与高效计算策略。首先采用DistributedDataParallel实现多GPU并行,配合DistributedSampler确保数据均衡;通过混合精度训练、梯度累积和激活检查点缓解显存压力;使用torch.compile优化模型计算效率;选择…

      2026年9月21日 用户投稿
      100
    • vim 学习笔记(一)—— vim模式与创建、编辑文件

      vim 学习笔记(一)—— vim模式与创建、编辑文件vim 学习笔记(一)—— vim模式与创建、编辑文件vim 学习笔记(一)—— vim模式与创建、编辑文件vim 学习笔记(一)—— vim模式与创建、编辑文件

      vim 是基于linux开发的一款强大文本编辑器,源自vi并进行了扩展,具有跨平台和广泛工具支持的特性。据说,vim的高手能够以思想的速度在键盘上操作文本,因此我决定加入学习的行列。学习资料是b站上的生肉教程【公开课】完美的vim课程【生肉】,该教程侧重于讲解vim的思想和精髓,而非具体命令的详细介…

      2026年9月21日 用户投稿
      100
    • 360浏览器如何查看版本号 360浏览器查看当前版本信息方法

      1、通过帮助与反馈菜单可查看360浏览器版本,点击右上角菜单→帮助和反馈→关于360安全浏览器,即可显示完整版本号及更新状态。 如果您需要确认当前使用的360浏览器具体版本,以便进行功能核对或问题排查,可以通过浏览器内置的菜单选项快速获取该信息。 本文运行环境:联想小新Pro 16,Windows …

      2026年9月21日
      1000
    • QQ好友消息不提示怎么办 QQ消息通知设置与恢复方法

      手机QQ收不到消息提示通常因通知权限关闭或设置问题,需检查QQ内【新消息通知】开关是否开启;2. 查看手机系统设置中QQ的通知权限,确保允许显示通知并开启声音、震动等提醒;3. 使用QQ内置的【消息通知修复】工具自动修复异常;4. 关闭省电模式或将QQ加入电池优化白名单,确保后台正常运行。 手机QQ…

      2026年9月21日
      000
    • win10打开图片提示“没有注册类”怎么办_win10图片打开注册类错误解决方案

      首先重置照片应用并修复系统文件,再通过PowerShell重新注册应用包,最后调整默认应用关联以解决“没有注册类”错误。 如果您尝试在Windows 10中打开图片文件,但系统弹出“没有注册类”的错误提示,则可能是由于默认图片查看应用的注册信息丢失或损坏。以下是解决此问题的步骤: 本文运行环境:De…

      2026年9月21日
      200
    • 一部手机+蝴蝶号账号,开启你的直播副业之路

      一部手机+蝴蝶号账号,开启你的直播副业之路一部手机+蝴蝶号账号,开启你的直播副业之路一部手机+蝴蝶号账号,开启你的直播副业之路一部手机+蝴蝶号账号,开启你的直播副业之路

      开启直播副业确实可行,但需系统规划与长期坚持。1.选择舒适且有热情的内容领域,如技能教学、生活经验或兴趣分享,确保可持续输出;2.利用智能手机基础设备,搭配支架、补光灯等低成本工具提升画面稳定与光线效果;3.注册直播平台账号后,熟悉后台功能以优化直播体验;4.初期通过社交媒体预告宣传引流,并以高质量…

      2026年9月21日 用户投稿
      000
    • 怎么全选VSCode多个光标_VSCode多光标操作与批量选择文本教程

      VSCode中高效创建多光标的方法包括:Alt+Click手动添加光标,适用于不规则位置;Ctrl+Alt+方向键垂直添加光标,适合连续多行操作;Ctrl+D逐个选择匹配项,精准控制选择范围;Ctrl+Shift+L一次性选择所有匹配项,实现全局批量修改。结合查找替换和列选择模式可进一步提升编辑效率…

      2026年9月21日
      100
    • Spring Boot异常处理:为何需要自定义异常而非仅依赖HTTP状态码

      在Spring Boot应用中,自定义异常提供了比单一HTTP状态码更丰富的错误上下文,能够更精确地传达问题根源。这种细粒度的异常处理不仅提升了代码的可读性和可维护性,也极大地改善了用户体验,使客户端能够基于具体错误类型做出智能响应,而非仅仅接收到一个模糊的状态码。 为什么需要自定义异常? 在构建r…

      2026年9月21日
      200

    发表回复

    登录后才能评论
    关注微信