【问题标题】:Set width of dropdown element in HTML select dropdown options在 HTML 中设置下拉元素的宽度选择下拉选项
【发布时间】:2010-12-14 16:52:36
【问题描述】:

我正在开发一个涉及使用 PHP 脚本自动填充选择框的网站。这一切都很好,除了问题是我用来填充文本框的标题很长(它们是期刊文章和演示文稿标题)。下拉框延伸到最长元素的宽度,该元素延伸到屏幕边缘,因此无法触及滚动条。我尝试了各种尝试使用 CSS 手动将下拉框设置为特定宽度的方法,但到目前为止无济于事。最好的方法是将选择框设置为一定的宽度,但下拉菜单本身要宽得多。

对此的任何提示将不胜感激。

编辑:

事实证明,以下 CSS 行适用于除 Google Chrome 之外的所有主要浏览器(我在其中测试页面)。如果已知 Chrome 的解决方案,那就太好了。

select, option { width: __; }

【问题讨论】:

    标签: html css html-select


    【解决方案1】:

    小巧玲珑

    var i = 0;
    $("#container > option").each(function(){ 
        if($(this).val().length > i) {
            i = $(this).val().length;
    
            console.log(i);
            console.log($(this).val());
        }
    });
    

    【讨论】:

    • 样式应该在 CSS 中完成,这不会改变下拉菜单的宽度。
    【解决方案2】:

    HTML:

    <select class="shortenedSelect">
        <option value="0" disabled>Please select an item</option>
        <option value="1">Item text goes in here but it is way too long to fit inside a select option that has a fixed width adding more</option>
    </select>
    

    CSS:

    .shortenedSelect {
        max-width: 350px;
    }
    

    Javascript:

    // Shorten select option text if it stretches beyond max-width of select element
    $.each($('.shortenedSelect option'), function(key, optionElement) {
        var curText = $(optionElement).text();
        $(this).attr('title', curText);
    
        // Tip: parseInt('350px', 10) removes the 'px' by forcing parseInt to use a base ten numbering system.
        var lengthToShortenTo = Math.round(parseInt($(this).parent('select').css('max-width'), 10) / 7.3);
    
        if (curText.length > lengthToShortenTo) {
            $(this).text('... ' + curText.substring((curText.length - lengthToShortenTo), curText.length));
        }
    });
    
    // Show full name in tooltip after choosing an option
    $('.shortenedSelect').change(function() {
        $(this).attr('title', ($(this).find('option:eq('+$(this).get(0).selectedIndex +')').attr('title')));
    });
    

    完美运行。我自己也有同样的问题。看看这个 JSFiddle http://jsfiddle.net/jNWS6/426/

    【讨论】:

      【解决方案3】:

      你可以简单地使用“样式”的“宽度”属性来改变下拉框的长度

      <select class="my_dropdown" id="my_dropdown" style="width:APPROPRIATE WIDTH IN PIXLES">
      <option value="1">LONG OPTION</option>
      <option value="2">short</option>
      </select>
      

      例如

      style="width:200px"
      

      【讨论】:

        【解决方案4】:

        小巧玲珑

        #test{
        width: 202px;
        }
        <select id="test" size="1" name="mrraja">
        

        【讨论】:

          【解决方案5】:

          我发现处理长下拉框的最佳方法是将其放在固定宽度的 div 容器中,并在 select 标签上使用 width:auto。大多数浏览器都会在 div 中包含下拉菜单,但是当您单击它时,它会展开以显示完整的选项值。它不适用于 IE 资源管理器,但有一个修复程序(就像 IE 总是需要的那样)。您的代码看起来像这样。

          HTML

          <div class="dropdown_container">
            <select class="my_dropdown" id="my_dropdown">
              <option value="1">LONG OPTION</option>
              <option value="2">short</option>
            </select>
          </div>
          

          CSS

          div.dropdown_container {
              width:10px;
          }
          
          select.my_dropdown {
              width:auto;
          }
          
          /*IE FIX */
          select#my_dropdown {
              width:100%;
          }
          
          select:focus#my_dropdown {
              width:auto\9;
          }
          

          【讨论】:

          • 我在 Firefox 45.x、Chromium 39.x 和 IE 11.x 上测试了一个类似的例子,需要 width:100%
          【解决方案6】:

          在服务器端:

          1. 定义字符串的最大长度
          2. Clip字符串
          3. (可选)附加水平省略号

          替代解决方案:在您的情况下(仅猜测)选择元素是一个单选表单控件,您可以使用一组单选按钮。然后,您可以更好地控制这些样式。如果你有一个 select[@multiple] 你可以用一组复选框来做同样的事情,因为它们都可以被视为一个多选表单控件。

          【讨论】:

          • 感谢您的回答。您的第一个解决方案是我认为需要完成的,但希望有一种更简单的方法。事实证明,只要有人忽略 Chrome。
          【解决方案7】:

          您可以使用option 选择器自己设置实际项目的样式(尽管有一些限制):

          select, option { width: __; }
          

          这样,您不仅可以限制下拉菜单,还可以限制其所有元素。

          【讨论】:

          • 这是我已经尝试过的,但我最初只在 Chrome 上测试过。事实证明,这适用于 Internet Explorer、Firefox、Safari 和 Opera。所以我会说这回答了这个问题,因为这个特定页面的主要用户(因为它是网站管理部分的一部分)不使用谷歌浏览器。如果在谷歌浏览器中有一种已知的方法可以解决这个问题,那会很高兴(另外,如果所有浏览器都以相同的方式处理 CSS,那就太好了。我认为现在这会更加标准化)。
          • 请注意,设置选择元素的宽度并不是最好的主意,请参阅:stackoverflow.com/questions/1700807/…
          • 这很奇怪......但在我的情况下这个错误不会成为问题,因为用户只需要查看标题的开头部分,这样他就可以准确地知道他的出版物页面上的哪个条目选择编辑或删除。
          猜你喜欢
          • 2014-06-28
          • 2020-04-28
          • 2011-02-10
          • 2015-03-14
          • 2012-09-04
          • 1970-01-01
          • 2021-03-11
          • 1970-01-01
          • 2011-05-07
          相关资源
          最近更新 更多