HTML5应用中accordion三种效果的探索

摘要:Accordion(手风琴,又名"抽屉")效果,因其收展样式形如手风琴而得名。通过层级关系,在信息展示和页面布局上,达到巧妙的平衡。因此,广泛运用于Web以及App交互设计中。在以往的项目中Accordion通常是由JavaScript编码实现。本次分享,着重探索两种不依靠JS,采用纯CSS3或HTML5来实现其效果。并对其优缺点作初步的对比。

传统JS实现方式

1、原生JavaScript

2、调用JS库文件,jQuery、jQuery Mobile

$‘.menu_lev1‘).clickfunction) {

var _this=$this),

_next=_this.next);

if _next.is‘:visible‘)) {

$‘.menu_lev1‘).removeClass‘on‘);

$‘.menu_lev2‘).slideUp600);

_this.addClass‘on‘);

_next.slideDown600);

} else {

_next.slideUp600);

_this.removeClass‘on‘);

}

return true;

});

复制代码缺点:效率低,成本高,行为和样式耦合紧密。

CSS3 伪类:target

target 是 CSS3 中新增的伪类之一。其能通过锚点,为目标元素添加指定的样式。因其页面中锚点的唯一性,能实现互斥的轮换效果。

示例代码1:h1一级目录/h1>

ul id="ac1">

li>二级菜单1/li>

li>二级菜单2/li>

li>二级菜单3/li>

/ul>

复制代码

ul{ display:none;}

ul:target{display:block;}

复制代码示例代码2:c1">一级目录/a>/h1>

ul id="ac1">

li>二级菜单1/li>

li>二级菜单2/li>

li>二级菜单3/li>

/ul>

h1>2">一级目录/a>/h1>

ul id="ac2">

li>二级菜单1/li>

li>二级菜单2/li>

li>二级菜单3/li>

/ul>

h1>一级目录/a>/h1>

ul id="ac3">

li>二级菜单1/li>

li>二级菜单2/li>

li>二级菜单3/li>

/ul>

复制代码

ul{ display:none;}

ul:target{display:block;}

复制代码示例代码3:div id="ac1" >

h1>a >一级目录/a>span>/span>/h1>

ul>

li>二级菜单1/li>

li>二级菜单2/li>

/ul>

/div>

div id="ac2" >

h1>a >一级目录/a>span>/span>/h1>

ul>

li>二级菜单1/li>

li>二级菜单2/li>

/ul>

/div>

div id="ac3" >

h1>a 3">一级目录/a>span>/span>/h1>

ul>

li>二级菜单1/li>

li>二级菜单2/li>

/ul>

/div>

复制代码

ul{-webkit-transition:all ease 1s; }

div:target ul{height:400px;}

div:target span{-webkit-transform:rotate90deg);}

复制代码Css3 伪类:targetl 缺点:1、不具有二元性。2、过渡动画高度不可自动获取。

HTML5 标签 summary & details

summary & details是HTML5中两个新标签,除了具有很强的语义化之外,它还有令人惊喜的动态效果。因此,抓住这一特性,我们也能很容易的制作出轻量级的手风琴效果来。一般来讲,应该成对使用这两个标签。

示例代码1:details>

summary>一级目录/summary>

ul>

li>二级菜单/li>

li>二级菜单/li>

li>二级菜单/li>

/ul>

/details>

复制代码默认样式:可以给details添加open属性,使详情默认展开。 该标签目前仅webkit内核支持。

示例代码2:details>

summary>一级目录/summary>

ul>

li>二级菜单/li>

li>二级菜单/li>

li>二级菜单/li>

/ul>

details>

summary>二级菜单/summary>

ul>

li>三级菜单/li>

li>三级菜单/li>

li>三级菜单/li>

/ul>

/details>

/details>

复制代码说明:可以嵌套使用,形成三级活更多级别菜单。

