今天偶然在网上看到一个用CSS控制Select风格的例子,感觉比较好,用到的有些技术细节也是我之前不知道的,特摘录如下:

SelectDemo.htm:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    
<title>Select Demo</title>
    
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    
<link href="selectDemo.css" rel="stylesheet" type="text/css" />

    
<script src="selectDemo.js" type="text/javascript"></script>

    
<meta content="MSHTML 6.00.2900.3243" name="GENERATOR"/>
</head>
<body>
    
<form id="form" action="" method="post">
        
<br />
        
<br />
        
<div id="uboxstyle">
            
<h3 style="font-size: 14px; color: #6d93ab">
                U-Box Style
</h3>
            
<select id="language" name="language">
                
<option value="English" selected>English</option>
                
<option value="简体中文">简体中文</option>
                
<option value="日本語">日本語</option>
                
<option value="Deutsch">Deutsch</option>
                
<option value="Español">Español</option>
                
<option value="Français">Français</option>
                
<option value="Italiano">Italiano</option>
                
<option value="Polski">Polski</option>
                
<option value="Português">Português</option>
                
<option value="Svenska">Svenska</option>
                
<option value="Türkçe">Türkçe</option>
                
<option value="Руccкий">Руccкий</option>
            
</select>
        
</div>
        
<br />
        
<br />
        
<h3 style="font-size: 14px; color: #6d93ab">
            Mac Style
</h3>
        
<div id="macstyle">
            
<select id="language_mac" name="language_mac">
                
<option value="English" selected>English</option>
                
<option value="简体中文">简体中文</option>
                
<option value="日本語">日本語</option>
                
<option value="Deutsch">Deutsch</option>
                
<option value="Español">Español</option>
                
<option value="Français">Français</option>
                
<option value="Italiano">Italiano</option>
                
<option value="Polski">Polski</option>
                
<option value="Português">Português</option>
                
<option value="Svenska">Svenska</option>
                
<option value="Türkçe">Türkçe</option>
                
<option value="Руccкий">Руccкий</option>
            
</select>
        
</div>
        
<br />
        
<br />
        
<h3 style="font-size: 14px; color: #6d93ab">
            TM2008 Style
</h3>
        
<div id="tm2008style">
            
<select id="language_tm2008" name="language_tm2008">
                
<option value="English" selected>English</option>
                
<option value="简体中文">简体中文</option>
                
<option value="日本語">日本語</option>
                
<option value="Deutsch">Deutsch</option>
                
<option value="Español">Español</option>
                
<option value="Français">Français</option>
                
<option value="Italiano">Italiano</option>
                
<option value="Polski">Polski</option>
                
<option value="Português">Português</option>
                
<option value="Svenska">Svenska</option>
                
<option value="Türkçe">Türkçe</option>
                
<option value="Руccкий">Руccкий</option>
            
</select>
        
</div>
    
</form>
</body>
</html>

SelectDemo.css:
BODY {
    BACKGROUND
: #cfdfef; FONT: 12px/150% "Lucida Grande", Arial, Verdana, Helvetica, sans-serif
}

#uboxstyle .select_box 
{
    WIDTH
: 100px; HEIGHT: 24px
}

#macstyle .select_box 
{
    WIDTH
: 91px; HEIGHT: 24px
}

#tm2008style .select_box 
{
    WIDTH
: 102px; HEIGHT: 24px
}

#uboxstyle DIV.tag_select 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(ubox-select.gif) no-repeat 0px 0px; PADDING-BOTTOM: 0px; WIDTH: 80px; COLOR: #79a2bd; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 24px
}

#uboxstyle DIV.tag_select_hover 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(ubox-select.gif) no-repeat 0px -24px; PADDING-BOTTOM: 0px; WIDTH: 80px; COLOR: #79a2bd; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 24px
}

#uboxstyle DIV.tag_select_open 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(ubox-select.gif) no-repeat 0px -48px; PADDING-BOTTOM: 0px; WIDTH: 80px; COLOR: #79a2bd; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 24px
}


#uboxstyle UL.tag_options 
{
    PADDING-RIGHT
: 0px; PADDING-LEFT: 0px; BACKGROUND: url(ubox-select.gif) no-repeat right bottom; PADDING-BOTTOM: 5px; MARGIN: 0px; WIDTH: 100px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; POSITION: absolute
}

#uboxstyle UL.tag_options LI 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(ubox-select.gif) repeat-y -100px 0px; PADDING-BOTTOM: 0px; WIDTH: 80px; COLOR: #79a2bd; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 24px; TEXT-DECORATION: none
}

#uboxstyle UL.tag_options LI.open_hover 
{
    BACKGROUND
: url(ubox-select.gif) no-repeat 0px -72px; COLOR: #fff
}

