代码之家  ›  专栏  ›  技术社区  ›  Henry Yang

使一个元素的宽度与另一个元素的宽度相同

  •  -1
  • Henry Yang  · 技术社区  · 8 年前

    我在这里使用rails jquery autocomplete gem: https://github.com/bigtunacan/rails-jquery-autocomplete

    以上gem的演示如下: https://rocky-thicket-9286.herokuapp.com/

    在我的应用程序中,我需要使自动完成下拉列表的宽度与输入字段的宽度相同,输入字段是一个响应组件,其宽度可以变化。

    我怎样才能做到这一点?

    例如,你能告诉我你将如何修改 https://rocky-thicket-9286.herokuapp.com/ 使其自动完成下拉列表的宽度与其输入字段的宽度相同?

    是否可以在纯CSS或JavaScript中实现这一点?

    我的当前代码:

    <script type="text/javascript">
      var width = document.getElementById('search').offsetWidth;
      // won't work, document.getElementById('ui-id-1') gives null, but it shouldn't because I wait til window loaded as you can see below
      window.onload = document.getElementById('ui-id-1').style.width = width;
    </script>
    

    更新1

    如下图所示,搜索字段的宽度和自动完成下拉列表不同:

    different width

    1 回复  |  直到 8 年前
        1
  •  0
  •   Henry Yang    8 年前

    回答我自己的问题:

    事实证明,解决方案的一个关键要素记录在 Gem's GitHub doc README page 。最初几次我读文档时,我忽略了这些信息,因为我误解了(把它看作是输入框,不是下拉列表,但实际上他们在谈论下拉列表)。

    使用演示示例 the gems's doc page ,了解上述信息后,可以将“自动完成”下拉列表放置在表单元素中,并将“自动完成”的宽度设置为100%。输入框也位于表单元素下,因此现在您应该能够使自动完成输入框和下拉列表具有相同的宽度。在erb处理后的HTML中,这意味着更改:

    <input type="search" name="search" id="search" class="search-query" placeholder="namesearch" data-autocomplete="/foods/autocomplete_food_name">
    

    对此:

    <input type="search" name="search" id="search" class="search-query" placeholder="namesearch" data-autocomplete="/foods/autocomplete_food_name" data-append-to='search-form'>
    

    因为表单元素的元素ID是“搜索表单”。

    在rails html中。erb,这意味着从:

    <%= f.autocomplete_field :name, autocomplete_food_name_foods_path %>
    

    收件人:

    <%= f.autocomplete_field :name, autocomplete_food_name_foods_path, append_to: '#search-form' %>
    

    自动完成下拉列表的css为:

    .ui-autocomplete {
      max-width: 100%;
    }
    

    这将使“自动完成”下拉列表的宽度与其父级(即表单元素)的宽度相匹配

    另一个元素是自动完成输入字段,它应该已经匹配父元素,因此现在两个自动完成元素的宽度应该相同。