details summary::-webkit-details-marker {background: red;color: #fff;font-size: 200%;}

summary::-webkit-details-marker { display: none }

summary:after { content: "+";}

details[open] summary:after {content: "-";}

复制代码缺点:1、不具有互斥性。2、目前还不支持过渡动画效果。

小  结JS实现accordion效果,成本高,效率低,目前而言能实现最为丰富的效果。 CSS3实现accordion效果,成本低,效率高,虽可以实现丰富的动画效果,但不具有二元性。HTML5实现accordion效果,成本低,效率高,但缺乏动画效果,且不具有互斥性。目前支持的浏览器内核有限。

展 望 CSS3 和 HTML5 的引入和发展,某种程度上进一步推进结构,样式,行为三者分离的Web设计的理念。从而减小表现上对JS的依赖,降低网页制作的成本且提高网页运行的效率。 没有理由不期待css3和HTML5不断完善,假以时日能够提供更为强大的功能。

建 议

在含有内容较多的web app中,基于性能优先的原则,适当优雅降级,采用HTML5标签实现Accordion效果。至少Html5doctor作者是比较推崇 Wordpress 中采用的。

转载自:CUBE

时间: 2024-11-03 13:54:01

HTML5应用中accordion三种效果的探索的相关文章

JavaScript中的三种弹出对话框

JavaScript中的三种弹出对话框 *****本文来自互联网****** 学习过js的小伙伴会发现,我们在一些实例中用到了alert()方法.prompt()方法.prompt()方法,他们都是在屏幕上弹出一个对话框,并且在上面显示括号内的内容,使用这种方法使得页面的交互性更精彩,实际上我们经常会在进行网页浏览时简单这种类型的对话框,在用户与应用程序进行双向交流时,经常要用到对话框.avascript的三种对话框是通过调用window对象的三个方法alert(),confirm()和prom

Oracle中的三种Join 方式

基本概念 Nested loop join: Outer table中的每一行与inner table中的相应记录join,类似一个嵌套的循环. Sort merge join: 将两个表排序,然后再进行join. Hash join: 将两个表中较小的一个在内存中构造一个Hash 表(对Join Key),扫描另一个表,同样对Join Key进行Hash后探测是否可以join,找出与之匹配的行. 一张小表被hash在内存中.因为数据量小,所以这张小表的大多数数据已经驻入在内存中,剩下的少量数据

js oop中的三种继承方法

JS OOP 中的三种继承方法: 很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分. <继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方法.(继承的两方,发生在两个类之间)> 一.通过object实现继承 1:定义父类 function Parent(){} 2:定义子类 funtion Son(){} 3:通过原型给Object对象添加一个扩展方法. Object.prototype.customExtend = function(p

.NET中的三种接口实现方式

摘自:http://www.cnblogs.com/zhangronghua/archive/2009/11/25/1610713.html 一般来说.NET提供了三种不同的接口实现方式,分别为隐式接口实现.显式接口实现.混合式接口实现.这三种方式各有各的特点. 首先来看隐式接口实现,这恐怕是我们使用最多的一种接口实现,因为隐匿接口实现是.NET的默认接口实现方式.下面让我们来看一个隐式接口实现的例子: using System; internal class MyClass { public

SQL Server 中的三种分页方式

USE tempdb GO SET NOCOUNT ON --创建表结构 IF OBJECT_ID(N'ClassB', N'U') IS NOT NULL DROP TABLE ClassB GO CREATE TABLE ClassB(ID INT PRIMARY KEY, Name VARCHAR(16), CreateDate DATETIME, AID INT, Status INT) CREATE INDEX IDX_CreateDate ON ClassB(CreateDate)

C++ 中的三种类型

C++中一共三种类型 1.C++内置类型,2.1节中讲到的int.double.bool等就是基本的内置类型(低级数据类型): 2.C++还定义了一个内容丰富的抽象数据类型标准库,其中重要的如string.vector,数组和指针等(更高级的抽象数据类型): 3.第三种就是自定义的类类型,前面说过C++ 设计的焦点就是使所定义的类类型的行为可以像内置类型一样自然.

.NET中的三种Timer的区别和用法(转)

最近正好做一个WEB中定期执行的程序,而.NET中有3个不同的定时器.所以正好研究研究.这3个定时器分别是:  //1.实现按用户定义的时间间隔引发事件的计时器.此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用.  System.Windows.Forms.Timer  // 2.提供以指定的时间间隔执行方法的机制.无法继承此类.  System.Threading.Timer  //3.在应用程序中生成定期事件.  System.Timers.Timer  这三个定时器位

MySQL buffer pool中的三种链

三种page.三种list.LRU控制调优 一.innodb buffer pool中的三种页 1.free page:从未用过的页 2.clean page:干净的页,数据页的数据和磁盘一致 3.dirty page:脏页 SQL执行需求: 1.找free页 2.刷新脏页 1.这个页不是热的数据页(刷冷页) 2.这个页最早修改时间(刷修改时间比较早的页,有可能是热页),方便日志文件的覆盖 3.覆盖冷的clean页 为了实现上述需求,innodb用到链表技术(每种链表一种作用,链的存在意义是为了

内存管理中的三种地址

一.逻辑地址(有时也称虚拟地址) 逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分.例如在C语言指针编程中,可以读取指针变量本身值(&操作)实际上这个值就是逻辑地址,它是相对于当前进程数据段的地址和绝对物理地址无关. 只有在Intel处理器的实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,CPU不进行自动地址转换).逻辑地址也就是在Intel 处理器的保护模式下,程序执行代码段限长内的偏移地址(假定代码段.数据段完全样). CPU启动保护模式后