#uboxstyle UL.tag_options LI.open_selected 
{
    BACKGROUND
: url(ubox-select.gif) no-repeat 0px -96px; COLOR: #fff
}

#macstyle DIV.tag_select 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(mac-select.gif) no-repeat 0px -24px; PADDING-BOTTOM: 0px; WIDTH: 71px; COLOR: #000; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 24px
}

#macstyle DIV.tag_select_hover 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(mac-select.gif) no-repeat 0px 0px; PADDING-BOTTOM: 0px; WIDTH: 71px; COLOR: #000; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 24px
}

#macstyle DIV.tag_select_open 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(mac-select.gif) no-repeat 0px -48px; PADDING-BOTTOM: 0px; WIDTH: 71px; COLOR: #000; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 24px
}

#macstyle UL.tag_options 
{
    PADDING-RIGHT
: 0px; PADDING-LEFT: 0px; BACKGROUND: url(mac-select.gif) no-repeat left bottom; PADDING-BOTTOM: 5px; MARGIN: 0px; WIDTH: 71px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; POSITION: absolute
}

#macstyle UL.tag_options LI 
{
    PADDING-RIGHT
: 0px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(mac-select.gif) repeat-y -91px 0px; PADDING-BOTTOM: 0px; WIDTH: 61px; COLOR: #000; LINE-HEIGHT: 24px; PADDING-TOP: 0px; HEIGHT: 24px; TEXT-DECORATION: none
}

#macstyle UL.tag_options LI.open_hover 
{
    BACKGROUND
: url(mac-select.gif) no-repeat -162px 0px; COLOR: #000
}

#macstyle UL.tag_options LI.open_selected 
{
    BACKGROUND
: url(mac-select.gif) no-repeat -162px -24px; COLOR: #fff
}

#tm2008style DIV.tag_select 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(tm2008-select.gif) no-repeat 0px 0px; PADDING-BOTTOM: 0px; WIDTH: 82px; COLOR: #000; LINE-HEIGHT: 22px; PADDING-TOP: 0px; HEIGHT: 22px
}

#tm2008style DIV.tag_select_hover 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(tm2008-select.gif) no-repeat 0px -22px; PADDING-BOTTOM: 0px; WIDTH: 82px; COLOR: #000; LINE-HEIGHT: 22px; PADDING-TOP: 0px; HEIGHT: 22px
}

#tm2008style DIV.tag_select_open 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(tm2008-select.gif) no-repeat 0px -44px; PADDING-BOTTOM: 0px; WIDTH: 82px; COLOR: #000; LINE-HEIGHT: 22px; PADDING-TOP: 0px; HEIGHT: 22px
}

#tm2008style UL.tag_options 
{
    PADDING-RIGHT
: 0px; PADDING-LEFT: 0px; BACKGROUND: url(tm2008-select.gif) no-repeat left bottom; PADDING-BOTTOM: 1px; MARGIN: 0px; WIDTH: 80px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none; POSITION: absolute
}

#tm2008style UL.tag_options LI 
{
    PADDING-RIGHT
: 10px; DISPLAY: block; PADDING-LEFT: 10px; BACKGROUND: url(tm2008-select.gif) repeat-y -102px 0px; PADDING-BOTTOM: 0px; WIDTH: 61px; COLOR: #000; LINE-HEIGHT: 22px; PADDING-TOP: 0px; HEIGHT: 22px; TEXT-DECORATION: none
}

#tm2008style UL.tag_options LI.open_hover 
{
    BACKGROUND
: url(tm2008-select.gif) no-repeat 0px -88px; COLOR: #000
}

#tm2008style UL.tag_options LI.open_selected 
{
    BACKGROUND
: url(tm2008-select.gif) no-repeat 0px -66px; COLOR: #19555f
}


SelectDemo.js:
/*#############################################################
Name: Select to CSS
Version: 0.2
Author: Utom
URL: http://utombox.com/
#############################################################
*/

var selects = document.getElementsByTagName('select');

var isIE = (document.all && window.ActiveXObject && !window.opera) ? true : false;

function $(id) {
    
return document.getElementById(id);
}


function stopBubbling (ev) {    
    ev.stopPropagation();
}


