html 选择下拉菜单宽度太大

Posted

技术标签:

【中文标题】html 选择下拉菜单宽度太大【英文标题】:html select dropdrown width is too big 【发布时间】:2012-09-04 11:29:46 【问题描述】:

我搜索了解决我的问题的方法,但找不到,也许我不知道如何用英语搜索它,因为它不是我的第一语言。

无论如何,我的问题是我正在尝试使用 html 中的功能,其中一个选项非常冗长,如果我将没有任何宽度作为样式传递,它将破坏整个网站。如果我使用宽度,它只会显示一些东西,看起来像切割。但是,我看到了一个包含“...”的示例,我很乐意使用它,但我不知道如何使用。

为了清楚起见,我正在寻求一些帮助,让我看起来像“多头期权......” 或者如果有人知道更好的方法?

【问题讨论】:

你能显示代码吗? HTML、php、JS?我们无法知道您是如何输出选择元素的。 请在 js fiddle 中添加你的代码。 这里是:jsfiddle.net/zbhMz 【参考方案1】:

仅使用 css 更改/更改选择菜单是不可能的。我添加了一个使用 jquery 的小演示来模拟解决方案的问题。

[Truncating or showing ellipses for Long option value][1]


  [1]: http://jsfiddle.net/xpvt214o/996293/

【讨论】:

查看接受的纯 CSS 解决方案的答案【参考方案2】:

如果您正在寻找一个非常简单的解决方案,就像您描述的那样(附加 ...),那么这样的东西应该适合您:-

$(document).ready(function() 
    var maxLength = 15;
    $('#example > option').text(function(i, text) 
        if (text.length > maxLength) 
            return text.substr(0, maxLength) + '...';
        
    );
);

这只是遍历每个option 并检查其文本长度。如果它大于maxLength,它将被缩短到与maxLength 相同的长度,并且... 将被附加到它上面。

下面是一些与之配套的示例标记:-

<select id="example">
    <option value="1">Short</option>
    <option value="2">Oh dear, this option has really long text :(</option>
</select>

Here's a fiddle

【讨论】:

是的!谢谢,但是当我单击下拉菜单时,我想查看整个选项。这可能吗? @SarahMcLachlane:你原来的帖子不是很清楚,你说Long option ...,但是你想看到整个选项?你的意思是你只想截断选定的值而不是所有的选项?在那种情况下,您是否尝试过 CSS 来设置选择的 with? selectwidth: 100px;。这会改变下拉菜单的宽度,但在单击下拉菜单时会完全扩展选项。 我知道,但我想将“...”添加到截断的 long 值中,当我单击 @SarahMcLachlane:我根据您的回复添加了答案。让我知道这是否是您需要的。【参考方案3】:

示例 HTML:

<select id="myOptions">
    <option value="1"><span>Item 1</span></option>
    <option value="2">Item 2</option>
    <option value="3">Item 3 which has very very very very very long text</option>
    <option value="4">Item 4</option>
</select>

示例 CSS:

select
    width: 100px;
    text-overflow: ellipsis;

DEMO - 仅将 ... 添加到选定值

将宽度更改为最适合您的情况。应用text-overflow: ellipsis 会将... 添加到比指定宽度更长的文本中。

此样式应用于所选值,但在单击下拉菜单时仍会完整显示选项。

【讨论】:

@DilipRajkumar:我没有 IE8,我在 IE9 上,当切换到 IE8 浏览器模式时,jsFiddle 在 IE9 上都搞砸了。我将 HTML 和 CSS 添加到一个新的空网页中,并在 IE9 中使用浏览器模式和 IE8 中的文档模式对其进行了测试。样式始终正确应用。所以我假设在 IE8 兼容模式下运行的 IE9 与 IE8 不同。我什至尝试了 HTML 4.01 和 HTML 5 DOCTYPEs,以防万一,但没有。在 IE8 中运行时,您能否分享指向某个站点的链接,我们可以看到问题吗? 嗨@FrançoisWahl 感谢您的回答。我现在没有实时链接。一旦应用程序投入生产,我会提供。 CSS 技巧不适用于 IE 8 及更低版本。但是它在其他浏览器中运行良好。我正在尝试找到一些 jquery 库来解决这个问题。 已在 Chrome 81/Mac 上测试,但无法正常工作。是否修剪选项或添加省略号【参考方案4】:

如果您在select 元素上设置宽度,例如

select  width: 7em 

下拉列表仍会以其自然宽度显示。

如果某个选项非常很长,那么无论如何您都会遇到可用性问题,您应该考虑将其缩短或使用不同的控件,例如一组单选按钮或复选框。

【讨论】:

我选择了所有国家/地区,其中一些可能很长,将宽度设置为百分比对我的最大宽度响应式设计非常有效,因此它不会变得很拉伸大屏幕。【参考方案5】:

您可以使用 jQuery 并阅读 this 文章来解决这个问题。

var el;

$("select")
  .each(function() 
    el = $(this);
    el.data("origWidth", el.outerWidth()) // IE 8 can haz padding
  )
  .mouseenter(function()
    $(this).css("width", "auto");
  )
  .bind("blur change", function()
    el = $(this);
    el.css("width", el.data("origWidth"));
  );

【讨论】:

【参考方案6】:

这取决于您如何将选项添加到选择中 - 它是使用 PHP/Python/等服务器端语言生成的吗?或者是一些 JS 或者它的静态 HTML?

您可以使用这些语言中的任何一种来缩短字符串(最后使用 ...)。在这里您可以找到如何使用 js 进行操作: javascript shorten string without cutting words

如果您更具体并显示一些代码,我可以在您的具体情况下帮助您完成此操作。

【讨论】:

以上是关于html 选择下拉菜单宽度太大的主要内容,如果未能解决你的问题,请参考以下文章

html select 属性 下拉菜单宽度设定

选择固定宽度的下拉菜单,在 IE 中截断内容

增加引导下拉菜单宽度

如何设置 select2 下拉菜单的最小宽度和最大宽度?

用原生JS实现的一个导航下拉菜单,下拉菜单的宽度与浏览器视口的宽度一样(js+html+css)

如何在引导选择选择器中为选项(下拉菜单)设置固定宽度