本组件为一对一或一对多的点击切换引擎。
安装与调用
引入相应的 JS 即可:
<script type="module" src="https://qidian.gtimg.com/lulu/hope/ui/Rel/index.js"></script>
或者:
<script type="module"> import 'https://qidian.gtimg.com/lulu/hope/ui/Rel/index.js'; </script>
使用说明
本组件不控制任何元素的显示与隐藏,只负责状态的变化。
使用 <ui-rel>
自定义元素实现,当点击此元素的时候,该元素的 open
属性会变化,同时,关联的目标元素(如果有),或添加类名 active
。
<ui-rel class="rel">点击我</ui-rel>
.rel[open] { color: var(--ui-red); }
禁用与否使用 disabled
属性。
target 属性关联
关联的目标元素通过 target
属性进行关联,当点击 <ui-rel>
元素的时候,页面中 id
为 target
属性值的元素会切换类名 active
,配合对应的 CSS,我们就可以实现我们想要的交互效果了。
例如下面的展开与收起效果:
- 列表1
- 列表2
- 列表3
- 列表4
- 列表5
- 列表6
<ul id="c1"> <li>列表1</li> <li>列表2</li> <li>列表3</li> <li hidden>列表4</li> <li hidden>列表5</li> <li hidden>列表6</li> <ui-rel target="c1">更多↓</ui-rel> </ul>
ul.active [hidden] { display: list-item; } ul.active ui-rel { -webkit-text-fill-color: transparent; } ul.active ui-rel::before { position: absolute; content: '收起↑'; -webkit-text-fill-color: currentColor; }
name属性与分组
如果 <ui-rel>
元素有 name
属性值,则点击该元素的时候,open
属性只会添加,不会移除。
只有当点击相同 name
属性值的其他 <ui-rel>
元素的时候才会移除。
<ui-rel class="rel" name="any">点击我高亮</ui-rel>
下面这个例子演示多个同 name
<ui-rel>
元素并存时候的效果。
<ui-rel class="rel" name="some" open>元素1</ui-rel> | <ui-rel class="rel" name="some">元素2</ui-rel> | <ui-rel class="rel" name="some">元素3</ui-rel>
下面这个例子演示了 <ui-rel>
元素有 name
和没有 name
属性值时候的区别。
标题A - 内容1
- 内容2
标题B - 内容1
- 内容2
标题C - 内容1
- 内容2
标题A - 内容1
- 内容2
标题B - 内容1
- 内容2
标题C - 内容1
- 内容2
<div class="accordion"> <dl> <dt id="dt1"><ui-rel target="dt1">标题A</ui-rel></dt> <dd>内容1</dd> <dd>内容2</dd> <dt id="dt2"><ui-rel target="dt2">标题B</ui-rel></dt> <dd>内容1</dd> <dd>内容2</dd> <dt id="dt3"><ui-rel target="dt3">标题C</ui-rel></dt> <dd>内容1</dd> <dd>内容2</dd> </dl> <dl> <dt id="dt4"><ui-rel target="dt4" name="dt">标题A</ui-rel></dt> <dd>内容1</dd> <dd>内容2</dd> <dt id="dt5"><ui-rel target="dt5" name="dt">标题B</ui-rel></dt> <dd>内容1</dd> <dd>内容2</dd> <dt id="dt6"><ui-rel target="dt6" name="dt">标题C</ui-rel></dt> <dd>内容1</dd> <dd>内容2</dd> </dl> </div>
.accordion dd { display: none; } .accordion .active + dd, .accordion .active + dd + dd { display: block; }
当设置了 name
属性,同时设置了 target
对象,再配合一些 CSS 样式,就可以实现的选项卡切换效果。
我是选项卡1对应的图片
我是选项卡2对应的图片
我是选项卡3对应的图片
<div class="tab-x"> <div class="tab"> <ui-rel class="tab-label" name="s-tab" target="t1" open>选项卡1</ui-rel> <ui-rel class="tab-label" name="s-tab" target="t2">选项卡2</ui-rel> <ui-rel class="tab-label" name="s-tab" target="t3">选项卡3</ui-rel> </div> <div id="t1" class="tab-content active"> <p>我是选项卡1对应的图片</p> <img src="1.jpg" /> </div> <div id="t2" class="tab-content"> <p>我是选项卡2对应的图片</p> <img src="2.jpg" /> </div> <div id="t3" class="tab-content"> <p>我是选项卡3对应的图片</p> <img src="3.jpg" /> </div> </div>
本页贡献者:
zhangxinxu