Турболинки и классы css, применяемые к html-тегам

В моих HTML-тегах определены классы для определения правильного макета.

<html class="one-column">

Это становится проблемой с Turbolinks, поскольку обновляются только теги body и title.

... он поддерживает текущий экземпляр страницы и заменяет только тело и заголовок в заголовке.

Это означает, что класс HTML не меняется при переходе со страниц с one-column на страницы с two-column классами.

Как мне обойти это? Я не могу применить имена классов к телу.


person Jumbalaya Wanton    schedule 19.01.2014    source источник


Ответы (2)


Вся цель Tubolinks не в том, чтобы загружать весь DOM при каждом запросе. Тег html, находящийся в верхней части DOM, меняет свои атрибуты (например, class) означает, что его дочерние элементы также должны быть признаны недействительными. Таким образом, это превосходит цель Turbolinks. Вы можете полностью отключить Turbolinks, как указано здесь, или вы можете переместить класс в тело, что должно сработать. Почему на самом деле вы не можете переместить его в тело?

person lipanski    schedule 19.01.2014

Почему бы вам не изменить layout?

Причина, по которой ваша текущая реализация не работает, заключается в том, что это взлом. Стили классов CSS предназначены для оформления отдельных элементов, а не всей страницы.

Что делать, если по какой-то причине страница отображается без тега <HTML>? Ваши стили были бы несуществующими


Макеты

Расширяемым способом решения этой проблемы будет изменение макета в зависимости от того, что вы делаете. Вот как бы я это сделал:

#app/views/layouts/application.html.erb
<html>
    <!-- Default Styling Here -->
</html>

#app/views/layouts/action.html.erb
<html>
    <!-- Other Styling  -->
</html>

#app/controllers/your_controller.rb
layout "action", :only => [ :index, :show ]

Макеты не зависят от Турболлинков (это HTML), что означает, что вы можете загружать их столько раз, сколько вам нужно.

person Richard Peck    schedule 19.01.2014
comment
Я думаю, вы меня неправильно поняли. У меня уже есть разные макеты. Ваше решение не работает, потому что при изменении макета Trubolinks не обновляет узел html, поэтому имя класса остается неизменным. - person Jumbalaya Wanton; 21.01.2014
comment
Спасибо за комментарий! Мое решение состоит не в том, чтобы брать ваш пример и помещать его в разные макеты. Стилизация тега ‹html› не считается хорошей практикой (именно по этой причине), поэтому я рекомендую использовать разные макеты для создания разных структур стилей для каждого из них. Таким образом, вы можете динамически менять стиль, не мешая турболинкам. - person Richard Peck; 21.01.2014