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

Make an element's width the same as another element

我在这里使用 rails-jquery-自动完成 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

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

回答我自己的问题:

事实证明,Gem's GitHub doc README page 中记录了解决方案的一个关键要素。前几次我阅读文档时忽略了此信息,因为我误解了(将其视为输入框,而不是下拉列表,但实际上他们在谈论下拉列表)。

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

<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 是 'search-form'。

在railshtml.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%;
}

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

作为自动完成输入字段的另一个元素应该已经与父元素匹配,所以现在两个自动完成元素应该具有相同的宽度。