【问题标题】:How can I set the width of select box options?如何设置选择框选项的宽度?
【发布时间】:2016-08-09 04:06:23
【问题描述】:

图片中option的宽度大于选择框。我想将这些选项的宽度设置为与选择框相同,对于那些较大的选项,将文本溢出设置为省略号。任何帮助将不胜感激。

这是我尝试过的:

HTML

<select>
    <option>Select your University</option>
    <option>Bangladesh University of Engineering and Technology</option>
    <option>Mawlana Bhashani Science and Technology University</option>
</select>

CSS

select, option {
    width: 250px;
}

option {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}

小提琴https://jsfiddle.net/3bsbcqfz/

【问题讨论】:

  • 我不认为你可以。看看这个:stackoverflow.com/questions/1895476/…。对于样式下拉菜单,我建议尝试select2.github.io
  • @SideriteZackwehdex,最后,我通过使用ul, li 创建自定义下拉菜单来提出解决方案。您可以检查我自己的答案,任何建议都会被占用。

标签: css html-select


【解决方案1】:

我试图从 CSS 中找到解决方案。但我没能做到。没关系,我已经为它写了一个简单的javascript代码。这是可以为它做点什么。

function shortString(selector) {
  const elements = document.querySelectorAll(selector);
  const tail = '...';
  if (elements && elements.length) {
    for (const element of elements) {
      let text = element.innerText;
      if (element.hasAttribute('data-limit')) {
        if (text.length > element.dataset.limit) {
          element.innerText = `${text.substring(0, element.dataset.limit - tail.length).trim()}${tail}`;
        }
      } else {
        throw Error('Cannot find attribute \'data-limit\'');
      }
    }
  }
}

window.onload = function() {
  shortString('.short');
};
select {
  width: 250px;
}

option {
  width: 250px;
}
<select name="select" id="select">
  <option class='short' data-limit='37' value="Select your University">Select your University</option>
  <option class='short' data-limit='37' value="Bangladesh University of Engineering and Technology">Bangladesh University of Engineering and Technology</option>
  <option class='short' data-limit='37' value="Mawlana Bhashani Science and Technology University">Mawlana Bhashani Science and Technology University</option>
</select>

【讨论】:

  • 还不错,但我想出了解决方案,方法是使用 ul, li 创建自定义下拉菜单。您可以检查我自己的答案,任何建议都会被占用。
【解决方案2】:

您可以使用 javascript 来缩短选项文本的长度,使其与选项的长度相匹配。我没有找到只使用 css 的解决方案

var e=document.querySelectorAll('option')
e.forEach(x=>{
if(x.textContent.length>20)
x.textContent=x.textContent.substring(0,20)+'...';
})
select
{
width:160px;
}
<select>
<option>fwefwefwefwe</option>
<option>fwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwefwe</option>
</select>

【讨论】:

    【解决方案3】:

    另一个简单的 jquery 解决方案是手动重写选项的长度以获得所需的大小,如下所示:

    $('option').each(function() {
      var optionText = this.text;
      var newOption = optionText.substring(0, 36);
      $(this).text(newOption + '...');
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
    <select style="width:250px">
        <option>Select your University</option>
        <option>Bangladesh University of Engineering and Technology</option>
        <option>Mawlana Bhashani Science and Technology University</option>
    </select>

    【讨论】:

      【解决方案4】:

      最后,我通过使用ul, li. 创建自定义下拉菜单来提出解决方案,这是解决方案:

      FIDDLE DEMO

      HTML

       $(document).ready(function (){
        $("div.selected").on("click", function () {
            var hasActiveClass = $("div.select-box").hasClass("active");
      
            if (hasActiveClass === false) {
                var windowHeight = $(window).outerHeight();
                var dropdownPosition = $(this).offset().top;
                var dropdownHeight = 95; // dropdown height
      
                if (dropdownPosition + dropdownHeight + 50 > windowHeight) {
                    $("div.select-box").addClass("drop-up");
                }
                else {
                   $("div.select-box").removeClass("drop-up");
                }
      
                var currentUniversity = $(this).find('text').text().trim();
      
                $.each($("ul.select-list li"), function () {
                    var university = $(this).text().trim();
                    if (university === currentUniversity)
                        $(this).addClass("active");
                    else
                        $(this).removeClass("active");
                });
            }
      
            $("div.select-box").toggleClass("active");
        });
      
        $("ul.select-list li").on("click", function () {
            var university = $(this).html();
            $("span.text").html(university);
            $("div.select-box").removeClass("active");
        });
      
        $("ul.select-list li").hover(function () {
            $("ul.select-list li").removeClass("active");
        });
      
        $(document).click(function (event) {
            if ($(event.target).closest("div.custom-select").length < 1) {
                $("div.select-box").removeClass("active");
            }
        });
      
      });
      div.custom-select 
      {
          height: 40px;
          width: 400px;
          position: relative;
          background-color: #F2F2F2;
          border: 1px solid #E4E4E4;
      }
      
      div.selected
      {
          width: inherit;
          cursor: pointer;
          line-height: 20px;
          display: inline-block;
      }
      
      div.selected > .text
      {
          padding: 10px;
          display: block;
          overflow: hidden;
          white-space: nowrap;
          text-overflow: ellipsis;
      }
      
      div.select-box
      {
          display: none;
          width: 100%;
          z-index: 10029;
          position: absolute;
          border-radius: 3px;
          box-shadow: 0 8px 20px #000000;
          box-shadow: 0 8px 20px rgba(0,0,0,.35)
      }
      
      div.select-box.active
      {
          display: block;
      }
      
      div.select-box.drop-up
      {
          top: auto;
          bottom: 100%;
      }
      
      ul.select-list
      {
          margin: 0;
          padding: 10px;
          list-style-type: none;
      }
      
      ul.select-list li
      {
          cursor: pointer;
          overflow: hidden;
          white-space: nowrap;
          text-overflow: ellipsis;
      }
      
      ul.select-list li:hover,
      ul.select-list li.active
      {
          background-color: #999999;
      }
      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <div class='custom-select'>
          <div class="selected">
             <span class='text'>Select</span>
          </div>
          <div class='select-box'>
             <ul class='select-list'>
                <li data-row='0' data-value=''>
                    Select
                </li>
                <li data-row='1' data-value='BUET'>
                    Bangladesh University of Engineering and Technology
                </li>
                <li data-row='2' data-value='MBSTU'>
                    Mawlana Bhashani Science and Technology University
                </li>
             </ul>
          </div>
      </div>

      【讨论】:

        【解决方案5】:

        如果您不介意使用 jQuery,这里有一个简单的解决方案。只需在代码开头运行它,它适用于每个select

        $('select').change(function(){
          var text = $(this).find('option:selected').text()
          var $aux = $('<select/>').append($('<option/>').text(text))
          $(this).after($aux)
          $(this).width($aux.width())
          $aux.remove()
        }).change()
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <select>
          <option>Select your University</option>
          <option>Bangladesh University of Engineering and Technology</option>
          <option>Mawlana Bhashani Science and Technology University</option>
        </select>

        【讨论】:

        • 我认为你在这里做的是倒退。问题是关于设置 options 的宽度,而不是 select 元素。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        • 2013-04-11
        • 1970-01-01
        • 2019-09-30
        • 2023-03-23
        • 1970-01-01
        相关资源
        最近更新 更多