【问题标题】:Is there a way to have the width of a select input field be the same is its value rather then the longest option有没有办法让选择输入字段的宽度与其值相同,而不是最长的选项
【发布时间】:2023-01-05 00:53:36
【问题描述】:

这是一个带有四个选项的示例选择:

<select name="cars" id="cars" class="border-2 rounded-md m-9 border-black">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="mercedes">Mercedes</option>
    <option value="audi">Audi</option>
</select>

这是它的呈现方式:

“沃尔沃”和箭头之间的空格是为了让最长的选项(梅赛德斯)适合:

我想要的是整个选择字段的宽度正好适合所选选项,如下例所示:

我尝试将选择字段的宽度设置为width: fit。我还尝试使用 javascript 获取所选选项的宽度,然后将选择字段的宽度设置为该宽度。这些方法都不适用于我的情况,而且我无法在网上找到与我有相同问题的人。

【问题讨论】:

    标签: javascript html css forms svelte


    【解决方案1】:

    每次选择新选项时创建一个函数来调整输入大小

    // resize on initial load
    document.querySelectorAll("select").forEach(resizeSelect)
    
    // delegated listener on change
    document.body.addEventListener("change", (e) => {
        if (e.target.matches("select")) {
            resizeSelect(e.target)
        }
    })
    
    function resizeSelect(sel) {
      let tempOption = document.createElement('option');
      tempOption.textContent = sel.selectedOptions[0].textContent;
    
      let tempSelect = document.createElement('select');
      tempSelect.style.visibility = "hidden";
      tempSelect.style.position = "fixed"
      tempSelect.appendChild(tempOption);
      
      sel.after(tempSelect);
      sel.style.width = `${+tempSelect.clientWidth + 4}px`;
      tempSelect.remove();
    }
    <select name="cars" id="cars" class="border-2 rounded-md m-9 border-black">
        <option value="volvo">Volvo</option>
        <option value="saab">Saab</option>
        <option value="mercedes">Mercedes</option>
        <option value="audi">Audi</option>
    </select>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-22
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      相关资源
      最近更新 更多