首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > CSS >

JS+CSS 做下拉菜单背景有关问题

2013-07-08 
JS+CSS 做下拉菜单背景问题下面的代码是改变下拉菜单样式的,可以正常使用,但是现在有个问题就是下拉的内容

JS+CSS 做下拉菜单背景问题
JS+CSS 做下拉菜单背景有关问题
下面的代码是改变下拉菜单样式的,可以正常使用,但是现在有个问题就是下拉的内容很多,我想到一定高度就自动有滚动条,麻烦哪位兄弟帮我看看,感觉感谢。


<script language="JavaScript" type="text/javascript">
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';
}
}
}
</script>




<style type="text/css">
body{margin:0px; padding:0px; font-size:12px; color:#FFFFFB; background:#3d4045;   }
div,ul,li{margin:0; padding:0;}
#macstyle1 .select_box{height:22px;  width:271px;}
#macstyle1 div.tag_select{display:block;color:#fff; text-align:left; padding-left:10px;width:271px;height:22px;background:url(http://img.bbs.csdn.net/upload/201307/03/1372819568_91197.gif) no-repeat;line-height:22px;}
#macstyle1 div.tag_select_hover{display:block;color:#fff;text-align:left; padding-left:10px;width:271px;height:22px;background:url(http://img.bbs.csdn.net/upload/201307/03/1372819568_91197.gif) no-repeat;line-height:22px;}
#macstyle1 div.tag_select_open{display:block;color:#fff;text-align:left; padding-left:10px;width:271px;height:22px;background:url(http://img.bbs.csdn.net/upload/201307/03/1372819568_91197.gif) no-repeat;line-height:22px;}
#macstyle1 ul.tag_options{position:absolute;list-style:none;text-align:left;  }
#macstyle1 ul.tag_options li{ background:#414348;text-align:left; padding-left:10px;width:241px;height:15px;line-height:15px;color:#fff;overflow:auto;}
#macstyle1 ul.tag_options li.open_hover{color:#fff; background:#6c6f75; }
#macstyle1 ul.tag_options li.open_selected{color:#fff; }

</style>


<div id="macstyle1">
            <select >
              <option  value="GMT-12:00">GMT-12:00 日界线西</option>
              <option  value="GMT-11:00">GMT-11:00 中途岛,萨摩亚群岛</option>
              <option  value="GMT-10:00">GMT-10:00 夏威夷</option>
              <option  value="GMT-9:00">GMT-9:00 阿拉斯加</option>
              <option  value="GMT-8:00">GMT-8:00 太平洋时间(美国和加拿大)</option>


              <option  value="GMT-7:00">GMT-7:00 山地时间(美国和加拿大)</option>
              <option  value="GMT-6:00">GMT-6:00 中部时间(美国和加拿大)</option>
              <option  value="GMT-5:00">GMT-5:00 东部时间(美国和加拿大)</option>
              <option  value="GMT-4:30">GMT-4:30 加拉斯加</option>
              <option  value="GMT-4:00">GMT-4:00 大西洋时间(加拿大)</option>
              <option  value="GMT-3:30">GMT-3:30 纽芬兰</option>
              <option  value="GMT-3:00">GMT-3:00 乔治郭、巴西利亚</option>
              <option  value="GMT-2:00">GMT-2:00 中大西洋</option>
              <option  value="GMT-1:00">GMT-1:00 佛得角群岛、亚速尔群岛</option>
              <option  value="GMT-0:00">GMT-0:00 都柏林、爱丁堡、伦敦</option>
              <option  value="GMT+1:00">GMT+1:00 阿姆斯特丹、柏林、罗马、巴黎</option>
              <option  value="GMT+2:00">GMT+2:00 雅典、耶路撒冷、伊斯坦布尔</option>
              <option  value="GMT+3:00">GMT+3:00 巴格达、科威特、莫斯科</option>
              <option  value="GMT+3:30">GMT+3:30 德黑兰</option>
              <option  value="GMT+4:00">GMT+4:00 高加索标准时间</option>
              <option  value="GMT+4:30">GMT+4:30 喀布尔</option>
              <option  value="GMT+5:00">GMT+5:00 伊斯兰堡、卡拉奇、塔什干</option>
              <option  value="GMT+5:30">GMT+5:30 马德拉斯、孟买、新德里</option>


              <option  value="GMT+5:45">GMT+5:45 加德满都</option>
              <option  value="GMT+6:00">GMT+6:00 阿拉木图、新西伯利亚、达卡</option>
              <option  value="GMT+6:30">GMT+6:30 仰光</option>
              <option  value="GMT+7:00">GMT+7:00 曼谷、河内、雅加达</option>
              <option  value="GMT+8:00" selected="selected">GMT+8:00 北京、乌鲁木齐、新加坡</option>
              <option  value="GMT+9:00">GMT+9:00 汉城、东京、大阪、札幌</option>
              <option  value="GMT+9:30" >GMT+9:30 阿德莱德、达尔文</option>
              <option  value="GMT+10:00" >GMT+10:00 墨尔本、悉尼、堪培拉</option>
              <option  value="GMT+11:00">GMT+11:00 马加丹、索罗门群岛</option>
              <option  value="GMT+12:00">GMT+12:00 奥克兰、惠灵顿</option>
              <option  value="GMT+13:00">GMT+13:00 努库阿洛法</option>
            </select>
          </div> 

select 滚动条
[解决办法]
默认overflow是visible,会自动撑开,给#macstyle1 ul.tag_options一个合适的高度并让overflow-y:auto;就行了,为了美观overflow-x可以设置为hidden。出来滚动条之后宽度有点不够,建议加一点。

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<style type="text/css">


body{margin:0px; padding:0px; font-size:12px; color:#FFFFFB; background:#3d4045;   }
div,ul,li{margin:0; padding:0;}
#macstyle1 .select_box{height:22px;  width:271px;}
#macstyle1 div.tag_select{display:block;color:#fff; text-align:left; padding-left:10px;width:271px;height:22px;background:url(http://img.bbs.csdn.net/upload/201307/03/1372819568_91197.gif) no-repeat;line-height:22px;}
#macstyle1 div.tag_select_hover{display:block;color:#fff;text-align:left; padding-left:10px;width:271px;height:22px;background:url(http://img.bbs.csdn.net/upload/201307/03/1372819568_91197.gif) no-repeat;line-height:22px;}
#macstyle1 div.tag_select_open{display:block;color:#fff;text-align:left; padding-left:10px;width:271px;height:22px;background:url(http://img.bbs.csdn.net/upload/201307/03/1372819568_91197.gif) no-repeat;line-height:22px;}
#macstyle1 ul.tag_options{position:absolute;list-style:none;text-align:left;height:300px;overflow-y:auto;overflow-x:hidden;}
#macstyle1 ul.tag_options li{ background:#414348;text-align:left; padding-left:10px;width:241px;height:15px;line-height:15px;color:#fff;overflow:auto;}
#macstyle1 ul.tag_options li.open_hover{color:#fff; background:#6c6f75; }
#macstyle1 ul.tag_options li.open_selected{color:#fff; }
</style>
<script language="JavaScript" type="text/javascript">
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';
        }
    }
}
</script>
</head>
<body>
<div id="macstyle1">
<select >
<option  value="GMT-12:00">GMT-12:00 日界线西</option>
<option  value="GMT-11:00">GMT-11:00 中途岛,萨摩亚群岛</option>
<option  value="GMT-10:00">GMT-10:00 夏威夷</option>
<option  value="GMT-9:00">GMT-9:00 阿拉斯加</option>
<option  value="GMT-8:00">GMT-8:00 太平洋时间(美国和加拿大)</option>
<option  value="GMT-7:00">GMT-7:00 山地时间(美国和加拿大)</option>
<option  value="GMT-6:00">GMT-6:00 中部时间(美国和加拿大)</option>
<option  value="GMT-5:00">GMT-5:00 东部时间(美国和加拿大)</option>
<option  value="GMT-4:30">GMT-4:30 加拉斯加</option>
<option  value="GMT-4:00">GMT-4:00 大西洋时间(加拿大)</option>
<option  value="GMT-3:30">GMT-3:30 纽芬兰</option>
<option  value="GMT-3:00">GMT-3:00 乔治郭、巴西利亚</option>
<option  value="GMT-2:00">GMT-2:00 中大西洋</option>
<option  value="GMT-1:00">GMT-1:00 佛得角群岛、亚速尔群岛</option>
<option  value="GMT-0:00">GMT-0:00 都柏林、爱丁堡、伦敦</option>
<option  value="GMT+1:00">GMT+1:00 阿姆斯特丹、柏林、罗马、巴黎</option>


