当前位置: 首页 > news >正文

CSS3无图片实现华丽折页菜单效果(多浏览器兼容)

昨天在做一个网站的左栏菜单的时候,突然想到,看了那么多创意的CSS3导航、菜单,何不自己动手做一个纯CSS3菜单呢?于是捣鼓了一下把想法给实现了,虽然说是比较老掉牙的一个创意,不过顺便也算是锻炼了一下CSS水平。

先看看网页里的最终效果:

CSS3折页菜单

那么,教程开始了!

Step1

首先,一个菜单的结构如下:

<div class="wrapper"> <ul id="menu"> <li><a href="javascript:void(0);">菜单1</a></li> <li><a href="javascript:void(0);">菜单2</a></li> <li><a href="javascript:void(0);">菜单3</a></li> <li><a href="javascript:void(0);">菜单4</a></li> <li><a href="javascript:void(0);">菜单5</a></li> </ul> </div>

菜单

当然,未经过CSS美化的效果相当之差,我们来开始加工——

Step2

加上该加上的,去掉该去掉的。该上色的上色,该加宽度的加宽度,该重置的重置(css reset)。

  • body颜色:#ddd
  • wrapper颜色:#eee
  • menu颜色:#0764a1
  • 链接颜色:#cde0ec

CSS菜单

虽然颜色也有了形状也有了但仍很是单调,因此——

Step3

加上光影圆角细节:

  • 菜单左上圆角:10px
  • 菜单右下圆角:10px
  • 菜单左边框颜色:#0982bd
  • 菜单上边框颜色:#0982bd
  • 菜单下边框颜色:#054685
  • 菜单阴影:3px 5px 5px rgba(0,0,0,0.5)
  • wrapper阴影:0 0 10px #222222

CSS3菜单

虽然菜单已经成型了,但怎么说都谈不上“创意”二字,作为一个追求完美的前端发烧友,自然不能止步于此——

Step4

通过margin负值来实现菜单与wrapper错开:

  • menu左端外边距:-20px

CSS3菜单

但似乎还是少了点什么?没错,就是小小的三角形折页——

Step5

如何用DIV+CSS实现三角形呢?可以利用border来实现,具体原理可参见张鑫旭的《CSS border三角、圆角图形生成技术简介》一文。

  • 翻折三角形颜色:#054685
  • 边框大小:12px 20px
  • 左端外边距:-40px(利用右边框实现多浏览器兼容三角形,因此整个DIV都应该在wrapper外,即为上面20px的两倍)
  • 顶端外边距:-12px(与上面边框大小中12px对应)

CSS3创意折页边框

整个折页菜单的效果就出来了,但为了用户体验,还应该给菜单加上交互效果——

Step6

为菜单的鼠标经过及按下加上交互效果:

  • 鼠标经过菜单颜色:#05528f
  • 鼠标经过菜单上边框颜色:#066fae
  • 鼠标经过菜单下边框颜色:#033772
  • 鼠标按下菜单颜色:#033f7e
  • 鼠标按下菜单上边框颜色:#045ca0
  • 鼠标按下菜单下边框颜色:#02275f

CSS3创意折页菜单

这里还为菜单加大了左端内边距,当然你也可以加上其它CSS3效果:

CSS3创意折页菜单

如图是加上左端外边距和放大1.05倍的效果。

Finally

最后当然是给出代码和Demo了:

CSS部分:

