php hidden属性,微信小程序关于组件的hidden属性的使用建议
1,先看一个作者的实验
微信官方文档里有提到,hidden是所有组件都有的属性,在实际编码中发现,它的表现与描述不能完全想符。
例如如下布局:
你会发现hidden没生效。
经实验发现hidden元素对块状布局才生效,所以这段代码里导致hidden没生效的罪魁祸首是display:flex,把这个去掉就可以了。
为了验证作者说的话,我翻了css文档,一一实践了所有display样式可能的值:
值 描述
none 此元素不会被显示。
block 此元素将显示为块级元素,此元素前后会带有换行符。
inline 默认。此元素会被显示为内联元素,元素前后没有换行符。
inline-block 行内块元素。(CSS2.1 新增的值)
list-item 此元素会作为列表显示。
run-in 此元素会根据上下文作为块级元素或内联元素显示。
compact CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
marker CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。
table 此元素会作为块级表格来显示(类似 ),表格前后带有换行符。
inline-table 此元素会作为内联表格来显示(类似 ),表格前后没有换行符。
table-row-group 此元素会作为一个或多个行的分组来显示(类似 )。
table-header-group 此元素会作为一个或多个行的分组来显示(类似 )。
table-footer-group 此元素会作为一个或多个行的分组来显示(类似 )。
table-row 此元素会作为一个表格行显示(类似 )。
table-column-group 此元素会作为一个或多个列的分组来显示(类似 )。
table-column 此元素会作为一个单元格列显示(类似 )
table-cell 此元素会作为一个表格单元格显示(类似 和 )
table-caption 此元素会作为一个表格标题显示(类似 )
inherit 规定应该从父元素继承 display 属性的值。
改成任何一个值,除了none,还有被废弃的compact、marker,都不能奏效。
那么,WHY?
我们还是先继续阅读原文吧~
2,使用display:none控制显隐
如果一定要用flex布局怎么办?
其实这里想用hidden无非就是想隐藏这个布局,display:none也能做到隐藏。这里可以用一个取巧的方法,动态设置display属性,示例如下:
这里的hideview是在对应的js里是一个变量,由js来动态控制。
后话:hidden 隐藏布局,虽然隐藏了,但是还是会占空间,display:none 隐藏不占据空间。
3,关于wx:if与hidden的区别
最后这一句话,应该怎么理解?是不占界面空间吗?
不是!
作者想表达的意思,推测应该是:hidden虽然隐藏了视图组件,但组件仍然会渲染;display:none与hidden=true的效果是一样的,display:none仍然会渲染组件。
如果想不渲染不需要的组件,要使用条件渲染:wx:if
wx:if vs hidden
因为 wx:if 之中的模板也可能包含数据绑定,所有当 wx:if 的条件值切换时,框架有一个局部渲染的过程,因为它会确保条件块在切换时销毁或重新渲染。
同时 wx:if 也是惰性的,如果在初始渲染条件为 false,框架什么也不做,在条件第一次变成真的时候才开始局部渲染。相比之下,hidden 就简单的多,组件始终会被渲染,只是简单的控制显示与隐藏。一般来说,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。(转自微信文档)
4,关于上面那个WHY的解答
回到上面的红色语句的问题,不能说问题由display:flex引起的,而是由程序员自己造成的。
看一下view style的渲染:
小程序是先渲染组件name样式(即view),再渲染style属性样式。(未在ios与android手机上亲测)
所以就很好理解了,不是微信小程序的hidden不生效,而是小程序的hidden属性,是通过在name style上加一个display:none实现的,见上方红色箭头处。
而后,程序员又在style属性里设置了一个display:block,直接将小程序的设置override掉了。所以,它怎么可能生效呢?这不怪程序员自己吗?
那么,为什么使用废掉的compact、marker就好用了呢?
因为它们两个完全在小程序中是不存在的。设置它们等于没有设置。
5,关于hidden属性的值,不设也罢,设也无用
另外,有一点,关于hidden属性的值,像上面的代码:
hidden="true"
其实设置成hidden="false",或“0”,或者其它任何值,都是等效的,结果都是true。
不单hidden属性如此,在小程序组件中,所有布尔值属性都是这样的特征。完成可以这样用:
只要写了这个hidden属性就可以了。
6,建议不要使用hidden属性,它是一个无用的脑残属性
所以,大家都看到了:
1,使用display:none可以达到与hidden同样的效果
2,hidden的值无论怎么设置结果都是true,连动态绑定都没得做,只能使用wx:if进行条件渲染
3,话说回来,如果都要使用惰性的wx:if条件渲染了,我还用hidden干莫?
wx:if渲染是惰性渲染,只在需要的时候渲染,缺点是反复摧毁与重建,费电!(浪费手机CPU,真的是费电)
而display:none,只是切换显示,已经渲染的东西还在那里。
总结,如果不是长列表渲染,推荐使用display:none控制显隐,如果是长列表渲染,使用条件渲染。
hidden完全是一个脑残属性,没有用途。只会让程序员产生迷惑。
php hidden属性,微信小程序关于组件的hidden属性的使用建议相关推荐
- 【微信小程序】组件使用及属性参考
文章目录 3.1 视图容器组件 3.1.1 视图容器view 3.1.2 滚动视图scroll-view 3.1.3 可移动视图movable-view 3.1.4 覆盖视图 3.1.5 滑块视图sw ...
- 微信小程序自定义组件的计算属性功能
1.behavior.js module.exports = Behavior({lifetimes: {created() {this._originalSetData = this.setData ...
- 微信小程序自定义组件,提示组件
微信小程序自定义组件,这里列举了一个常用的提示自定义组件,调用自定义组件中的方法和字段.仅供参考和学习. 编写组件: 在根目录下添加"components"目录,然后像添加Page ...
- php小程序onload,微信小程序 loading 组件实例详解
这篇文章主要介绍了微信小程序 loading 组件实例详解的相关资料,需要的朋友可以参考下 loading通常使用在请求网络数据时的一种方式,通过hidden属性设置显示与否 主要属性: wxml 显 ...
- 微信小程序 常用组件
欢迎体验个人小程序 表情小作坊 轻松定制表情包 三连图 文字转图片 吃什么都行 解决广大用户吃饭选择恐惧症的问题 微信小程序的组件也挺多了,还是把官网的组件介绍地址先贴出来吧 https://mp.w ...
- 基于canvas 2D实现微信小程序自定义组件-环形进度条
基于canvas 2D实现微信小程序自定义组件-环形进度条 最近开发一个小程序项目博闻金榜答题小程序,需要使用到一个可以显示答题倒计时的组件,基于进度条实现,下面就主要介绍基于canvas2D实现一个 ...
- 微信小程序电子签名组件
微信小程序电子签名组件,封装抽离可复用,签名成功输出base64和临时文件路径,解决vant弹窗中使用导致背景滚动问题,宽度自适应,高度设置百分比,开箱即用! 文章目录 一.效果图 二.组件完整代码示 ...
- 微信小程序自定义组件-树形数据表格(进阶版)
前言 一.下载引用 二.使用treegrid组件 三.使用文档 属性 事件 四.组件源码 利用递归思想编写的表格行--treegrid-treeline 树形表格--treegrid-treegrid ...
- 微信小程序image组件开发程序以及相关图片问题参考资料汇总
微信小程序image组件开发程序以及相关图片问题参考资料汇总,希望对大家小程序开发能有一定的参考和借鉴价值.以下汇总主要涉及到微信小程序image组件有关资源路径.缩放和剪裁模式等进行的探讨,无论是对 ...
- WeChat微信小程序image组件aspectFill:保留中部 等比例变化 Widthfix:宽度为指定的 高度依据原图的宽高比进行变化
aspectFill:保留中部 等比例变化 aspectFill 与 widthfix 都是保持宽高比不变 aspectFill 保持纵横比缩放图片,只保证图片的短边能完全显示出来. 也就是说,图片通 ...
最新文章
- 【计算理论】计算复杂性 ( 3-SAT 是 NP 完全问题 | 团问题是 NP 完全问题 | 团问题是 NP 完全问题证明思路 )
- 使ALV控件中的内容可编辑
- 网站页首可关闭广告条
- 互联网工程任务组(IETF)
- 如何得到当前浏览器是什么
- python画图如何调整图例位置_Python——legend()图例位置调整
- 微信小程序多位验证码/密码输入框
- 面试官:有了 for 循环,为什么还要 forEach ??
- APT***实例研究与企业现有防御体系缺陷分析
- junit搭配hamcrest使用
- SQL window身份登陆 SQL server不能登陆
- 以自己范例,说明如何写操作文档
- 正式开始撰写《产品大师》,经验来自点滴的积累
- Pytorch grid_sample解析
- 动漫制作要学计算机吗,学习动漫制作需要掌握哪些电脑软件?
- 微信文件撤回时间多长_微信消息怎么撤回?撤回时间限制是多久?
- favicon.ico无法访问
- 第一期vue项目实践问题与收获总结
- flink 架构、概念介绍
- enq 命令的帮助.
热门文章
- dom4j解析xml_JAVADom、Sax解析XML详解
- JUC和线程池的详细讲解
- 单元格自适应宽度_Excel – 合并单元格时,如何同时保留每个单元格的内容?...
- 运用集合把文字写入读出文件
- C# 代码创建mysql存储过程(使用mysqlScript)
- 苹果:我们从未向中国政府透露源代码
- POJ2063 Investment(完全背包)
- iPad 2 移植 Siri 常见问题解答及注意事项
- wordpress评论审核通过发邮件给评论者
- python 路径拼接_python路径拼接os.path.join()函数的用法