展现个性的漂亮CSS水平下拉菜单实例
34 浏览量
更新于2024-09-05
收藏 29KB PDF 举报
在本节中,我们将深入探讨一款设计精美、富有个性的CSS水平下拉菜单的实现方法。这款菜单不仅外观独特,而且功能实用,适用于提升网站用户体验。通过学习本文档提供的CSS样式代码,你可以轻松地为你的网站添加一个响应式的水平导航菜单。
首先,我们了解HTML结构的基本框架。代码开始于一个标准的HTML文档声明,使用UTF-8字符集,并设置了页面标题为"CSSMenu-Horizontal"。页面的主体结构包括body元素,其中设置了背景颜色为白色、文本颜色为深灰色,以及适当的边距和填充以保证布局清晰。
接下来,我们关注到CSS样式部分。`@import`语句引入了外部样式表文件`dhtml-horiz.css`,这可能是用来存放具体菜单样式定义的。对于浏览器兼容性,定义了不同浏览器前缀(如`float:left` for Gecko)来确保样式在各种浏览器中的表现一致。
核心的菜单结构定义在`ul#navmenu`类中,它具有固定的宽度(500px),边框、内边距和列表样式均被清除,以创建简洁的视觉效果。子级菜单`ul#navmenuli`通过`float:left`或`display:inline`保持水平排列,同时设置相对定位以便于下拉效果的实现。
下一级菜单`ul#navmenuul`的样式定义,包括了内边距、宽度等属性,这些都是为了确保下拉菜单在水平方向上的展示。这里的宽度通常会根据实际需求调整,以便适应不同的屏幕尺寸。
为了让菜单项在鼠标悬停时切换样式,使用了`:hover`伪类选择器。当用户将鼠标指针放在菜单项上时,背景颜色变为黑色,文字颜色变为白色,实现了交互式的效果。
通过这个CSS水平下拉菜单示例,开发者可以学习如何运用CSS3的选择器、布局和过渡效果来创建动态且美观的导航栏。记住,测试是关键,确保在各种设备和浏览器上都能正常工作。通过实践这段代码并根据实际需求进行调整,你将能够为你的网站增添一份独特的视觉体验。
2012-10-24 上传
[removed]
// ViaSelect Environment Constants
var SS_ENV = new Object();
SS_ENV.IE_Version = new Number(((window.navigator.appVersion.split('; '))[1].split(' '))[1]);
SS_ENV.CR = new Object();
SS_ENV.CR.ReverseBackground = '#E2519C';
SS_ENV.CR.ReverseText = 'white';
SS_ENV.CR.Border = '#D55C9A';
SS_ENV.CR.BorderActive = '#FF6CB7';
SS_ENV.DefaultHeight = 20;
SS_ENV.ButtonWidth = 13;
SS_ENV.OptionsDivStyle = ''
+ ' display:none;'
+ ' z-index:10;'
+ ' position:absolute;'
+ ' border:1 solid '+ SS_ENV.CR.Border+';'
+ ' background-color:white;'
+ ' scrollbar-face-color:#D4D0C8;'
+ ' scrollbar-shadow-color:white;'
+ ' scrollbar-highlight-color:#F6F5F4;'
+ ' scrollbar-3dlight-color:white'
+ ' scrollbar-darkshadow-color:#86837E;'
+ ' scrollbar-track-color:#F6F5F4;'
+ ' scrollbar-arrow-color:#86837E;';
SS_ENV.OptionNobrStyle = ''
+ ' font-size:12px;'
+ ' font-family:奔覆;';
// SaySelect Variables
var SS_VAR = new Object();
SS_VAR.DivDummy = document.createElement("DIV");
SS_VAR.SelectList = new Array();
SS_VAR.bEventAttached = false;
var SS_CreatedElements = new Object();
function unloadObjects()
{
try {
if (SS_VAR && SS_VAR.SelectList)
{
for (key in SS_VAR.SelectList)
{
if (SS_VAR.SelectList[key])
{
try {
SS_VAR.SelectList[key].select.setAttribute('SS', 0);
} catch (e) {};
delete SS_VAR.SelectList[key];
}
}
}
} catch (e) {};
}
attachEvent("onunload", unloadObjects);
function SS_create (srcHTML, ListMax, bAutoDetect)
{
// property
this.ssID = SS_VAR.SelectList.length;
this.bOriginalSelect = (bAutoDetect && SS_ENV.IE_Version < 5.5);
this.select = SS_createElement(srcHTML);
this.selectedIndex = this.select.selectedIndex;
this.options = this.select.options;
this.width = parseInt(this.select.style.width);
this.height = (this.select.style.height) ? parseInt(this.select.style.height) : SS_ENV.DefaultHeight;
this.OptionHeight = this.height - 4;
this.bListDown = (ListMax && '-'==ListMax.toString().substr(0, 1)) ? false : true;
this.ListMax = (!isNaN(parseInt(ListMax))) ? Math.abs(ListMax) : 100;
this.Table;
this.TitleDiv;
this.TitleTable;
this.TitleWrapper;
this.OptionsDiv;
this.OptionsWrapper;
this.OptionsTable;
this.bFocused = false;
this.bExpanded = false;
this.bReverse = false;
// private method
this.isThisEventToBeCanceled = SS_isThisEventToBeCanceled;
this.toggleTitle = SS_toggleTitle;
this.syncSelectedIndex = SS_syncSelectedIndex;
this.toggleOptions = SS_toggleOptions;
this.turnOnOption = SS_turnOnOption;
this.turnOffOption = SS_turnOffOption;
this.handleMousewheel = SS_handleMousewheel;
this.handleOverTitle = SS_handleOverTitle;
this.handleOutTitle = SS_handleOutTitle;
this.handleOverOption = SS_handleOverOption;
this.createTable = SS_createTable;
this.createTitleDiv = SS_createTitleDiv;
this.createOptionsDiv = SS_createOptionsDiv;
this.createOptionTr = SS_createOptionTr;
this.adjustOptionsDiv = SS_adjustOptionsDiv;
this.syncOptions = SS_syncOptions;
this.pressOption = SS_pressOption;
this.moveOption = SS_moveOption;
this.releaseOption = SS_releaseOption;
this.pressTitle = SS_pressTitle;
this.releaseTitle = SS_releaseTitle;
// public method
this.display = SS_display;
this.insertOption = SS_insertOption;
this.deleteOption = SS_deleteOption;
this.changeOption = SS_changeOption;
// initiate
this.createTable();
this.select.setAttribute('SS', this);
if (!this.bOriginalSelect)
this.select.
SS_VAR.SelectList[this.ssID] = this;
}
function SS_display ()
{
[removed]("\n");
document.all.SS_TempDiv.appendChild(this.Table);
document.all.SS_TempDiv.removeNode();
}
function SS_write (srcHTML, ListMax, bAutoDetect)
{
var oSS = new SS_create(srcHTML, ListMax, bAutoDetect);
oSS.display();
return oSS;
}
function SS_insertOption (value, innerText, idx)
{
var NewOption = document.createElement("OPTION");
SS_CreatedElements[SS_CreatedElements.length] = NewOption;
this.options.add(NewOption, idx);
NewOption.innerText = innerText;
NewOption.value = value;
if (!this.bOriginalSelect)
this.createOptionTr(idx);
this.syncOptions();
this.adjustOptionsDiv();
this.syncSelectedIndex();
}
function SS_deleteOption (idx)
{
this.options.remove(idx);
if (!this.bOriginalSelect)
this.OptionsTable.deleteRow(idx);
this.syncOptions();
this.adjustOptionsDiv();
this.syncSelectedIndex();
}
function SS_changeOption (idx, value, innerText)
{
this.options[idx].value = value;
this.options[idx].innerText = innerText;
this.syncOptions();
this.syncSelectedIndex();
}
function SS_cancelEvent (event)
{
event.cancelBubble = true;
event.returnValue = false;
}
function SS_isThisEventToBeCanceled (event)
{
if ('object' == typeof(event)) {
switch (event.type) {
case 'mousedown':
if (!(event.button & 1)) return true;
break;
case 'mouseup':
if (!(event.button & 1)) return true;
if (SS_ENV.IE_Version >= 5.5 && event.srcElement != this.srcElementOfLastMousedown && this.srcElementOfLastMousedown != null) {
this.srcElementOfLastMousedown = null;
return true;
}
break;
case 'mouseout':
if (!(SS_ENV.IE_Version < 5.5 && event.srcElement == this.srcElementOfLastMousedown))
return true;
break;
case 'mousemove':
if (SS_ENV.IE_Version >= 5.5 && event.srcElement != this.srcElementOfLastMousedown && this.srcElementOfLastMousedown != null)
return true;
break;
}
}
return false;
}
function SS_createElement (html)
{
SS_VAR.DivDummy.insertAdjacentHTML('afterBegin', html);
var oEl = SS_VAR.DivDummy.children(0);
while (SS_VAR.DivDummy.children.length > 0) {
SS_VAR.DivDummy.removeChild(SS_VAR.DivDummy.children(0));
}
return oEl;
}
function SS_blurExcept (except)
{
SS_cancelEvent(window.event);
except = ('number'==typeof(except)) ? except : -1;
var bHasToDetachEvent = true;
for (var i=0; i < SS_VAR.SelectList.length; i++) {
if (-1==except && SS_VAR.SelectList[i].bFocused && SS_VAR.SelectList[i].bExpanded) {
SS_VAR.SelectList[i].toggleOptions(false, true);
SS_VAR.SelectList[i].toggleTitle(true);
bHasToDetachEvent = false;
}
else if (i!=except) {
if (SS_VAR.SelectList[i].bExpanded)
SS_VAR.SelectList[i].toggleOptions(false, true);
if (SS_VAR.SelectList[i].bReverse)
SS_VAR.SelectList[i].toggleTitle(false);
SS_VAR.SelectList[i].bFocused = false;
}
}
if (SS_VAR.bEventAttached && bHasToDetachEvent) {
document.detachEvent('onmousedown', SS_blurExcept);
document.detachEvent('ondblclick', SS_blurExcept);
SS_VAR.bEventAttached = false;
}
}
function SS_syncSelectedIndex ()
{
this.selectedIndex = this.select.selectedIndex;
if (this.bOriginalSelect) return;
if (this.TitleTable.cells(0).childNodes(0).innerText != this.options[this.selectedIndex].innerText)
this.TitleTable.cells(0).childNodes(0).innerText = this.options[this.selectedIndex].innerText;
if (this.bExpanded)
this.toggleOptions(false);
}
function SS_toggleTitle (bReverse)
{
this.bReverse = ('undefined'!=typeof(bReverse)) ? bReverse: (!this.bReverse);
this.TitleTable.cells(0).style.backgroundColor = this.bReverse ? SS_ENV.CR.ReverseBackground : '';
this.TitleTable.cells(0).style.color = this.bReverse ? SS_ENV.CR.ReverseText : '';
}
function SS_toggleOptions (bExpanded, bStrict)
{
if (!bStrict && !this.bFocused) {
SS_blurExcept(this.ssID);
}
this.bExpanded = ('undefined'!=typeof(bExpanded)) ? bExpanded: (!this.bExpanded);
if (this.bExpanded) {
this.adjustOptionsDiv();
this.OptionsDiv.style.display = 'block';
if (!bStrict) {
this.toggleTitle(false);
this.handleOverOption(this.selectedIndex);
}
this.handleOutTitle();
}
else {
this.OptionsDiv.style.display = 'none';
if (!bStrict) {
this.toggleTitle(true);
}
}
if (!bStrict) {
this.bFocused = true;
if (!SS_VAR.bEventAttached) {
document.attachEvent('onmousedown', SS_blurExcept);
document.attachEvent('ondblclick', SS_blurExcept);
SS_VAR.bEventAttached = true;
}
}
}
function SS_handlePropertychange ()
{
if ('propertychange'==window.event.type && 'selectedIndex'==window.event.propertyName) {
var oSS = window.event.srcElement.SS;
oSS.syncSelectedIndex();
if (null != oSS.select.onchange)
oSS.select.onchange();
}
}
function SS_handleMousewheel (event)
{
var idx = this.selectedIndex;
if ('mousewheel'==event.type && this.bFocused && this.bReverse) {
for (var i=0; i < event.wheelDelta; i += 120)
idx--;
for (var i=0; i > event.wheelDelta; i -= 120)
idx++;
}
idx = Math.max(idx, 0);
idx = Math.min(idx, this.options.length - 1);
this.select.selectedIndex = idx;
}
function SS_handleOverTitle ()
{
if (this.bExpanded)
return;
this.TitleTable.style.borderColor = SS_ENV.CR.BorderActive;
this.TitleTable.cells(1).style.display = 'none';
this.TitleTable.cells(2).style.display = 'block';
}
function SS_handleOutTitle ()
{
this.TitleTable.style.borderColor = SS_ENV.CR.Border;
this.TitleTable.cells(2).style.display = 'none';
this.TitleTable.cells(1).style.display = 'block';
}
function SS_handleOverOption (idx)
{
for (var i=0; i < this.options.length; i++) {
if (i==idx)
this.turnOnOption(i);
else
this.turnOffOption(i);
}
}
function SS_turnOnOption (idx)
{
this.OptionsTable.cells(idx).style.color = SS_ENV.CR.ReverseText;
this.OptionsTable.cells(idx).style.backgroundColor = SS_ENV.CR.ReverseBackground;
}
function SS_turnOffOption (idx)
{
this.OptionsTable.cells(idx).style.color = '';
this.OptionsTable.cells(idx).style.backgroundColor = '';
}
function SS_adjustOptionsDiv ()
{
if (this.bOriginalSelect) return;
this.OptionsDiv.style.width = this.width;
this.OptionsDiv.style.height = Math.min(this.options.length, this.ListMax) * this.OptionHeight + 2;
this.OptionsWrapper.style.height = this.options.length * this.OptionHeight;
this.OptionsDiv.style.overflowY = (this.options.length > this.ListMax) ? 'scroll' : '';
var top = this.Table.offsetTop;
var left = this.Table.offsetLeft;
for (var El = this.Table.offsetParent; 'BODY'!=El.tagName && 'absolute'!=El.style.position && 'relative'!=El.style.position; El = El.offsetParent) {
if ('TABLE' != El.tagName) {
top += El.clientTop;
left += El.clientLeft;
}
top += El.offsetTop;
left += El.offsetLeft;
}
this.OptionsDiv.style.top = (this.bListDown) ? (top + this.height) : (top - parseInt(this.OptionsDiv.style.height));
this.OptionsDiv.style.left = left;
this.TitleWrapper.style.top = 0;
this.TitleWrapper.style.left = 0;
}
function SS_syncOptions ()
{
if (this.bOriginalSelect) return;
for (var i=0; i < this.options.length; i++) {
this.OptionsTable.cells(i).setAttribute('index', i);
if (this.OptionsTable.cells(i).childNodes(0).innerText != this.options[i].innerText)
this.OptionsTable.cells(i).childNodes(0).innerText = this.options[i].innerText;
}
}
function SS_pressTitle (event)
{
SS_cancelEvent(event);
this.srcElementOfLastMousedown = event.srcElement;
this.toggleOptions();
}
function SS_releaseTitle (event)
{
SS_cancelEvent(event);
if (this.isThisEventToBeCanceled(event)) return;
this.srcElementOfLastMousedown = null;
}
function SS_pressOption (event)
{
SS_cancelEvent(event);
this.srcElementOfLastMousedown = event.srcElement;
}
function SS_moveOption (event)
{
SS_cancelEvent(event);
if (this.isThisEventToBeCanceled(event)) return;
if (!(event.offsetX >= 0 && event.offsetX <= this.OptionsTable.offsetWidth)) return;
this.handleOverOption(Math.floor(event.offsetY / this.OptionHeight));
}
function SS_releaseOption (event)
{
SS_cancelEvent(event);
if (this.isThisEventToBeCanceled(event)) return;
this.srcElementOfLastMousedown = null;
if (event.offsetX >= 0 && event.offsetX <= this.OptionsTable.offsetWidth) {
this.toggleOptions(false);
this.select.selectedIndex = Math.floor(event.offsetY / this.OptionHeight);
}
}
function SS_createTable ()
{
this.Table = SS_createElement(""
+ ""
+ "
"
);
if (!isNaN(this.width))
this.Table.style.width = this.width;
this.Table.style.height = this.height;
if (!this.bOriginalSelect) {
this.createTitleDiv();
this.createOptionsDiv();
this.Table.cells(0).appendChild(this.TitleDiv);
this.Table.cells(0).appendChild(this.OptionsDiv);
}
else {
this.Table.cells(0).appendChild(this.select);
}
}
function SS_createTitleDiv ()
{
this.TitleDiv = SS_createElement(""
+ " ");
SS_CreatedElements[SS_CreatedElements.length] = this.OptionsTd;
OptionTd.appendChild(document.createElement("<nobr
OptionTr.appendChild(OptionTd);
}
[removed]
</head>
<body>[removed]SS_write("<select name=star>\n"
+" <option value=\"\" selected>不限</option>\n"
+"<option value=\"水瓶座\">水瓶座</option>"
+"<option value=\"双鱼座\">双鱼座</option>"
+"<option value=\"白羊座\">白羊座</option>"
+"<option value=\"金牛座\">金牛座</option>"
+"<option value=\"双子座\">双子座</option>"
+"<option value=\"巨蟹座\">巨蟹座</option>"
+"<option value=\"狮子座\">狮子座</option>"
+"<option value=\"处女座\">处女座</option>"
+"<option value=\"天秤座\">天秤座</option>"
+"<option value=\"天蝎座\">天蝎座</option>"
+"<option value=\"射手座\">射手座</option>"
+"<option value=\"摩羯座\">摩羯座</option>"
+"</select>\n");
[removed]
"
+ " "
+ "
"
+ "
"
);
this.TitleTable = this.TitleDiv.childNodes(0);
this.TitleTable.cells(0).childNodes(0).innerText = this.options[this.selectedIndex].innerText;
this.TitleTable.cells(1)[removed] = "";
this.TitleTable.cells(2)[removed] = "";
this.TitleTable.cells(3).appendChild(this.select);
this.TitleWrapper = document.createElement(""
+ "<img SS_VAR.SelectList["+this.ssID+"].releaseTitle(window.event);'
);
SS_CreatedElements[SS_CreatedElements.length] = this.TitleWrapper;
this.TitleDiv.appendChild(this.TitleWrapper);
}
function SS_createOptionsDiv ()
{
this.OptionsDiv = SS_createElement(""
+ "<nobr + " <td width="+SS_ENV.ButtonWidth+" align=center + " <td width="+SS_ENV.ButtonWidth+" align=center + " | " + " |
"
+ " <table border=0 cellpadding=0 cellspacing=0 width=100%
+ " "
+ "
"
);
this.OptionsTable = this.OptionsDiv.childNodes(0);
for (var i=0; i < this.options.length; i++) {
this.createOptionTr(i);
}
this.syncOptions();
this.OptionsWrapper = document.createElement(""
+ "<img
);
SS_CreatedElements[SS_CreatedElements.length] = this.OptionsWrapper;
this.OptionsDiv.appendChild(this.OptionsWrapper);
}
function SS_createOptionTr (idx)
{
idx = ('undefined'!=typeof(idx)) ? idx : this.options.length - 1;
var OptionTr = this.OptionsTable.insertRow(-1);
var OptionTd = document.createElement("[removed]SS_write("<select name='province' >\n" +"<option value=\"\" selected>都行</option>\n" +"<option value=\"北京\">北京</option>" +"<option value=\"上海\">上海</option>" +"<option value=\"天津\">天津</option>" +"<option value=\"重庆\">重庆</option>" +"<option value=\"安徽\">安徽</option>" +"<option value=\"福建\">福建</option>" +"<option value=\"甘肃\">甘肃</option>" +"<option value=\"广东\">广东</option>" +"<option value=\"广西\">广西</option>" +"<option value=\"贵州\">贵州</option>" +"<option value=\"海南\">海南</option>" +"<option value=\"河北\">河北</option>" +"<option value=\"黑龙江\">黑龙江</option>" +"<option value=\"河南\">河南</option>" +"<option value=\"湖北\">湖北</option>" +"<option value=\"湖南\">湖南</option>" +"<option value=\"内蒙古\">内蒙古</option>" +"<option value=\"江苏\">江苏</option>" +"<option value=\"江西\">江西</option>" +"<option value=\"吉林\">吉林</option>" +"<option value=\"辽宁\">辽宁</option>" +"<option value=\"宁夏\">宁夏</option>" +"<option value=\"青海\">青海</option>" +"<option value=\"山西\">山西</option>" +"<option value=\"陕西\">陕西</option>" +"<option value=\"山东\">山东</option>" +"<option value=\"四川\">四川</option>" +"<option value=\"江西\">江西</option>" +"<option value=\"西藏\">西藏</option>" +"<option value=\"新疆\">新疆</option>" +"<option value=\"云南\">云南</option>" +"<option value=\"浙江\">浙江</option>" +"<option value=\"其它\">其它</option>" +"</select>\n",8); [removed] |
点击了解资源详情
2010-06-30 上传
121 浏览量
2022-12-11 上传
2011-05-10 上传
189 浏览量
weixin_38723461
- 粉丝: 3
- 资源: 964
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析