微信小程序开发系列-09自定义组件样式特性

微信小程序开发系列目录

  • 《微信小程序开发系列-01创建一个最小的小程序项目》
  • 《微信小程序开发系列-02注册小程序》
  • 《微信小程序开发系列-03全局配置中的“window”和“tabBar”》
  • 《微信小程序开发系列-04获取用户图像和昵称》
  • 《微信小程序开发系列-05登录小程序》
  • 《微信小程序开发系列-06事件》
  • 《微信小程序开发系列-07组件》
  • 《微信小程序开发系列-08自定义组件模版特性》

文章目录

  • 微信小程序开发系列目录
  • 前言
  • 自定义组件样式特性
    • 样式隔离
        • 小结
    • 外部样式
      • 运行结果
    • 引用页面或父组件样式
      • 示例
    • 虚拟化组件节点
  • 总结

前言

本文将学习自定义组件样式的4个特性:样式隔离、外部样式、引用页面或父组件样式、虚拟化组件节点。

自定义组件样式特性

样式隔离

默认情况下,自定义组件的样式只受到自定义组件 wxss 的影响。除非以下两种情况:

  • 指定特殊的样式隔离选项 styleIsolation
  • webview 渲染下,在 app.wxss 或页面的 wxss 中使用标签名选择器(或一些其他特殊选择器)来直接指定样式会影响到页面和全部组件。通常情况下这是不推荐的做法。

styleIsolation在自定义组件的component中设置。

自定义组件的 styleIsolation 选项从基础库版本 2.10.1 开始支持。它支持以下取值:

  • isolated 表示启用样式隔离,在自定义组件内外,使用 class 指定的样式将不会相互影响(一般情况下的默认值);

  • apply-shared 表示页面 wxss 样式将影响到自定义组件,但自定义组件 wxss 中指定的样式不会影响页面;

  • shared 表示页面 wxss 样式将影响到自定义组件,自定义组件 wxss 中指定的样式也会影响页面和其他设置了 apply-sharedshared 的自定义组件。(这个选项在插件中不可用。)

小结
  1. app.wxss 或页面的 wxss 中使用标签名选择器 指定的样式会影响到页面和全部组件。(PS:不推荐这么做)
   /* app.wxss 设置所有view标签背景色为黄色,text为块元素*/view {background: yellow;}text {display: block;}
   /* index.wxss */.red {color: red;}.blue {color: blue;}
   <!-- index.wxml --><view>这段文本有底色</view><text class="red">这行字是红的</text><text class="blue">这行字是蓝的</text><isolated />
   <!-- isolated.wxml --><view>isolated: 这段文本有底色</view><text class="red">但这行字不是红的</text><text class="blue">但这行字不是蓝的</text>
   /* isolated.wxss */:host {display: block;}.red{color: green;}
   // isolated.jsComponent({options: {styleIsolation:"isolated"}})

运行结果:

请添加图片描述

