利用 hover 伪类创建纯 CSS 收缩面板

简介: SVN 源码/例子:http://naturaljs.googlecode.com/svn/trunk/demo/widgets/hoverTab.htm这是一个非常简单的例子,主要利用了元素 hover 高亮效果的特性创建收缩面板。

SVN 源码/例子:http://naturaljs.googlecode.com/svn/trunk/demo/widgets/hoverTab.htm

这是一个非常简单的例子,主要利用了元素 hover 高亮效果的特性创建收缩面板。“hover”的意思就是用户鼠标移上某个元素时,该元素会产生高亮的效果。所谓“高亮”,仅仅是我们想定义的这样子。具体是什么效果随便我们而定。CSS 选择符的写法为“ 元素: hover { ……(欲变化的样式)……}。常常使用 hover 的一个地方就是 a 元素,也就是定义鼠标移至 a 元素的样式。把 hover 推广到其他非 a 元素当然也可以。我们这个收缩面板,主要就是使用到了这个 hover 会动态变化的特性。

单纯 hover 不足以显示其强大,而且 hover 可在任意层次中指定,例如“父元素 : hover   子元素”,即仅对子元素响应这个事件。注意我们这这里提到了事件的概念,但实际编码中无须写半句 JavaScript,完全纯 CSS 搞定。

讲那么多,还是看看实际的例子,假设,客户提出像 163 这样的需求,在顶部导航添加 登录 按钮,无须点击,鼠标移到按钮上即刻在下方出现登录的面板。


我不清楚 163 通过什么途径去实现。而我的原理很简单,一句话可以讲清楚。我们把“父元素”当作按钮,当鼠标移至那按钮上面,即出现本来隐藏着的面板,那么,那个面板就是子元素了。至于所谓“收缩”效果,对应的便是 CSS 的 display 属性,block/none。(下面的是 LESS 样式)

// 登录面板 和忘记密码
#loginBtn, .forgetPasswordBtn{
	position: relative;
	&:hover #loginPanel, #loginPanel:hover, &:hover .forgetPasswordPanel, .forgetPasswordPanel:hover{ // 因为有“登录”和“找回密码”,所以写 2x2个,其中有一组 for 面板 hover 的。
		display: block;
	}
	#loginPanel, .forgetPasswordPanel{
		display: none;  // 开始是隐藏的
		position: absolute;
		top:24px;
		top:24px;
		left: 0;
		background-color: #f5f5f5;
		border: 1px solid lightgray;
		border-top:0;
		padding: 5px;
		width:230px;
	}
	.forgetPasswordPanel{
		left: inherit;
		right: 0;

	}
}

现在可以显示出面板了。但光有按钮的 hover 的话还不能满足需求之设计,还要让面板本身不能消失,那么,如此类推,让面板加入 hover:#loginPanel:hover。

总之,关键的点如下:

  • 利用 hover 产生类似“鼠标事件”的作用
  • 要显示的内容在按钮元素包裹下
  • 显示内容本身也要 hover

另外注意按钮与面板之间的衔接,一定要密。不然鼠标从按钮移下到面板的时候,如果出现空隙,将被视为不连续的 mouseout 事件,不属 hover 定义范围内,那么面板将会隐藏。

SVN 源码/例子:http://naturaljs.googlecode.com/svn/trunk/demo/widgets/hoverTab.htm

我们完成的效果如下。IE7/IE7+浏览器通过。IE6不支持的原因怀疑是 hover 支持不良的缘故。

如果要制作如上图无缝 border 的效果,就需要指定 top 属性覆盖 1px~2px,IE 浏览器有偏差,解决方法尚未有。

目录
相关文章
|
5月前
|
前端开发 JavaScript 开发者
这个被忽略的CSS:hover隐藏用法,让交互设计师都跪了
本文详细介绍了CSS中的伪类选择器`:hover`及其应用。`:hover`用于定义鼠标悬停在元素上时的样式,常见于超链接、按钮等交互场景。文章通过多个实例演示了`:hover`不仅可控制当前元素,还能影响其子元素或后代元素,但通常不适用于兄弟元素。此外,还分享了如何避免`:hover`导致的布局抖动问题,如提前设置透明边框。最后,结合实际案例展示了如何利用`:hover`实现复杂的交互效果,例如三级菜单,帮助开发者更好地掌握这一实用技巧。
213 1
这个被忽略的CSS:hover隐藏用法,让交互设计师都跪了
|
10月前
|
前端开发 JavaScript UED
深入理解与应用 CSS 伪类选择器
【10月更文挑战第23天】通过以上对 CSS 伪类选择器的深入探讨,我们可以更好地理解和应用它们,为网页设计和开发带来更丰富、更灵活的样式效果。同时,要注意在实际应用中根据具体情况合理选择和使用伪类选择器,以达到最佳的设计效果和用户体验。
251 2
|
11月前
CSS3 新增伪类有那些
CSS3 引入了多种新伪类,增强了样式控制的灵活性。新增的结构伪类如 `:nth-child(n)` 和 `:first-of-type` 可以根据元素的位置和类型进行选择;状态伪类如 `:enabled` 和 `:checked` 则根据元素的状态进行选择;动态伪类如 `:hover` 和 `:active` 则基于用户的交互行为。这些伪类让样式定制更加多样和强大。
|
11月前
|
前端开发
CSS3:hover&demo
本文介绍了CSS中`hover`伪类的基本用法,包括改变元素自身样式、影响子元素及相邻或后续兄弟元素样式的技巧。同时,还探讨了`:before`和`:after`伪元素的使用方法,以及如何通过CSS实现边框流动效果、创建登录页面、设计轮盘游戏界面和平滑处理文本溢出等实用案例。每个示例都配有代码块,便于理解和实践。
225 4
|
11月前
|
前端开发 UED
如何使用css给一个盒子加上好看的hover阴影效果
如何使用css给一个盒子加上好看的hover阴影效果
276 1
|
11月前
|
前端开发
运用CSS伪类与属性,巧妙实现背景图片旋转效果
运用CSS伪类与属性,巧妙实现背景图片旋转效果
209 0
|
前端开发
CSS中的层级选择器&伪类选择器和伪元素选择器
CSS中的层级选择器&伪类选择器和伪元素选择器
|
前端开发
CSS——通过伪类来自定义四个角边框
CSS——通过伪类来自定义四个角边框
212 3
|
前端开发 JavaScript
CSS进阶-CSS选择器高级:伪类与伪元素
【6月更文挑战第13天】本文探讨了CSS伪类与伪元素的核心概念,包括伪类表示元素状态,伪元素创造抽象内容。常见问题涉及二者区别、冒号使用、顺序优先级及`content`属性。实践技巧涵盖`:not()`选择器、`:hover`与子元素伪类结合及自定义形状。通过代码示例展示了高亮悬停行、添加图标、首行样式和链接颜色的应用。理解并熟练运用伪类和伪元素可提升CSS设计效率和灵活性。
390 2
CSS进阶-CSS选择器高级:伪类与伪元素
|
前端开发 开发者
CSS伪类选择器:增强内容表现力的利器
CSS伪类选择器:增强内容表现力的利器
125 4