body{ margin:0; background:#ddd; } .wrapper{ width:960px; height:800px; margin:0 auto; position:relative; background:#eee; -moz-box-shadow:0 0 10px #222222; -khtml-box-shadow:0 0 10px #222222; -webkit-box-shadow:0 0 10px #222222; box-shadow:0 0 10px #222222; } #menu{ margin: 0; padding:0; list-style:none; margin-top:150px; margin-left:-20px; display:inline-block; position:relative; z-index:100; } #menu a{ *zoom:1; width:120px; display:block; font-size:14px; color: #cde0ec; line-height:45px; padding-left:40px; background:#0764a1; text-decoration:none; border-left:1px solid #0982bd; border-top:1px solid #0982bd; border-bottom:1px solid #054685; -webkit-transition: all .3s; -moz-transition: all .3s; -o-transition: all .3s; transition: all .3s; -moz-box-shadow:3px 5px 5px rgba(0,0,0,0.5); -khtml-box-shadow:3px 5px 5px rgba(0,0,0,0.5); -webkit-box-shadow:3px 5px 5px rgba(0,0,0,0.5); box-shadow:3px 5px 5px rgba(0,0,0,0.5); } #menu li:first-child a{ border-top-right-radius:10px; } #menu li:last-child a{ border-bottom-right-radius:10px; } #menu a:hover{ padding-left:55px; padding-left:40px\0; *padding-left:40px; background:#05528f; border-top:1px solid #066fae; border-bottom:1px solid #033772; -webkit-transform-origin:0; -moz-transform-origin:0; -o-transform-origin:0; -moz-box-shadow:0 5px 5px rgba(0,0,0,0.5); -khtml-box-shadow:0 5px 5px rgba(0,0,0,0.5); -webkit-box-shadow:5px 5px 5px rgba(0,0,0,0.5); box-shadow:5px 5px 5px rgba(0,0,0,0.5); } #menu a:active{ background:#033f7e; border-top:1px solid #045ca0; border-bottom:1px solid #02275f; } .triangle{ width:0; height:0; position:relative; margin-top:-12px; _margin-top:-30px; margin-left:-40px; border-color:transparent #054685 transparent transparent; border-style:dashed solid dashed dashed; border-width:12px 20px; }

HTML部分:

<div class="wrapper"> <ul id="menu"> <li><a href="javascript:void(0);">菜单1</a></li> <li><a href="javascript:void(0);">菜单2</a></li> <li><a href="javascript:void(0);">菜单3</a></li> <li><a href="javascript:void(0);">菜单4</a></li> <li><a href="javascript:void(0);">菜单5</a></li> </ul> <div class="triangle"></div> </div>

大家最喜爱的Demo



=======================签 名 档=======================

原文地址(我的博客):http://lanfei.sinaapp.com/2012/05/1255.html
欢迎访问交流,至于我为什么要多弄一个博客,因为我热爱前端,热爱网页,我更希望有一个更加自由、真正属于我自己的小站,或许并不是那么有名气,但至少能够让我为了它而加倍努力。。
=======================签 名 档=======================




转载于:https://www.cnblogs.com/springside6/archive/2012/05/29/2525050.html

相关文章:

  • Intellij IDEA 2017.3 基于编辑器的REST客户端介绍
  • 让集成的Intel82845g支持1440x900
  • ubuntu 下面手动创建引用程序启动项(转)
  • [LeetCode] Copy List with Random Pointer 拷贝带有随机指针的链表
  • UIM卡 PIN 码特点
  • 详解在visual studio中使用git版本系统(图文)
  • 我来做百科(第五天)
  • POJ-1502 MPI Maelstrom
  • Oracle -- 字符集编码'GBK'库数据导入到'UFT-8'库中 大量报错 ORA-12899 解决方案
  • IOS-创建带Navigation的根控制器
  • .Net IOC框架入门之一 Unity
  • 过 DNF TP 驱动保护(一)
  • 数组倒序输出
  • EF架构~XMLRepository仓储的实现
  • 上海南站(2007-04-07)
  • @angular/forms 源码解析之双向绑定
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • iOS编译提示和导航提示
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java小白进阶笔记(3)-初级面向对象
  • js对象的深浅拷贝
  • Linux各目录及每个目录的详细介绍
  • Mocha测试初探
  • ReactNativeweexDeviceOne对比
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 工作手记之html2canvas使用概述
  • 聊聊flink的BlobWriter
  • 聊聊hikari连接池的leakDetectionThreshold
  • 每天10道Java面试题,跟我走,offer有!
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 那些被忽略的 JavaScript 数组方法细节
  • 算法之不定期更新(一)(2018-04-12)
  • 微信小程序开发问题汇总
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • !$boo在php中什么意思,php前戏
  • # Panda3d 碰撞检测系统介绍
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $.proxy和$.extend
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (TOJ2804)Even? Odd?
  • (八十八)VFL语言初步 - 实现布局
  • (六)Hibernate的二级缓存
  • (三)elasticsearch 源码之启动流程分析
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (四)图像的%2线性拉伸
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .Mobi域名介绍
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Core 版本不支持的问题
  • .NET 反射 Reflect