可以看到,虽然设置了"styleIsolation"="isolated",isolated组件的text的颜色样式为内部设置的值,但view标签还是黄色的底色。

  1. 默认情况下("styleIsolation"="isolated"),自定义组件 wxss 的样式仅对内部起作用,且会隔离页面相同样式。

  2. "styleIsolation"="apply-shared",页面 wxss 样式将影响到自定义组件,但自定义组件 wxss 中指定的样式不会影响页面;外部可以影响内部,但内部不能影响外部;

    请添加图片描述

  3. shared表示页面 wxss 样式将影响到自定义组件,自定义组件 wxss 中指定的样式也会影响页面和其他设置了apply-sharedshared` 的自定义组件。

请添加图片描述

本示例中,isolated组件“但这行字不是红的”本来是绿色,但改为shared后,index.wxss的样式起作用了。说明页面的样式优先级更好。

所以我猜测,小程序的样式的优先级应该是自顶向下的。

外部样式

有时候自定义组件希望能接受外部传入的样式类。此时可以在 Component 中用 externalClasses 定义若干个外部样式类。

// isolated.js
Component({options: {styleIsolation:"isolated"},externalClasses: ['my-class'] // 添加外部样式类my-class
})
<!-- isolated.wxml -->
<view>isolated: 这段文本有底色</view>
<text class="my-class">这段文本的颜色由组件外的 class 决定</text> <!-- 由外部class决定样式 -->
<text class="blue">但这行字不是蓝的</text>
/* index.wxss */
.red {color: red;
}.blue {color: blue;
}.red-text {color: red;
}
<!--index.wxml-->
<view>这段文本有底色</view>
<text>这行字是红的</text>
<text class="blue">这行字是蓝的</text>
<isolated my-class="red-text"/> <!-- 自定义组件指定my-class的样式-->

运行结果

请添加图片描述

引用页面或父组件样式

在“样式隔离”一节中,我们提到自定义组件使用isolated可以隔离所在页面的类选择器样式;但平台仍然提供了可以在局部引用组件所在页面的样式或父组件的样式。

组件可以使用 ~ 来引用页面中类的样式。

组件可以使用^来引用父组件中类的样式;也可以连续使用多个 ^ 来引用祖先组件中的样式。

示例

请添加图片描述

虚拟化组件节点

默认情况下,自定义组件本身的那个节点是一个“普通”的节点,使用时可以在这个节点上设置 class style 、动画、 flex 布局等。如下图所示,在isolated节点上设置样式:flex布局,字体红色,默认居左,边框红色;在slot中插入。组件内部样式:字体蓝色,居中,边框蓝色。

请添加图片描述

有些时候,自定义组件并不希望这个节点本身可以设置样式、响应 flex 布局等,而是希望自定义组件内部的第一层节点能够响应 flex 布局或者样式由自定义组件本身完全决定。

如下图所示:打开虚拟节点后,index页面的isolated组件上的样式失效了。也就是isolated节点本身设置的样式不起作用了,且只有组件内部的两个view组件能效应index页面的flex布局,且边框颜色采用自己的配置(蓝色)。

请添加图片描述

前面提到,打开虚拟节点后,“index页面的isolated组件上的样式失效了”,但是,仍然可以在properties中定义style属性获取到“index页面的isolated组件上的样式”。如下图所示:

请添加图片描述

这个部分有点难理解,需要仔细分析。总结下:就是说一般情况下,虚拟化组件节点可以“阻断”页面上组件的直接指定的style样式;但是凡事都没那么绝对,平台又通过properties+style数据绑定的方式将这种“阻断”又能连通,不一棍子打死。我现在还没遇到需要这种特性的场景,直觉告诉我,这么复杂的东西应该没人用。如果有场景用的话,请评论区告知我,也学习下。顺便看看有没有其他方案可以解决。

总结

本文学习了自定义组件的4个特性:

  1. 样式隔离。通过styleIsolation 选项,设置不同的值,自定义组件的样式与页面的样式会产生不同程度的相互影响。
  2. 外部样式。自定义组件接受外部的样式。
  3. 引用页面或父组件样式。在自定义组件内部 局部引用 组件所在页面的样式或父组件的样式。
  4. 虚拟化组件节点。“阻断”页面上自定义组件直接指定的style样式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587334.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速找回误删的文件:2024 年顶级数据恢复软件大盘点

你曾经遇到过数据丢失的问题吗&#xff1f;别担心&#xff0c;12个最佳数据恢复软件帮你恢复。 计算机中的数据恢复是从辅助存储、丢失的文件或介质中恢复已删除、不可恢复、损坏、损坏和格式化的数据的过程。存储的数据可以通过正常方式带回到同一个地方&#xff0c;甚至&…

模版匹配历劫之路2-探究空间金字塔对于匹配速度的影响

1 方法一 在合适的金字塔层数上&#xff0c;低步长旋转角度&#xff0c;逐层缩小旋转范围&#xff0c;达到提高匹配速度的效果 金字塔越高&#xff0c;模版越模糊&#xff0c;但是只要模版不会被降级很严重&#xff0c;那么模版的边缘方向不会受到太大的影响。高层级别的金字塔…

简单的springboot项目

传参方式 URL 传参 URL 传参的两种常见方式是通过查询参数和路径参数。 查询参数&#xff1a; 查询参数是通过在 URL 后面使用 ? 字符&#xff0c;然后以 keyvalue 的形式添加到 URL 中。多个查询参数之间使用 & 符号分隔。例如&#xff1a;https://example.com/api?…

【网络安全 | Misc】normal_png

方法一 可以通过stegsolve或winhex看到图片高度被改写&#xff1a; 改为&#xff1a; 再保存图片即可&#xff1a; flag{B8B68DD7007B1E406F3DF624440D31E0}方法二 使用脚本查看宽高是否被修改&#xff1a; import zlib import struct import argparse import itertoolspars…

Java强软弱虚引用

面试&#xff1a; 1.强引用&#xff0c;软引用&#xff0c;弱引用&#xff0c;虚引用分别是什么&#xff1f; 2.软引用和弱引用适用的场景&#xff1f; 3.你知道弱引用的话&#xff0c;能谈谈WeakHashMap吗&#xff1f; 目录 一、Java引用 1、强引用&#xff08;默认支持模式…

【C++】STL 容器 - multiset 容器 ( std::multiset 容器简介 | std::multiset 容器 常用操作 api 简介 )

文章目录 一、mulset 容器1、std::multiset 容器简介2、代码示例 - multiset 容器 二、std::multiset 容器 常用操作 api 简介1、常用 api 简介2、代码示例 - multiset 容器常用操作 一、mulset 容器 1、std::multiset 容器简介 在 C 语言 的 标准模板库 ( STL , Standard Temp…

数据库的学习笔记——第一篇

SQL通用语法 SQL语句 DDL 数据定义 数据库、表字段 DML 数据操作 增删改 DQL 数据查询 查询表中记录 DCL 数据控制 创建用户、控制用户权限 DLL语句——数据库操作 SHOW DATABASES; # 查询数据库SELECT DATABASE(); # 查询当前数据库CREATE DATABASE [IF …

【数据结构】六、树和二叉树

目录 一、树的基本概念 二、二叉树 2.1二叉树的性质 2.2二叉树的存储结构 2.3遍历二叉树 先序遍历 中序遍历 后序遍历 层次遍历 2.4二叉树的应用 计算叶子数 前序遍历建树 根据序列恢复二叉树 计算树的深度 判断完全二叉树 三、线索二叉树 3.1线索化 四、树和森林…

Scala知识点——App类

我们在代码中一般程序都是是通过main方法进入。但是在scala中提供了一个App类&#xff0c;通过继承可以实现不用显式的调用main方法就能运行。 App类中实现了main方法&#xff1a;

迪杰斯特拉(Dijkstra)算法详解

【专栏】数据结构复习之路 这篇文章来自上述专栏中的一篇文章的节选&#xff1a; 【数据结构复习之路】图&#xff08;严蔚敏版&#xff09;两万余字&超详细讲解 想了解更多图论的知识&#xff0c;可以去看看本专栏 Dijkstra 算法讲解&#xff1a; 迪杰斯特拉算法(Di…

前端基础(三十七):属性结构数据进行关键字筛选

效果 核心源码 type MenuItem {label: string;key: string | number;icon?: React.ReactNode;children?: MenuItem[];type?: group; }function filterTreeData(tree: MenuItem[], keyword: string): MenuItem[] {return tree.filter((node: MenuItem) > {if (node.labe…

SUMO Reward Points v29.8.0WooCommerce 奖励系统插件WORDPRESS积分奖励系统

SUMO Reward Points v29.8.0WooCommerce 奖励系统插件WORDPRESS积分奖励系统 SUMO 奖励积分&#xff1a;WooCommerce 的忠诚度解决方案 一、引言 SUMO 奖励积分&#xff0c;v29.8.0&#xff0c;是一个卓越的WooCommerce插件&#xff0c;致力于为电商提供一套完整的忠诚度奖励系…

matplotlib单变量和双变量可视化

使用seaborn 库的tips数据集&#xff0c;其中包含了某餐厅服务员收集的顾客付小费的相关数据&#xff08;评论区&#xff09; 单变量可视化 直方图 直方图是观察单个变量最常用的方法。这些值是经过"装箱"&#xff08;bin&#xff09;处理的 直方图会将数据分组后绘…

IntelliJ IDEA [插件 MybatisX] mapper和xml间跳转

文章目录 1. 安装插件2. 如何使用3. 主要功能总结 MybatisX 是一款为 IntelliJ IDEA 提供支持的 MyBatis 开发插件 它通过提供丰富的功能集&#xff0c;大大简化了 MyBatis XML 文件的编写、映射关系的可视化查看以及 SQL 语句的调试等操作。本文将介绍如何安装、配置和使用 In…

B/S架构云端SaaS服务的医院云HIS系统源码,自主研发,支持电子病历4级

医院云HIS系统源码&#xff0c;自主研发&#xff0c;自主版权&#xff0c;电子病历病历4级 系统概述&#xff1a; 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统…

Spring漏洞合集

目录 什么是spring区分Spring与Struts2框架的几种新方法CVE-2016-4977&#xff1a;Spring Security OAuth2 远程命令执行漏洞漏洞介绍 & 环境准备漏洞发现漏洞验证 & 利用1利用2 CVE-2017-4971&#xff1a;Pivotal Spring Web Flow 远程代码执行漏洞漏洞介绍 & 环境…

使用Pytorch搭建模型

本来是只用Tenorflow的&#xff0c;但是因为TF有些Numpy特性并不支持&#xff0c;比如对数组使用列表进行切片&#xff0c;所以只能转战Pytorch了&#xff08;pytorch是支持的&#xff09;。还好Pytorch比较容易上手&#xff0c;几乎完美复制了Numpy的特性&#xff08;但还有一…

广州市网约车平台:照片上传标准与处理技巧全解析

《广州市网络预约出租汽车综合业务管理平台》是一个旨在规范和提升广州市网约车服务质量的在线管理系统。它整合了司机和车辆信息管理、预约服务、监管监控、服务质量评价以及数据分析等功能&#xff0c;确保网约车服务符合当地法规要求&#xff0c;同时为乘客提供安全、便捷的…

浅谈大模型推理成本优化

上回说了&#xff0c;全赞AI的应用里面有用到几十个大模型&#xff0c;我的其他的应用比如渣渣句&#xff0c;熊喵表情都会或多或少的用到一到两个大模型的推理。而众所周知&#xff0c;目前大模型的推理存在两个问题&#xff0c;一个是慢&#xff0c;一个是贵&#xff0c;慢的…

微服务系列之分布式事务理论

概述 事务是由一组操作构成的可靠的独立的工作单元&#xff0c;事务具备ACID的特性&#xff0c;即原子性、一致性、隔离性和持久性。 分类 大多数情况下&#xff0c;分类是没有意义的一件事。但是分类可以一定程度上&#xff0c;加深理解。 实现 从实现角度来看&#xff0…