こんにちは。maiです。
Ruby on Railsにはいろいろと便利機能がありますが、
フォームでvalidationに引っかかると該当箇所が赤く強調されるというのもその一つですね。
ただ赤く強調されるだけなら、とっても便利な機能がありますで終了なのですが、
この機能、該当箇所を強調するだけじゃなく、改行まで入っちゃうのです。

 

sample:元々の表示

28日記事のサンプル画像1

 

sample:エラーになったときの表示

28日記事のサンプル画像2

かなりカッコ悪いことになっています。
サイトのクオリティを考えれば、
ぜひとも元の表示のように1行の状態で赤枠が出る状態にしたいですね。

そこで、アラートが表示されている状態でhtmlのソースを覗いてみると、

<div class="fieldWithErrors"><input id="hoge" name="hoge[hoge]" type="text" value="" /></div>

と書かれています。
犯人は<div>ですね。
<div>はブロック要素なので、閉じた後に改行されるのは仕様です。
デザイン的な制御はスタイルシートの仕事なので、
スタイルシートで「class="fieldWithErrors"」を探してみると

.fieldWithErrors {
  padding: 2px;
  background-color: red;
  display: table;
}

デフォルトではこんなカンジになってます。
これを下のように書き換えます。

.fieldWithErrors {
  padding: 3px;
  border:2px solid red;
  display: inline;
}

これで表示を確認してみると…

28日記事のサンプル画像3

いいカンジ。

PCサイトだけならこれで完了でいいのですが、
mobileサイトはスタイルシートですべて解決もちょっと難しいところ。
そもそも、該当箇所が<div>ではなくて<span>でくくられれば、
勝手に改行されることはなくなります。

そこで、environment.rbの最後の行あたりに以下の一行を追加します。

ActionView::Base.field_error_proc = Proc.new {|html_tag, instance|  %(<span class="fieldWithErrors">#{html_tag}</span>)}

これで挿入されるタグが<span>になります。

28日記事のサンプル画像4

<div>の時はあった上下の余白もなくなってさらにいいカンジ。
(上下の余白はスタイルシートでも制御できますけど)

<span>は元々インライン要素なので、
さっき手直ししたスタイルシートの「display:inline」を削除します。
別に書いてあっても問題はありませんが、
いらないものは取ってしまいましょう。

.fieldWithErrors {
  padding: 3px;
  border:2px solid red;
}

これで完了。
(あってもなくてもいい部分だったので、表示は変わりません。)

コメント (0)  |トラックバック (0)

ブックマークに追加する

トラックバック URL
この記事にコメントをする
ニックネーム:
メールアドレス:
URL:


.
web開発ならKBMJ
Rubyでのwebシステム開発は
実績豊富なKBMJにお任せ下さい
iPhone開発
iPhone開発は
KBMJにお任せ下さい
ブラウザゲーム エインヘリアル
ブラウザゲーム「エインへリアル」
αテスター募集中
オープンソースECパッケージ エレコマ
オープンソースECパッケージ
「エレコマ」

プロフィール

imai
imai
rubyどころか開発すらも始めたばかりな超初心者のrailsとの格闘メモリー。
初心者がつまづきそうなよくあるトラブルとか、意味不明としか思えない用語を初心者レベルに翻訳したりとかとかとか。

最近チェックした記事

最新記事

アーカイブ

アクセスランキング

KBMJのWebソリューション
Ruby on railsの開発ならKBMJ
株式会社ケイビーエムジェイ