CSSで検索フォームの見た目を変更
ネタがなくなってきたので、このブログ内のデザインネタでも。
タイトルの通り、検索フォームをcssで見た目を変えてしまおうという内容。
このエントリの右上部分に検索フォームを置いてるわけですが、とりあえずまずは変更する見た目の画像を用意。私が用意したのはこのinputのテキストフォーム用の画像とその部分のhover時、focus時用の画像(IE6では関係ないんですが)inputのボタン部分の画像の3つ。
こいつが通常時のフォームの背景画像。
こいつがhover時、focus時の画像。
こいつがボタン(のつもり)
元々ボタン代わりの虫眼鏡アイコンはフォーム部分に被せるつもりだったのでそのつもりで書き出し。ということでこんな中途半端な感じの画像になっとります。
XHTMLソース
<div id="searchbox">
<form action="xxxxxx">
<fieldset>
<legend class="none">Search Redline Magazine</legend>
・・・略・・・
<input class="text" type="text" name="q" maxlength="255" value="" />
<input type="submit" value="検索" class="searchbtn" />
</fieldset>
</form>
<!--/searchbox --></div>
CSSソース
まずテキストを入力する部分。#searchboxにはposition:relative;を予め指定してあります。また上のソースの通り、テキストのinputにはclass="text"としてあります。
#searchbox input.text{
position:absolute;
top:12px;
left:300px;
width:197px;
height:43px;
background:url(images/temp/search_bg.gif) no-repeat;
border:none;
padding:13px 6px 0px 8px;
}
html:first-child #searchbox input.text{
padding:0px 6px 0px 8px;
}
#searchbox input.text:hover,#searchbox input.text:focus{
background:url(images/temp/search_bg_o.gif) no-repeat;
}
こんな感じで、absolute,top,leftは単に位置合わせ。その後、画像に合わせて幅、高さをセットして背景画像を表示。そのままではinputのborderが表示されてしまうのでnoneで消す。その後のpaddingは画像の中央部分でテキストを入力してる感じに持ってくるためにちょこちょこ細工。画像とサイズ次第ではこれは指定しなくてもいけるはず。
html:first-childの部分はOperaでちょっと位置が合わなかったのでハック。単にpaddingの指定をOpera用に上書きしただけ。その下の:hoverと:focusの指定でマウスが上に乗っかったり、フォーカスした時の画像に差替え。
で、続き。ボタン部分のinputにはclass="searchbtn"としてあります。
#searchbox input.searchbtn{
position:absolute;
top:15px;
left:490px;
width:43px;
height:43px;
background:url(images/temp/icon_search.gif) 0px -3px no-repeat;
border:none;
text-indent:-9999px;
cursor:pointer;
}
html:first-child #searchbox input.searchbtn{
padding:41px 0px 10px 0px;
}
ここでもabsolute,top,leftは単に位置合わせ。その後ボタン部分の画像に合わせて幅・高さをセットして背景表示。その後inputのborderとボタン上のテキストをなくす。で、普通の「検索」ボタンじゃなくなるわけで分かりにくいかなーということで、カーソルをpointerに指定。これでアイコン上に来た時にマウスカーソルが指のマークに。
で、ここで問題発生で、Operaではどうしてもボタン上のテキストが消えてくれなくて仕方がないので消すのは諦めてボタン上に乗ってるテキストの位置を下げる事に。html:first-child部分のpadding指定はそのため。
つーことで、Operaだとこんな感じになってるはず。多分。まぁ正直こんな面倒な事しなくてもボタンなしでもEnterキーを押せばいいだけの話なんですが、気分的に。
(070404追記)
このオペラのボタン上テキストについて、コメント欄にて山岸和利さんに「オペラにのみcontent: "";
を指定すればよい」と教えていただき、無事解決しました。
山岸さん、ありがとうございます。
デメリットは満載
これをするとCSSが有効、画像無効の場合、なーんにも表示されません。アクセシビリティ重視の方は絶対使えません。後は「虫眼鏡=検索」という方程式が頭の中にないユーザーの方にはなんのこっちゃ分かりません。
メリットはうまくいった時に自己満足を得られる、デザインにあわせた検索フォームを設置できる・・・くらい。つーことは実用性は低い。単にこういうのやりたかっただけというのが本音。
検証したブラウザはwinでIE6,IE7,Firefox,NN,Opera。macは・・・只今検証中。(友人が)タイミング良く友人のmacが死亡したので検証未。
<< 画像置換問題その後。 | 検索フォーム続編:Safari だと酷すぎる >>
トラックバック
このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/123
コメント (8)
リニュお疲れさまです。
http://www.nishiz.com/red/red_line3.png
なんか呼ばれた気がしたので、キャプっておきました。
検索ボックスのある右上、Safariで見たら予想通りデフォルトボタンになってますけど、入力ボックスと重なっているあたり、斬新でこれはこれで驚きです。
hoverは効いてますよん。
投稿者: corns | 2007年03月26日 15:27
>corns様様様様
めっちゃタイムリーに続編を更新したところでした。キャプチャ、めっちゃ助かります!ほんまにありがとうございます!!てか、実はその予想通り、呼んでたりして(w
macで見るとやっぱりフォントがキレイだなぁ。羨ましいっす。今回タイトル部分なんかにメイリオも指定してみたんですけど、IE6では・・・ギザギザであんま意味ないっす。
検索フォーム部分ね、ちとSafari用のハック使ってみたんですけど、どんな感じですか?(と更に聞いてみる私)
mac欲しい、mac、mac、mac・・・。
投稿者: Red | 2007年03月26日 16:21
はじめまして、山岸と申す者です。
> で、ここで問題発生で、Operaではどうしてもボタン上のテキストが消えてくれなくて仕方がないので消すのは諦めてボタン上に乗ってるテキストの位置を下げる事に。html:first-child部分のpadding指定はそのため。
との事ですが、
input.searchbtn {
content: "";
}
というのを、Operaだけに読ませれば、Operaでも、input[type="submit"]の文字が消せます。
投稿者: 山岸和利 | 2007年04月04日 17:35
>山岸さん、はじめまして。
ありがとうございますーーーー!
さっそくcssに追記したらサクっと消えてくれました。すごい!ほんと教えていただいてありがとうございます。
投稿者: Red | 2007年04月04日 19:38
はじめまして。
いろいろ調べていてこちらのページにたどり着きました。
丁度MODXを導入しているところで色々と参考にさせていただいております。
この記事で紹介されている検索フォームの見た目を変更を、自分でも試してみました。
ところが、input用の元画像より長い語句を入れて検索しようとした場合、背景画像が動いて切れてしまいます。
IE6とFFで試しましたが同じ結果でした。
こちらのサイトでも検索窓としてそのまま使われているようですので、一応ご報告まで。
投稿者: hosi | 2007年09月17日 02:26
>hosiさん、はじめまして。
ご指摘ありがとうございました!全然気付いてなかったです…。助かりました(滝汗)
こちらでも各ブラウザで確認してみました。IEでは切れてる状態ですね…。こちらのFirefoxでは切れずにちゃんと背景が残ったままでした。(バージョン2を使ってます)NN、Opera、Safari(win用)もFF同様背景は切れずに残ってました。
CSS側を少しいじってみたんですが、IEさんが言う事を聞いてくれない状態で、jQueryでいけるかなとも思ったんですが、背景の固定周りのCSSを入れるとどうも挙動不審な結果になってしまいました(泣)
で、応急処置として背景画像の幅を500px程に伸ばしておきました。500px以上の文字列を入れるとアウトなわけですが…。
教えてくださってありがとうございました。
投稿者: Red | 2007年09月17日 09:33
修正お疲れ様です。
実は投稿する前に、古い記事だったのでお気づきになるかちょっと書き込みを迷ったのですが、すばやいですね!
昨日の時点ではIEでもFF2でも同じ挙動だったと思ったのですが、最近よくボケているのでFFの件は忘れてください。
自分で考えた対応策としてはフォームの左側の頭の部分の画像を別に用意して(#searchboxなどの大枠に背景指定)、真中はリピートで表示する方法を試してみました。
これだと画像だけどこかへ行ってしまうことがなくなって普通に使えました。
#どこかに行ってしまう検索フォームも面白かったのでちょっと寂しい気も…
IE6、FF2で確認しました。
他のブラウザではまた新たな問題を生みそうですが…
一応、ご報告まで。
投稿者: hosi | 2007年09月17日 13:21
>hosiさん
再びお返事ありがとうございます。
珍しく早起きしたので張り切ってコメント確認しましたw
なるほど。
背景画像を分割して別の場所の背景として指定する方法ですか~。キチっと解決させるにはその方が良さそうですね。一旦そうしておけば後でフォーム幅変更したい時にも楽に変更できますねー。しかしIEさんには本当にびっくりさせられますね(汗)こんな挙動してるなんてhosiさんに言われなきゃ絶対一生気付かなかったです。どこに流れていくんだ、お前はって感じですよね。
…検証不足、反省。
いろいろありがとうございました。
投稿者: Red | 2007年09月17日 17:00