<option  value="GMT+2:00">GMT+2:00 雅典、耶路撒冷、伊斯坦布尔</option>
<option  value="GMT+3:00">GMT+3:00 巴格达、科威特、莫斯科</option>
<option  value="GMT+3:30">GMT+3:30 德黑兰</option>
<option  value="GMT+4:00">GMT+4:00 高加索标准时间</option>
<option  value="GMT+4:30">GMT+4:30 喀布尔</option>
<option  value="GMT+5:00">GMT+5:00 伊斯兰堡、卡拉奇、塔什干</option>
<option  value="GMT+5:30">GMT+5:30 马德拉斯、孟买、新德里</option>
<option  value="GMT+5:45">GMT+5:45 加德满都</option>
<option  value="GMT+6:00">GMT+6:00 阿拉木图、新西伯利亚、达卡</option>
<option  value="GMT+6:30">GMT+6:30 仰光</option>
<option  value="GMT+7:00">GMT+7:00 曼谷、河内、雅加达</option>
<option  value="GMT+8:00" selected="selected">GMT+8:00 北京、乌鲁木齐、新加坡</option>
<option  value="GMT+9:00">GMT+9:00 汉城、东京、大阪、札幌</option>
<option  value="GMT+9:30" >GMT+9:30 阿德莱德、达尔文</option>
<option  value="GMT+10:00" >GMT+10:00 墨尔本、悉尼、堪培拉</option>
<option  value="GMT+11:00">GMT+11:00 马加丹、索罗门群岛</option>
<option  value="GMT+12:00">GMT+12:00 奥克兰、惠灵顿</option>
<option  value="GMT+13:00">GMT+13:00 努库阿洛法</option>
</select>
</div> 
</body>
</html>

热点排行