REDLINE MAGAZINE | CSSで検索フォームの見た目を変更REDLINE MAGAZINEトップページへ

すべてのエントリを見る

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サンプル画像

つーことで、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様様様様

めっちゃタイムリーに続編を更新したところでした。キャプチャ、めっちゃ助かります!ほんまにありがとうございます!!てか、実はその予想通り、呼んでたりして(w

macで見るとやっぱりフォントがキレイだなぁ。羨ましいっす。今回タイトル部分なんかにメイリオも指定してみたんですけど、IE6では・・・ギザギザであんま意味ないっす。

検索フォーム部分ね、ちとSafari用のハック使ってみたんですけど、どんな感じですか?(と更に聞いてみる私)

mac欲しい、mac、mac、mac・・・。

はじめまして、山岸と申す者です。

> で、ここで問題発生で、Operaではどうしてもボタン上のテキストが消えてくれなくて仕方がないので消すのは諦めてボタン上に乗ってるテキストの位置を下げる事に。html:first-child部分のpadding指定はそのため。

との事ですが、

  input.searchbtn {
    content: "";
  }

というのを、Operaだけに読ませれば、Operaでも、input[type="submit"]の文字が消せます。

>山岸さん、はじめまして。
ありがとうございますーーーー!

さっそくcssに追記したらサクっと消えてくれました。すごい!ほんと教えていただいてありがとうございます。


はじめまして。
いろいろ調べていてこちらのページにたどり着きました。
丁度MODXを導入しているところで色々と参考にさせていただいております。

この記事で紹介されている検索フォームの見た目を変更を、自分でも試してみました。
ところが、input用の元画像より長い語句を入れて検索しようとした場合、背景画像が動いて切れてしまいます。
IE6とFFで試しましたが同じ結果でした。

こちらのサイトでも検索窓としてそのまま使われているようですので、一応ご報告まで。

>hosiさん、はじめまして。
ご指摘ありがとうございました!全然気付いてなかったです…。助かりました(滝汗)
こちらでも各ブラウザで確認してみました。IEでは切れてる状態ですね…。こちらのFirefoxでは切れずにちゃんと背景が残ったままでした。(バージョン2を使ってます)NN、Opera、Safari(win用)もFF同様背景は切れずに残ってました。

CSS側を少しいじってみたんですが、IEさんが言う事を聞いてくれない状態で、jQueryでいけるかなとも思ったんですが、背景の固定周りのCSSを入れるとどうも挙動不審な結果になってしまいました(泣)

で、応急処置として背景画像の幅を500px程に伸ばしておきました。500px以上の文字列を入れるとアウトなわけですが…。

教えてくださってありがとうございました。

修正お疲れ様です。
実は投稿する前に、古い記事だったのでお気づきになるかちょっと書き込みを迷ったのですが、すばやいですね!
昨日の時点ではIEでもFF2でも同じ挙動だったと思ったのですが、最近よくボケているのでFFの件は忘れてください。

自分で考えた対応策としてはフォームの左側の頭の部分の画像を別に用意して(#searchboxなどの大枠に背景指定)、真中はリピートで表示する方法を試してみました。
これだと画像だけどこかへ行ってしまうことがなくなって普通に使えました。
#どこかに行ってしまう検索フォームも面白かったのでちょっと寂しい気も…

IE6、FF2で確認しました。
他のブラウザではまた新たな問題を生みそうですが…
一応、ご報告まで。

>hosiさん
再びお返事ありがとうございます。
珍しく早起きしたので張り切ってコメント確認しましたw

なるほど。
背景画像を分割して別の場所の背景として指定する方法ですか~。キチっと解決させるにはその方が良さそうですね。一旦そうしておけば後でフォーム幅変更したい時にも楽に変更できますねー。しかしIEさんには本当にびっくりさせられますね(汗)こんな挙動してるなんてhosiさんに言われなきゃ絶対一生気付かなかったです。どこに流れていくんだ、お前はって感じですよね。
…検証不足、反省。
いろいろありがとうございました。




※コメント欄に「<」「>」等を含むソースを記載する場合は実体参照に変換してください。

このページの一番上へ

その他の情報など

最近のコメント

PHP オブジェクト指向の勉強
  • Red - 2010.01.08
  • hogepage - 2010.01.21
  • Red - 2010.01.22
  • - 2011.11.27
  • houseiii - 2011.11.27
Fireworks トリミング画像を一括書出 CS4編
  • Iper - 2009.06.27
  • Red - 2009.06.27
  • mala - 2011.11.17
  • Red - 2011.11.18
jQueryでボックスを上下左右中央に簡単配置
overflow を使用したボックス背景のこと
  • - 2007.12.13
  • Red - 2007.12.13
  • - 2007.12.13
  • Red - 2007.12.13
  • hj - 2011.09.23
IE6 → 透過PNG+overflow=混ぜるな危険(追記有)

メッセージを送る

こちらのメッセージ送信フォームは閉鎖させて頂きました。
御用の方は新しい方のブログ にコメント頂くか、 連絡用のフォーム もありますので、そちらからご連絡ください。