【问题标题】:Changing the Select Option Focus Text CSS更改选择选项焦点文本 CSS
【发布时间】:2011-12-25 16:37:17
【问题描述】:

我正在重新设置 select 样式,当您第一次单击下拉菜单以显示选项时,它会在选项列表中选择当前选定的选项。你如何选择它以在 CSS 中设置不同的样式?对于将背景更改为红色的选项,我有悬停 CSS,并且我想对它使用相同的样式。

我尝试了 option:focus ,但没有成功。

有什么想法吗?

这是我的代码:

.select-wrapper { background:url(images/ui-sprite-sheet.png) no-repeat 0 0 transparent; height:32px; width:193px; }
.select-wrapper:hover { background-position:0 -32px !important; }
.select-wrapper .selected { margin:-24px 20px; display:block; color:#4d4c4c !important; font-size:14px; width:153px; }
.select-wrapper SELECT { position:relative; opacity:0; height:32px; width:183px; left:5px; top:-3px; }
.select-wrapper OPTION { color:#4d4c4c !important; padding:3px; background:#fff;
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff),color-stop(1, #ddd));
    background: -moz-linear-gradient(center top, #fff 0%, #ddd 100%);
    background: -o-linear-gradient(center top, #fff 0%, #ddd 100%);
    background: -ms-linear-gradient(center top, #fff 0%, #ddd 100%);
    background: linear-gradient(center top, #fff 0%, #ddd 100%); }
.select-wrapper OPTION:hover { color:#fff !important; background-color:#660000 !important; 
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #660000),color-stop(1, #2e0000)) !important;
    background: -moz-linear-gradient(center top, #660000 0%, #2e0000 100%) !important;
    background: -o-linear-gradient(center top, #660000 0%, #2e0000 100%) !important;
    background: -ms-linear-gradient(center top, #660000 0%, #2e0000 100%) !important;
    background: linear-gradient(center top, #660000 0%, #2e0000 100%) !important;
}

【问题讨论】:

    标签: css select focus option


    【解决方案1】:

    我不确定这是否能回答问题,但这解决了我的问题。

    因此,由于兼容性问题的数量,我决定完全放弃这个想法,并使用一些 jQuery 来处理它。我发现 Janko 的帖子解决了我的问题 (http://www.jankoatwarpspeed.com/post/2009/07/28/reinventing-drop-down-with-css-jquery.aspx)。我使用了此博客上发布的第二个实现。

    我稍微更改了代码,以便我可以重复使用它并将其用于多项选择,但归功于Janko

    HTML

    <div class="select-wrapper">
      <select id="my-select-id">
        <option value="all" selected="selected">All</option>
        <option value="second">Second</option>
      </select>
    </div>
    

    CSS

    .select-wrapper { background:url(images/ui-sprite-sheet.png) no-repeat 0 0 transparent; height:32px; width:193px; }
    .select-wrapper:hover { background-position:0 -32px !important; }
    .select-wrapper SELECT { display:none; }
    .dropdown { margin:0; padding:4px 8px 0; width:173px; }   
    .dropdown DT A { display:block; width:170px; padding:5px; color:#4d4c4c !important; text-decoration:none !important; font-size:14px !important; }
    .dropdown DT A SPAN { cursor:pointer; display:block: padding:5px; }
    .dropdown SPAN.value { display:none; }
    .dropdown DD { position:relative; margin:0; padding:0; }
    .dropdown DD UL { min-width:167px; width:167px; list-style:none outside none; position:absolute; padding:3px; background-color:#fff; border:1px solid #ccc; 
        display:none; margin:0; }
    .dropdown DD UL LI { background:#fff;
        background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff),color-stop(1, #ddd));
        background: -moz-linear-gradient(center top, #fff 0%, #ddd 100%);
        background: -o-linear-gradient(center top, #fff 0%, #ddd 100%);
        background: -ms-linear-gradient(center top, #fff 0%, #ddd 100%);
        background: linear-gradient(center top, #fff 0%, #ddd 100%); }
    .dropdown DD UL LI:hover { background-color:#660000 !important; 
        background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #660000),color-stop(1, #2e0000)) !important;
        background: -moz-linear-gradient(center top, #660000 0%, #2e0000 100%) !important;
        background: -o-linear-gradient(center top, #660000 0%, #2e0000 100%) !important;
        background: -ms-linear-gradient(center top, #660000 0%, #2e0000 100%) !important;
        background: linear-gradient(center top, #660000 0%, #2e0000 100%) !important; }
    .dropdown DD UL LI A { padding:5px; display:block; color:#4d4c4c !important; text-decoration:none !important; }
    .dropdown DD UL LI:hover A { color:#fff !important; }
    

    jQuery

    $(document).ready(function(){
    // Settings
    var settings = { selectCount:0 };
    var selects = [ '#my-select-id' ];
    
    // Init SELECT's
    $.grep(selects, function(n, i){
        createDropDown(n);
    });
    
    // Events
    $('.dropdown DT A').click(function() {
        $('.dropdown DD UL').toggle();
    });
    
    $(document).bind('click', function(e) {
        var $clicked = $(e.target);
        if (!$clicked.parents().hasClass('dropdown'))
            $('.dropdown DD UL').hide();
    });
    
    $('.dropdown DD UL LI A').click(function() {
        var text = $(this).html();
        $('.dropdown DT A').html(text);
        $('.dropdown DD UL').hide();
        var source = $('#source');
        source.val($(this).find('span.value').html())
    });
    
    // Functions
    function createDropDown(id){
        settings.selectCount++;
        var target = 'target'+settings.selectCount;
        var appendTo = $(id).parent('.select-wrapper');
        var source = $(id);
        var selected = source.find('OPTION[selected=selected]');
        if (selected.val() == 'undefined' || selected.val() == null)
            selected = source.find('OPTION[selected]');
    
        var options = $('OPTION', source);  // get all <option> elements
    
        // create <dl> and <dt> with selected value inside it
        appendTo.append('<dl id="'+target+'" class="dropdown"></dl>')
        $('#'+target).append('<dt><a href="#">' + selected.text() + 
            '<span class="value">' + selected.val() + 
            '</span></a></dt>')
        $('#'+target).append('<dd><ul></ul></dd>')
    
        // iterate through all the <option> elements and create UL
        options.each(function(){
            $('#'+target+' DD UL').append('<li><a href="#">' + 
                $(this).text() + '<span class="value">' + 
                $(this).val() + '</span></a></li>');
        });
    }
    

    });

    【讨论】:

      【解决方案2】:
      .select-wrapper select option[selected=selected]
      

      【讨论】:

      • 这在 IE8 中对我有用,但没有别的。我也刚刚意识到,为选择设置整个下拉列表的样式仅适用于 Firefox,而没有其他功能。那不行。我需要重新考虑这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-09
      • 2011-09-22
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多