function rSelects() {
    
for (i=0;i<selects.length;i++){
        selects[i].style.display 
= 'none';
        select_tag 
= document.createElement('div');
            select_tag.id 
= 'select_' + selects[i].name;
            select_tag.className 
= 'select_box';
        selects[i].parentNode.insertBefore(select_tag,selects[i]);

        select_info 
= document.createElement('div');    
            select_info.id 
= 'select_info_' + selects[i].name;
            select_info.className
='tag_select';
            select_info.style.cursor
='pointer';
        select_tag.appendChild(select_info);

        select_ul 
= document.createElement('ul');    
            select_ul.id 
= 'options_' + selects[i].name;
            select_ul.className 
= 'tag_options';
            select_ul.style.position
='absolute';
            select_ul.style.display
='none';
            select_ul.style.zIndex
='999';
        select_tag.appendChild(select_ul);

        rOptions(i,selects[i].name);
        
        mouseSelects(selects[i].name);

        
if (isIE){
            selects[i].onclick 
= new Function("clickLabels3('"+selects[i].name+"');window.event.cancelBubble = true;");
        }

        
else if(!isIE){
            selects[i].onclick 
= new Function("clickLabels3('"+selects[i].name+"')");
            selects[i].addEventListener(
"click", stopBubbling, false);
        }
        
    }

}



function rOptions(i, name) {
    
var options = selects[i].getElementsByTagName('option');
    
var options_ul = 'options_' + name;
    
for (n=0;n<selects[i].options.length;n++){    
        option_li 
= document.createElement('li');
            option_li.style.cursor
='pointer';
            option_li.className
='open';
        $(options_ul).appendChild(option_li);

        option_text 
= document.createTextNode(selects[i].options[n].text);
        option_li.appendChild(option_text);

        option_selected 
= selects[i].options[n].selected;

        
if(option_selected){
            option_li.className
='open_selected';
            option_li.id
='selected_' + name;
            $(
'select_info_' + name).appendChild(document.createTextNode(option_li.innerHTML));
        }

        
        option_li.onmouseover 
= function(){    this.className='open_hover';}
        option_li.onmouseout 
= function(){
            
if(this.id=='selected_' + name){
                
this.className='open_selected';
            }

            
else {
                
this.className='open';
            }

        }
 
    
        option_li.onclick 
= new Function("clickOptions("+i+","+n+",'"+selects[i].name+"')");
    }

}


function mouseSelects(name){
    
var sincn = 'select_info_' + name;

    $(sincn).onmouseover 
= function()if(this.className=='tag_select'this.className='tag_select_hover'; }
    $(sincn).onmouseout 
= function()if(this.className=='tag_select_hover'this.className='tag_select'; }

    
if (isIE){
        $(sincn).onclick 
= new Function("clickSelects('"+name+"');window.event.cancelBubble = true;");
    }

    
else if(!isIE){
        $(sincn).onclick 
= new Function("clickSelects('"+name+"');");
        $(
'select_info_' +name).addEventListener("click", stopBubbling, false);
    }


}


function clickSelects(name){
    
var sincn = 'select_info_' + name;
    
var sinul = 'options_' + name;    

    
for (i=0;i<selects.length;i++){    
        
if(selects[i].name == name){                
            
if( $(sincn).className =='tag_select_hover'){
                $(sincn).className 
='tag_select_open';
                $(sinul).style.display 
= '';
            }

            
else if( $(sincn).className =='tag_select_open'){
                $(sincn).className 
= 'tag_select_hover';
                $(sinul).style.display 
= 'none';
            }

        }

        
else{
            $(
'select_info_' + selects[i].name).className = 'tag_select';
            $(
'options_' + selects[i].name).style.display = 'none';
        }

    }


}


function clickOptions(i, n, name){        
    
var li = $('options_' + name).getElementsByTagName('li');

    $(
'selected_' + name).className='open';
    $(
'selected_' + name).id='';
    li[n].id
='selected_' + name;
    li[n].className
='open_hover';
    $(
'select_' + name).removeChild($('select_info_' + name));

    select_info 
= document.createElement('div');
        select_info.id 
= 'select_info_' + name;
        select_info.className
='tag_select';
        select_info.style.cursor
='pointer';
    $(
'options_' + name).parentNode.insertBefore(select_info,$('options_' + name));

    mouseSelects(name);

    $(
'select_info_' + name).appendChild(document.createTextNode(li[n].innerHTML));
    $( 
'options_' + name ).style.display = 'none' ;
    $( 
'select_info_' + name ).className = 'tag_select';
    selects[i].options[n].selected 
= 'selected';

}


window.onload 
= function(e) {
    bodyclick 
= document.getElementsByTagName('body').item(0);
    rSelects();
    bodyclick.onclick 
= function(){
        
for (i=0;i<selects.length;i++){    
            $(
'select_info_' + selects[i].name).className = 'tag_select';
            $(
'options_' + selects[i].name).style.display = 'none';
        }

    }

}

背景图片:
      
posted on 2008-01-26 14:14  Jacky Huang  阅读(3699)  评论(0编辑  收藏  举报