🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1499閲覧

form_withのlabel(ラベルテキスト)をclass指定してcssを適応させる方法

_chii

総合スコア50

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/11/27 10:37

編集2020/11/27 14:24

環境

macOS 10.15.5
Rails 5.2.4.2
Docker 19.03.12

前提・実現したいこと

form_withのlabel(ラベルテキスト)をclass指定してcssを適応させたい

対象のコード

こちらの下記のコードになります。

<%= form_with model: @user do |f| %> <%= f.label :メールアドレス %> <li> <%= f.email_field :email %> </li> <%= f.label :パスワード %> <li> <%= f.password_field :password %> </li> <%= f.submit "ログイン" %> <% end %>

試したこと

調べてみた結果下記のようにclass:emailを書き足してみましたが適応されず...他の方法などを検索などで探しても期待される検索結果が得られませんでした。
情報が少なくぜひご教授をして頂きたく存じます。よろしくお願い致します。

<%= form_with model: @user do |f| %> <%= f.label class:email, :メールアドレス %> <li> <%= f.email_field :email %> </li> <%= f.label :パスワード %> <li> <%= f.password_field :password %> </li> <%= f.submit "ログイン" %> <% end %>

###補足
イメージ説明

こちらの画像のように現状ログインフォームの作成を行なっています。このままだとフォームが詰まって見た目が悪いので理想としてラベルテキストにmargin-top:20pxをかけてフォームの間隔開けてきれいな見た目にしたいです。

CSSでいうと

//親要素のclassがlogin-formのため .login-form email { margin-top: 20px; }

そのためにラベルテキストにCSSをかけてフォームの間隔を空けたいです。しかし全く反応がなく画像のような状態から見た目に変化がありません...

###HTML全体
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ここは素直に f.label :emain,class: "なにがし" とし、I18nをつかって メールアドレス と表示させることをお薦めします。

理由は3つあります

  1. f.label の後に :email とするのは、validationにてemailに問題が有った時にエラー表示をしてくれるhelperがいろいろあります。それへの目印になっています。

htmlをみると <label for="user_email>メールアドレス</label> になると思います。

  1. 習離破という言葉がありますが、いまはまだ習段階だと思います。標準形を身につけてください。(習でなく修だったかも)
  2. ポートフォリオなら、基本が身についていることを示せるほうが良いでしょう

投稿2020/11/28 06:18

winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_chii

2020/11/29 05:56

ご回答ありがとうございます。 参考にさせて頂きます。
guest

0

ベストアンサー

f.label class:email, :メールアドレス

↑これを

f.label :メールアドレス,class:"email"

↑これで如何でしょうか?

投稿2020/11/27 10:45

tomtomtomtom

総合スコア563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_chii

2020/11/27 11:07

ご回答ありがとうございます。 反応がありませんでした...
tomtomtomtom

2020/11/27 11:19

f.label :email, class:"email" これで如何でしょうか?
_chii

2020/11/27 11:48

こちらも反応がありませんでした...
tomtomtomtom

2020/11/27 12:18

すいません。 ちょっとわからないのですが、 反応がないとはどのような状態でしょうか? エラーなどはでていますか? 生成されているhtmlは確認できますか?
_chii

2020/11/27 12:43

補足を追加しました!こちらの説明でなんとなく伝わりますでしょうか...
tomtomtomtom

2020/11/27 13:45

なるほど! すいません^^;ちょっと伝わらないですね^^; もうしわけありませんm(-_-)m 追加された画像部分(デザイン洒落てますね^^) の、まずはhtmlをみたいですね^^ とくに該当のf.label部分です。 お願いできますでしょうか??
_chii

2020/11/27 13:50

当該のページのHTMLの全体を説明の下部に追加しました! お褒めの言葉嬉しいです♪
tomtomtomtom

2020/11/27 14:15

なるほど えーと、言い方が悪かったと思います。 これはerbでhtmlではないように思います。 該当の画像部分のhtmlは ブラウザの ・検証ツール ・デベロッパーツール ・ページのソースを表示 などで確認出来るかと思います^^
_chii

2020/11/27 14:25

失礼しました汗 早速説明文に補足させて頂きました!
tomtomtomtom

2020/11/27 14:27

こちらも色々検証しました。 この書き方なら ``` <%= f.label :メールアドレス %> ``` ↓ ``` <label class="aaa">メールアドレス</label> ``` でよいかと思います。
_chii

2020/11/27 14:42

ありがとうございます!ただそれだとform_withだけのフォームではないような気がして... 実はポートフォリオ用のオリジナルアプリなのでコード自体もきれいにしたくて、その前まではpタグで囲っていてそれで期待するフォールの形ができていたのですがもし<label class="aaa">メールアドレス</label>でも大丈夫であれば<p>タグでも大丈夫でしょうか? <%= form_with model: @user do |f| %> <p>メールアドレス</p> <li> <%= f.email_field :email %> </li> <p.パスワード</p> <li> <%= f.password_field :password %> </li> <%= f.submit "ログイン" %> <% end %> こんな感じですが...
_chii

2020/11/27 14:43

これだとform_withとしておかしいコードという評価にならないでしょうか?
tomtomtomtom

2020/11/27 17:02

なるほどですね それなら = f.label :メールアドレス これも少しおかしいかと思います。 cf.https://railsdoc.com/form 間違っているかもしれませんが、 本来なら以下のような使い方かな???と思います。 usersテーブルにemailカラムが存在していると思いますので、 = f.label :email,class:"email" ↑これだとラベルが「メールアドレス」にならず「email」になるので そこを日本語化するのが、恐らく本来のやり方になるのでは?? と思います。
tomtomtomtom

2020/11/27 17:10

あと、簡単に使うなら = f.label :emil,"メールアドレス",class:"email" かなと、、、 何れにせよ、usersテーブルにemailカラムがあることが大前提です。 なるべく質問者様の形を崩さずにと考えていたのですが 結果的にだいぶ崩れてしまうかもで申し訳ません。
_chii

2020/11/28 03:11

そうですよね…ご丁寧ありがとうございます。でもこれだとCSSを適応させることも難しいですよね… テキストを〈p〉タグで囲んでも動作しますがコードを見られる方からしたらそれでも大丈夫でしょうか?
tomtomtomtom

2020/11/28 06:48

? classがあるので簡単にcssを適応できますよ?
tomtomtomtom

2020/11/28 07:03

>コードを見られる方からしたらそれでも大丈夫でしょうか? 何をもって大丈夫とするのかによるかと思います。 動けばいいと思ってる人が見たのなら大丈夫と思います。 =f.labelやform_withの理解などを見たい人からすれば 大丈夫とは言えないかと、、、
tomtomtomtom

2020/11/28 07:09

それと、 = f.label :emil,"メールアドレス"としておいて、 cssに .login-form label{ margin-top: 20px; } これでもいいと思います。
_chii

2020/11/29 05:56

ご丁寧に本当にありがとうございました。 なんとか形として成立させることができました!
tomtomtomtom

2020/11/29 10:05

問題が解決してよかったと思います。 ほっとしました。 また何かありましたら宜しくお願いいたします^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問