Pertanyaan Rails: kelas CSS khusus halaman dalam tata letak yang umum


Bagaimana cara menetapkan kelas CSS khusus-halaman ke tag yang digunakan dalam tata-letak umum?

Saya punya application.html.erb file tata letak, yang memuat application.css.scss  <%= stylesheet_link_tag "application". . . %>, yang, pada gilirannya, menggunakan semua file CSS dalam direktori (ada satu custom.css.scss dalam hal ini).

Saya memiliki empat halaman statis dan satu tata letak. Saya ingin laman Beranda sedikit berbeda dari yang lain: tambahkan kelas ke badan untuk latar belakang laman penuh, jadikan navigasi berbagai warna, dll.

Jadi, apa yang saya application.html.erb tata letak terlihat seperti:

<DOCTYPE! html>
<html>
  <head>
    ·
    ·
  </head>
  <body>
    <header>
      ·
      ·
    </header>
    ·
    <%= yield %>
    ·
  </body>
</html>

Dan saya home.html.erb:

<div>
  Content unique for this page
</div>

Jadi saya ingin menugaskan beberapa kelas ke <body> dan <header> tag, tapi hanya di halaman Beranda.

Apa cara terbaik untuk melakukan ini?

(Saya berpikir untuk membuat tata letak individual untuk laman Beranda (lalu CSS individual untuk laman Beranda, dll. Namun saya yakin harus ada cara lain yang lebih baik).


5
2017-11-25 07:47


asal


Jawaban:


kupikir content_for akan baik untuk ini.

Dalam tata letak Anda application.html.erb:

<DOCTYPE! html>
<html>
  <head>
    ·
    ·
  </head>
  <body class="<%= content_for :body_class %>">
    <header class="<%= content_for :header_class %>">
      ·
      ·
    </header>
    ·
    <%= yield %>
    ·
  </body>
</html>

Dalam penglihatan home.html.erb:

<% content_for :body_class, 'class1' %>
<% content_for :header_class, 'class2' %>

<div>
  Content unique for this page
</div>

Ini jauh lebih fleksibel dan lebih mudah daripada menggunakan conditional dan memeriksa pengontrol saat ini dengan tindakan.

http://guides.rubyonrails.org/layouts_and_rendering.html#using-the-content-for-method


8
2017-11-25 09:08