WordPressのウィジェットや関数get_search_form()
で出力される検索フォームをレスポンシブに対応するSassとCSSのコードを公開いたします。
ブラウザは最新のモノしか考慮していないのでご了承ください。
WordPressのデフォルトの検索フォーム
対応するHTML(PHP)のコードはCodexに書いてある、デフォルトで出力されるコードとなります。以下のコードですね(HML5版のみです)。
<form role="search" method="get" class="search-form" action="<?php echo home_url( '/' ); ?>">
<label>
<span class="screen-reader-text"><?php echo _x( 'Search for:', 'label' ) ?></span>
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
</label>
<input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>
この検索フォームをレスポンシブ化します。
WordPressの検索フォームをレスポンシブ化するSassコード
こちらがSassコードです。Gistにて公開しております。変数でフォームの高さ、フォントサイズ、ボタンの色やトランジションの設定を変更できるようにしていますので、適宜変更し使用してみてください。
「searchform.php」の方は、デフォルトの検索フォームのボタン要素をinputからbuttonに変更したバージョンです。buttonならアイコンフォントなどが扱いやすくなるため、おまけとしてPHPコードを追加しています。
CSS版はこちら
SassをCSS化したものはこちらになります。
.search-form {
overflow: hidden;
clear: both;
position: relative;
width: 100%;
height: 48px;
box-sizing: border-box;
}
.search-form label,
.search-form input,
.search-form button {
height: 100%;
box-sizing: border-box;
}
.search-form input,
.search-form button {
display: block;
position: absolute;
top: 0;
font-size: 16px;
}
.search-form label {
display: block;
position: relative;
margin-right: 24%;
}
.search-form input {
margin: 0;
}
.search-form input:not([type="submit"]) {
left: 0;
padding: 4px 16px;
width: 100%;
border: solid 1px #ccc;
border-right: none;
border-radius: 4px 0 0 4px;
}
.search-form button,
.search-form input[type="submit"] {
right: 0;
width: 24%;
padding: 0;
line-height: 48px;
color: #fff;
border: none;
border-radius: 0 4px 4px 0;
background: #2f78d0;
transition: all 0.3s ease-in-out;
}
.search-form button:hover,
.search-form input[type="submit"]:hover {
background: #508ed8;
}
.search-form button > * {
line-height: 48px;
}
.search-form .screen-reader-text {
clip: rect(1px 1px 1px 1px);
clip: rect(1px, 1px, 1px, 1px);
height: 1px;
overflow: hidden;
position: absolute !important;
width: 1px;
}