Rails中Turbo Stream prepend元素未进目标div导致CSS失效的问题
解决Turbo Stream插入元素不在网格布局内的问题
问题根源是你当前的Turbo Stream把新实例插入到了turbo frame的最外层(也就是网格容器<div class="my_fifteen_list">的前面),而非网格容器内部,导致无法应用Grid布局。
修复步骤:
给网格容器添加唯一ID
在index.html.erb中,给my_fifteen_list的div加上id属性,让Turbo Stream能精准定位到容器内部:<div> <h1>Mon top 15</h1> <%= turbo_frame_tag "myfifteens" do %> <!-- 添加id="my_fifteen_list" --> <div class="my_fifteen_list" id="my_fifteen_list"> <%= render @myfifteens %> <% (15 - @myfifteens.count).times do %> <%= link_to new_year_myfifteen_path(@year), remote: true, data: { turbo_frame: "modal" } do %> <div class='add_fifteen'> <%= image_tag "add_miss.svg" %> </div> <% end %> <% end %> </div> <% end %> </div>修改Turbo Stream的插入目标
在create.turbo_stream.html.erb中,把prepend的目标从"myfifteens"(turbo frame)改成"my_fifteen_list"(网格容器),这样新实例会被插入到网格容器的顶部,成为Grid布局的子元素:<%= turbo_stream.prepend "my_fifteen_list", @myfifteen %> <%= turbo_stream.update "modal", "" %>
原理说明:
- 原代码中
turbo_stream.prepend "myfifteens"会把新元素插入到<turbo-frame id="myfifteens">的所有子元素最前面,也就是网格容器的上方,自然无法继承Grid布局。 - 修改后,目标指向网格容器内部,新实例会成为网格的直接子元素,自动应用
grid-template-columns: repeat(3, 1fr)的布局规则。
内容的提问来源于stack exchange,提问作者Alice Laurin
相关产品推荐
相关产品推荐

