Category: HTML5

CSS3
winmonaye

Retinaディスプレイ対応のレスポンシブなメニュー

この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している場合があります。オリジナルの記事はここよりご覧いただけます。 オリジナル記事へのリンク 3つのレイアウトで様々なブラウザ画面サイズに対応する、レスポンシブでタッチフレンドリーなRetinaディスプレイ対応のメニュー作成方法 今日は、ボーダーランズ(Borderlands)ゲームの武器メーカーMaliwanが打ち出す様々な色からインスピレーションを得た、多彩なRetina対応のレスポンシブなメニューを作成していきます。このメニューはブラウザのウィンドウサイズに合わせ、自動で次の3つの異なるレイアウトのうちの1つに変化します。「デスクトップ」向けの横1列表示バージョン、タブレット向けに最適化された縦2列表示バージョン、そして最後は、ナビゲーションを表示/非表示するためのメニューボタンを備える、より小さな画面のモバイル向けのバージョンです。 メニューを完全Retina対応とするため、アイコンフォントを使います。アイコンフォントを使うと、リサイズ時にメニューのアイコンの品質が低下する(ボケて滲んで見えたりする)ことがなくなります。 個々のCSSプロパティをサポートするブラウザ上でのみ実現される効果もありますので、ご注意ください。 アイコンフォントを準備する 独自のアイコンフォントを作るというと少々面倒な感じがするかもしれませんが、IcoMoonなどのツールを使えば、要はアイコンを作ってそのツールにインポートするだけです。アイコンフォントは他のあらゆるフォントと同様に機能するため、色の変更やサイズの指定が簡単にでき、品質が低下することもありません。異なる画面の解像度に合わせてアイコンを用意する必要がなくなり、Retina対応デバイスに最適です。 まず最初に、メニュー用のアイコンを作る必要があります。私はイラストレータを使いますが、例えばInkscapeなどのベクタグラフィックスエディタであればどれでも構いません。アイコンをそれぞれ作成したら、それら一つ一つをSVGファイルに書き出します。アイコンをあらゆるブラウザで適切に機能させるためには、各アイコンごとに、すべてのラインを完全にオブジェクトに変換し、それらのオブジェクトをすべて統合して1つの大きな形にする必要があります。すべてをSVGファイルに書き出したら、それらのファイルをIcoMoonアプリケーションツールにインポートします。 IcoMoonから提供されている膨大なライブラリのアイコンを使って、作成したフォントの見栄えをさらに良くすることもできます。必要なすべてのアイコンが揃ったら、ページ下の「Font」ボタンをクリックし、詳細設定のページに移ります。このページでは、エンコーディングの設定を選ぶことができるほか、各アイコンに文字を付けるかどうかの選択や、Private Use Area(画面を見た第三者によるアイコンのアウトプットを禁止する)を使用するかどうかの選択ができます。私個人としては、デフォルト設定での使用をお勧めします。それで十分機能するからです。 「Download」をクリックすると、4つのフォーマット(SVG、EOT、TTF、WOFF)のファイルがまとめられたZipファイル1つと、CSSファイル、デモページが生成されます。 アイコンを使えるようにするため最初にしなくてはいけないのは、IcoMoonから提供されたCSSをコピーして、自分のCSSファイルのトップにコピーすることです。また、フォントフォルダをコピーするのも忘れないようにしましょう。「a little “hack” to make fonts look nicer on Chrome Windows」も併せて読まれることをお勧めします。 メニューのHTML 今回のナビゲーションのHTML記述は以下のような感じです。 アイコンフォントを使うため、「icon-iconname」クラスをi要素(span要素でも同様に機能します)の中で用います。また、no-jsクラスをbodyに追加していますが、Modernizrを使った場合にはこれはjsとなりますので注意してください。これは、ユーザがJavaScriptを無効にしていた場合にメニューを開いたままにしておくためのものです。 CSSとJAVASCRIPT ここでは、CSS3プロパティにベンダープレフィックスを付けませんが、ファイルの中にはベンダープレフィックスが付いたものがあることに注意してください。 すべての画面サイズに適用されるグローバルCSSは次のようになります。 最初に、ナビゲーション全体に対してちょっとしたトランジション効果を追加してみます。ホバーされているものを除き、その他のすべてのアイテムの不透明度を下げるというものです。 次に、すべてのアイテムに対してちょっと素敵な感じの背景色を追加してみたいと思います。以下の記述では、リストアイテムを選択するのにnth-childを使っています。これで、好きなだけリストアイテムを追加でき、色指定のコードも追加した分だけ繰り返し実行されます。 Media QueryのMin-width属性を使うことで、800px(50em:bodyのフォントサイズが15pxで)よりも大きい画面を対象として、リストを横一列のナビゲーションに変化させることが可能になります。 継続してnth-childの選択テクニックを使い、メニューアイテム毎に異なる色を持つ4pxのボーダーを追加します。このテクニックを:hover疑似クラスに適用するだけでなく、タッチデバイスやキーボード・アクセスにも対応できるよう:focusと:active疑似クラスにも適用します。 次に、アイコンとテキストを配置します。 ホバー時にアイテムの高さをアニメーションで変更するよう設定します。 次にアイコンの配置位置を指定し、かつアニメーションによる高さの変更にも対応できるようにします。 視覚的な効果をつけるためにボックスの影をアニメーションで表示し、その影のサイズを0.8emから0に変更、また色も透明からより不透明度の高い色へと変更します。ここで最初のmedia-queryを閉じます。 ここで2つ目のmedia queryを使って、800px~980pxのサイズの画面向けに若干調整を施します。 これで「デスクトップ」バージョンの設定が終わり(1024px以上の画面を持つタブレットが続々と出てくる今日、その辺について大きな疑問をお抱えだとは思いますが)、800pxより小さい画面(ここでは49.938emに相当)用に、media query のmax-width属性を使って「グローバル」CSSの処理をします。 520px(32.5em)~799px(49.938em)のサイズの画面には、2桁3行のレイアウトのメニューを表示するようにします。ユーザーが各アイテムを容易に「タップ」できるようにパディングを追加し、また、アイコンを左側、テキストを右側に表示させるようにします。 大きな画面用のアニメーションを小さい画面にフィットさせるのはかなり厄介なため、より簡単かつ慎重なやり方でボーダーをシンプルに表示させることにします。ここでmedia queryを閉じます。 ここで再度、より小さな画面用にフォントサイズと幅を指定します。 非常に小さな画面についてはナビゲーションを非表示にしておき、ユーザがクリックするとナビゲーションを表示する「メニュー」ボタンを表示させるようにします。JavaScriptのコードでこれを実現します。 HTMLをすっきりさせるために「メニュー」ボタンを作り、JavaScriptを使ってDOMツリー内に挿入するという方法を取りました。changeClassファンクションにより、ユーザがボタンをクリックした際クラスがactive/クラスなしの間で切り替わります。 小さい画面向けバージョンのために必要なものがすべて揃ましたので、以降CSSでスタイルを指定していきます。以下は、メニューボタンのスタイルを指定する記述です。 デフォルトでメニューボタンは非表示になっています。サイズが519px (32.438em)以下の画面向けには、このボタンを表示させることにします。 ボタンがクリックされると、ナビゲーションの高さをアニメーションで変更するように指定します。ナビゲーションを閉じるときのためには高さを0em、開くときのためには最大の高さとして30emを指定します。JavaScriptが有効になっていない場合には、ボタンが表示されないため、no-jsクラスを使って常にナビゲーションを表示させるようにします。 JavaScriptが有効になっている際には、デフォルトでメニューを非表示にしておき、ユーザがボタンをクリックすると(activeクラスを取得し)表示されるようにします。 より小さなサイズの画面には、アイコンを左側、テキストを右側に持つアイテムから成る縦1列のリスト形式でナビゲーションを表示させるようにします。 素敵な色付きの8pxのボーダーも各アイテムの左側に追加します。 デスクトップ上で小さな画面用のバージョンをテストした場合にはナビゲーションは美しく表示されますが、モバイルデバイス上だとアイテムをタップするのが難しいかもしれません。Modernizrを使えば、デバイスのタッチ機能の検出が可能です。デバイスにタッチ機能があれば、touchクラスがbodyに追加されます。このクラスを使うことで、ナビゲーションアイテムを少し拡大させることができ、ユーザがより簡単にタップできるようになるため、タッチデバイス上での体験レベルが向上します。ここで最後のmedia queryを閉じます。 これでデスクトップ/タブレット/モバイルデバイス上で快適に機能するタッチフレンドリーなRetina対応のナビゲーションの完成です。皆さんに気に入っていただけると嬉しいです!

詳細を読む »
CSS
winmonaye

第1弾:デザイン画像を稼働中のWebページに組み入れる方法

仕入れたデザイン画像を稼働中のウェブページに適用するのに苦労することはありませんか?ウェブ開発のすべり出しが順調であるにも関わらず、デザイン設計のある部分でつまづくことは? wireframes はあなたにとってコーディングによる設計よりも簡単?ローディング速度が遅くメンテの難しいwebの開発に満足できますか? 多くのデザイナーたちが自分のデザイン画像を稼働中のHTML/CSS web ページに上手く変換できません( 中にはコーディングすら全くしない人もいます)。大抵の場合、その理由はデザイン設計のアプローチと、1つの命令行を書き込む前のプロセスに対する考え方に問題があるからです。 噂とは裏腹にCSSは難しい言語ではありませんし、web ページやweb サイトの開発も難しくある必要はありません。多くの場合、問題は基礎構造の開発前に細かい部分を気にして混乱してしまうところにあります。またデザインのうち、コードを複雑化するような軽微で些細な部分の処理に捕われてしまうことも問題要因の一つです。 この記事は、http://www.onextrapixel.com/の許可を得て、翻訳しています。一部変更して翻訳している場合もあります。オリジナルの記事はここよりご覧いただけます。 デモにリンク オリジナルの記事 この投稿では、皆様に自由にダウンロードできる試供デザインを閲覧し、そのデザインを稼働中のweb ページに組み入れる方法を見ていただきます。この投稿では私は簡潔なコードを用いますが、デザイン・テンプレートに付いたオリジナルコード同様、ページを立ち上げるために私が使用したコードをダウンロードしていただけます。この投稿自体は、主にデザイン設計のための思考過程に重点をおいて進めていきます。 ダウンロード The Artificial Casting テンプレート 下のデザインをご覧ください。これらはSmashing Magazinesから無料でダウンロードできます(当ページの3つ目のテンプレート)。 テンプレートクリエーターによる設計デモをご覧になり、上にある私のデモと比較していただくことも出来ます。 私がこのテンプレートを選んだのは、見た目がオシャレで私がチェスが好きだという理由もありますが、何より典型的な3カラム・レイアウトで、開発にあたり2つ3つの難関と選択肢が用意されているからです。また最終ページに入れるか否かを決定する詳細な箇所が数個含まれています。 デザインから開発までの過程に対する一般的考え Artificial Casting テンプレートの説明に入る前に、開発にあたってwebサイト全てに共通する2つ3つの事柄を考えてみましょう。 好むと好まざるとに関わらず、web ページは全てボックスを使って開発されます。HTMLの全要素はボックスを持ち、ボックスは CSSボックス・モデルをもとに形づけられます。隣同士や上下に並ぶボックスもあれば、他のボックスに包含されているものもあります。デザインが箱形でなければならないということではなく、開発時に作られるボックスについて考える必要があるということです。 最も上級なレベルでは、2つ3つの大ボックスで大枠のレイアウトが構成されて、デザインの詳細はその大ボックス中の小ボックスに入ります。これらの長方形ボックスを頭で思い描くことは、デザインのどの部分がボックスに上手くフィットして、どの部分をボックスから外すべきかを見定めるのに役立ちます。まずは、これらの大レイアウト・ボックスについて考えましょう。細かい部分を見て内側から外側へコーディングせず、外側からのコーディングを行います。 画像とHTTPリクエストは、webページのローディングを遅くする大きな要因の一つです。デザインを考えるにあたって本当に画像化するべきもの、またコードを用いて簡単に再現できるものは何かについて思案することは賢明です。一つ画像を少なくすることで、ファイルサイズもサーバー上のリクエスト数も縮小するため、 画像を最適化することができます。 私はただの大きな色の集合体に過ぎない、webページ上の画像を見かけることがよくあります。そもそも色の集合体が画像化されなければならない理由はないのです。私たちは画像を眺めて、どうやって必要とする画像全体のファイルサイズを縮めるかについて考えながら、使用する画像の数を減らしています。 レイアウト テンプレートに関してまず考えたいことは、レイアウト全体の概観についてです。デザインを大ブロックに分けようとしていますが、この場合、まず上下方向に行うのが最も簡単でしょう。デザインを見ると3つの帯がページを横切っているのが分かります。この帯がヘッダーやコンテンツ、そしてフッターに当たるものです。 フッター 最下部に3つの情報ボックスとテキストを含んだ分かりやすいフッターがあります。とりあえずフッターの中味は気にせず、先ず上部からフッターを切り離すためにどこで線引きするかを決めます。 この端の部分を画像化しますが、それをフッターもしくは上のボックスのどちらに入れるかを選択できます。どちらでもOKですが、私はイメージをフッターに入れることにしました。 この記事で触れませんが、最終的にはサイトにわたって繰り返されるページのある部分を別のファイルで管理するために、PHPを含有したファイルの類いを使用するのが妥当でしょう。この画像は当サイトの全ページ上に登場するため、私にとっては最終的にfooter.phpファイルになるフッターに置くほうが合理的なのです。 フッター内にある他すべての詳細については、基礎レイアウトの作成中はそれについて考える必要はありません。 コンテンツ 本文を3つのカラムと2つのサイドバー、そしてその間にあるメイン・セクションに分けてフッターの真上に置きます。3つのカラムについては後ほどもう少し詳しく触れます。今は内側を3つのカラムまたは3つの小ボックスに分割される、一つの大コンテンツ・ボックスについて考えるだけで十分です。 フッターの場合と同じく、コンテンツ・ボックスの初めと終わりをどこにするかを決めなければなりません。ここに開発上の問題のタネとなる2つの要素があります。複数のカラムおよびコンテンツ全体をそれぞれまたいでいるログイン・ボックスとチェスの駒の画像はヘッダーに属します。 オリジナルのテンプレート開発にあたって、両者はヘッダーの一部として設定されましたが、私はそれらをコンテンツエリアに置くことにしました。フッターの場合と同じく、この2つがサイトの全ページに登場させるべきかを考えました。確かにテンプレートのデザイン時に設定すればそうなっていたでしょう。しかし、2つがページ毎に変わるような柔軟性を持たせるのも良いだろうと考えました。 おそらく、サイト内の別のセクションでは別のチェス駒画像が登場し、ログイン・ボックスは一部のページあるいはセクションにのみ登場するでしょう。 コンテンツエリアにインクルード・ファイルは使いません。ページ毎に変わるセクションはここだけなので、サイトにわたって変化させたいデザイン素材は、このボックスに入れるのが妥当なのです。しかしここからチェス駒の画像をコンテンツとヘッダーの両方に置くため、どのようにコーディングするかを把握しておく必要があります。 ヘッダー ここではヘッダーについて紹介します。消去法からするとヘッダーにはロゴやナビゲーション・バー、そしてその背後に勾配の背景が入ります。ヘッダーとコンテンツエリアの間を、ページを横切る細いラインで仕切ります。このラインもページ毎に変化しないため私はヘッダーに入れています。ヘッダーは最終的にサイトの全ページに入る header.phpファイルになります。 レイアウトの作成 HTMLを以下のように組み立てることができます。 先述したメインボックスやビルディング・ボックスは、それぞれ セマンティック id を適用した divになります。 コンテンツエリアの中に3つのカラムが入っているのが分かるとおり、コンテンツ div は3つの追加 divsを持っています。一方がより重要であることを反映させるためによくされることですが、2つのサイドバーをそれぞれ「プライマリー」「セカンダリー」と名付けました。 チェス駒とログイン・ボックスの画像をコンテンツ div の中に追加しますが、 ログイン・ボックスをカラム構造の枠から独立させるために、 3つのカラムdivsの外に置くことにします。 ここからはCSSについて。 CSSでサイトのレイアウトを作る際の鍵は、CSSの不要な場合を見定めること、そしてフロートを要する場所がわずかであるという理解です。HTMLでは、コンテンツ div はそのままヘッダー divの真下に置き、 フッター div はそのままコンテンツdiv の下に置きます。これは div のデフォルト動作で、それが起こるために何もする必要はありません。 このデフォルト動作を変えたいので、コンテンツdiv内の各 divs をフロートします。これら3つのdivs がお互いの下に来ないように、お互いを隣り合わせにして配置し各々左方向にフロートするようにします。 デフォルト動作を変更させたら次はフッター divの調整を行います。 コンテンツ div内の内容全てがフロートした状態にあるので、 フッター divは自動的にその下に来ることはありません。 clear: both を追加することで(ここでは  clear: leftを使っていますが)フッター div を強制的にコンテンツ div下に持っていきます。 必然的により多くのCSSが最終的には必要となります。上記のコードを試すと、どの divs にも幅や高さ指定、またそれらを設定するコンテンツがないため内容が乏しいのが分かります。そこにはこれから中味を埋めていく空っぽの構造体があるだけです。 フロートされた3つの divs の合計幅がページ全体の幅を越えないようにしなければいけないため、それら3つの幅設定には特に注意する必要があります。レイアウトに際してのもう一つの決定事項である全体の幅について、まだ詳しく述べていないことにお気づきでしょう。 固定もしくはリキッドのレイアウト デザイン・イメージを一見しただけでは、デザインが 固定されているのか流動的なのかが分かりません。事実どちらも可能なのです。テンプレートに付いているコードを見ると、3つの水平の帯(ヘッダー、コンテンツ。フッター)がウィンドウの端まで伸びながら、帯内のコンテンツ全部がページの中央に来るように設計されています。同じように私たちもしてみましょう。 全てを固定して中央に持っていきたい時は、div でその周辺を包んで幅を確保し、その div  で包んだ部分を中央に据えます。おそらくCSSでページを中央に置く方法が皆さんには馴染み深いでしょう。 ページ全体を中央に置く方が簡単と言えば簡単なのですが、ここではそれを行いません。3つの水平帯の背景をブラウザの端まで伸ばしながら、帯内の内容全てをウィンドウの中央に置きます。私たちが目指すのは リキッドな背景と固定したコンテンツですが、幸いにもSoh Tanaka氏がすばらしいとても簡単な解決方法を提供してくれました。 ただCSSで一つのクラスを作り、それをHTML構造内にある選択可能なdivsに適用するだけでよいのです。 センタリングに精通している人なら、上のコードが通常 wrapper divに加えるものであることにお気付きになるでしょう。クラスとしてCSSを設定すれば、それが適用される箇所での柔軟さとコントロールが確実になります。新しいHTMLはこのようになります。

詳細を読む »

CSS3とHTML5をフルに活用したコンタクトフォーム

今回のチュートリアルでは画像を使用せず、HTML5とCSS3だけでコンタクトフォームを作成する方法をご紹介していきたいと思います。その前に少々免責事項ですが、HTML5とCSS3はまだドラフト状態ですので、このチュートリアルの目的はあくまで「HTML5やCSS3を使うとこういうことが出来ますよ。」と一例をお見せすることに過ぎません。古いブラウザとの互換性の問題もありますし、もし本番でこの方法を使用する場合はご自身の責任でお願い致します。 さて、今回作成するのはシンプルなコンタクトフォームです。名前、メールアドレス、URL、件名、本文と言った基本的な情報をカバーしています。 そして文中のコードではベンダープリフィックスを省略していますが、デモページのソースコードは勿論ベンダープリフィックス入りなのでそちらでご確認いただけます。 この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 HTML5の新フォーム要素 HTML5の仕様では、フォームの機能をさらに強化するような要素が沢山紹介されています。その中から今回のフォームで使用する要素をご紹介しますね。 Input type = emailこちらは、ユーザーにEmailアドレスを入力してもらいたい時に使用します。HTML5をサポートしているブラウザなら、入力されたものがきちんとメールアドレスなのかどうか検出することが出来ます。 Input type = urlユーザーが正確に有効なURLを入力したかどうか確認する為に使用します。 Autocomplete = on attributeこちらはフォームや単一入力(single input)で使用することが可能で、「autocomplete = “on”」の場合にはユーザーがそれまでフォームへ入力した履歴を参照することが出来ます。 Require = requiredこちらは入力必須項目に設定します。HTML5をサポートしているブラウザならば、ユーザーが全ての入力必須項目に記入するまではフォームを送信することが出来ないようにすることが出来ます。デフォルト設定では入力必須項目は事前に明示されていないので、Webデザイナーは視覚的な表示を追加する方がいいと思います。 Placeholderこれは入力のヒントです。マウスで選択されていない状態の時は、この項目にどのような内容を入力したらいいのかサンプルを表示させることが出来ます。ユーザーがフィールドをクリックするとサンプルは消え、何も入力しないまま別のフィールドに移動すると再びサンプルが表示されます。 これで新しい要素への予備知識もバッチリだと思いますので、HTMLコードに移りましょう。 IDやクラスはそんなに使われていませんね。HTMLコードを出来るだけ減らして、その代わりにCSS3でフォームをスタイリングすることを目指しているからです。それと、HTML5のDOCTYPEを使用するのも忘れないようにしてくださいね! ストライプ背景の作成 それではまずレイアウトからですが、フォームの背景を先に設定しましょう。ストライプのボーダーを作成するには「#content」だけスタイリングすれば大丈夫です。アイデアは極めてシンプルで、CSS3グラデーションを使ってこの要素全体にストライプの背景を設定しています。 グラデーション部分はこのようにコーディングしています。 background: repeating-linear-gradient(-45deg, #EFC1CB , #EFC1CB 30px, #F2F2F2 30px, #F2F2F2 40px, #C2E8F5 40px, #C2E8F5 70px,#F2F2F2 70px, #F2F2F2 80px); これを文章で表現すると、こんな感じになります。 線状のグラデーションを45度の角度で作成し、1つ目のストライプはピンクで、0から30pxまでです。それから30から40pxまではグレーを加えます。その次のブルーは40から70pxまでです。70から80pxまで再びグレーを加えてお終いです。これを何度も繰り返します。これを実現するには、45度のストライプのグラデーションを、30px幅のピンクライン、10px幅のグレーライン、40px幅のブルーライン、10px幅のグレーラインで作成していると言うことです。 これでグラデーション背景は完成しました。けれど元々はボーダーを作る予定だったんですよね。このグラデーション背景をボーダーに変えてしまうには、背景の上に新しいコンテナを乗せてしまえばいいだけです。あんまり不要なSPANタグやIDタグは追加したくないので疑似要素の「class :after」を使いましょう。 ボーダー幅はこのafter要素のマージンで設定しています。フォームのコンテンツがきちんと内側に収まるように、「#content」の方に充分なパディングを設定するのを忘れないようにしましょうね。 H1タグとテキストのスタイリング H1タグにはQuestrialフォント、ボディ部分にはDroid Sansフォントを適用しています。アンパサンド(&)はAliceフォントです。これらの書体はGoogleのフォントディレクトリのフォントなので、ヘッダーに以下のようにGoogle font apiコードを加えるだけです。 以下のようにボディ部分にはDroid Sansフォント、H1タグにはQuestrialフォントを使用しています。H1タグのデコレーションにはまた疑似要素の「:before」と「:after」を使っています。 画像は使わずアイコンの追加 「画像使わないって言ってたのに、アイコン追加してるじゃない。」って思いました?このアイコンどうやって追加したと思いますか?答えは簡単で、アイコンフォントを使用しています。このコンセプトをご存じない方の為に簡単に説明すると、アイコンでアルファベットの各文字をマッピングし、それらのアイコンを使ってフォントを成形しています。Chris Coyerさんが興味深いアーティクルをお書きになっているので、参照してみてくださいね。 今回のデモではP.J. Onoriさんのiconicと言うアイコンフォントを使用しています。 コード自体はこのようになります。ここでも疑似要素の「:before」を使っているので、大分見慣れてきましたか? 最初に全てのアイコンにiconicフォントを適用させて、それからアイコンと関連のある文字を使用しています。何故疑似要素のbeforeを使用しているかと言うと、これは純粋な非セマンティックなスタイリングなので、文字はHTMLコードに非セマンティックを追加しないからです。 ラベルで本物のテキスト文字を使用しているので、アイコンフォントを使用することが出来ます。基本的にはアイコンフォントは見た目重視で使われるだけであって、ユーザビリティには何も影響を及ぼしません。アイコンフォントがロードされていなくても、フォームはきちんと表示されます。 フィールド設定「:not()」の威力 最初にお話した通り、出来るだけHTMLのコーディングは少なくしようと思っています。なのでIDタグも出来るだけ使用しません。入力部分をフォーマットするにはinput[type= text, email …]等を使って1つずつトリガーを立てることも出来ますが、CSS3ならばもっと簡単な解決方法があります。それが「:not()」です。サブミットボタン以外は全部同じように表示させたいので、「input:not([type=”submit”])」を設定します。 コードはこんな感じになります。コメントもふってあるので分かり易いかと思います。 ここで強調したいことをまとめますね。 「outline:none」を使って、ブラウザのフォーカススタイルを無効化しています。そして独自のフォーカス/アクティブスタイルを追加しています。 フィールドがアクティブになった時に、CSS3トランジッションを使って幾つか効果を加えています。コンマで区切れば、別の要素の別のトランジッションを別のタイミングで実行することが出来る事も覚えておいてくださいね。 placeholderをスタイリングするにはベンダープリフィックスを使う必要があります。バグなのかどうかはよく分かりませんが、テキストエリアでは「webkit-input-placeholder」でもうまく行きます。けれどMozillaの場合はテキストエリアに特定のものを使用する必要があります。 入力必須項目をスタイリングするのに赤い星を使っているので、このデフォルトのイケてない赤光りは削除してしまいましょう。 送信ボタンのスタイリング 送信ボタンでは「input type=submit」を使用します。そしてここでは「:before」や「:after」と言った疑似要素は使用出来ません。その為HTMLコードの中で直接特殊文字を使用しています。非セマンティックな方法で解決させるのはあんまり気持ちの良いものでもないので、気に入らなければ削除してしまってください。 ボタンのスタイリングにはまたグラデーションやボックスシャドウを使っています。コーディングに関してはまた後程説明しますね。 ボタンにはほんのり薄いグラデーションをかけています。1pxの白のインセットボックスシャドウを上部に、そして1pxのグレーのボーダー。それから5pxのグレーのボーダー。「え?2種類のCSSボーダーなんて無理でしょ?」と言う声が聞こえて来そうですが、ここでボックスシャドウトリックの登場です!コンマを使えば、いくらでもボックスシャドウの設定をすることが出来るんですよ。 ここでのトリックは「プロパティはコンマ区切りされたシャドウのリストです。それぞれのシャドウは2-4の長さの値で定義されます。」と言う一文の中にあります。ボックスシャドウに長さを設定することが可能で、それが丁度「0 0 0px 5px #E0E0E0」の部分に当たります。x軸とy軸のオフセットは0で、カラーはグレー、シャドウ幅は5pxとして、2つ目のフェイクボーダーを作成しています。 ラベルの設定(トランジッション付き) 最後にユーザーがラベルをマウスオンした時に、色が変わるようなトランジッションを加えておきましょう。 ここで強調したいのは「label:hover:before」と言う感じで、疑似要素を沢山追加出来るんですよ!と言う事です。今の所疑似要素に設定したトランジッションはFirefox上しかうまく動作しませんので、chromeではアイコンの色はトランジッション無しで変化します。これがまたアイコンフォントの良いところでもあって、スプライトなども使わず簡単に色を変化させる事が出来ます。 ここまで来たら完成です。フォームでちょっと遊んでみてください。ホバー効果を確認してみたり、HTML5の新しい要素の威力を実感出来るのではないかと思いますよ。入力必須項目に何も入れず送信ボタンを押したり、無効なメールアドレスを入力して送信ボタンを押すとどんな風になるか試してみてください。折角ならFirefoxかchromeの最新版で試してみるのがいいと思いますよ。 最後に・・・ 今回のチュートリアルが、HTML5やCSS3の可能性を理解するお手伝いになれば幸いです。最後にもう一度声を大にして申し上げておきますが、これはあくまでも効果を実感する為のデモなのでよっぽど自信があってしっかりしたフォールバックがある場合はまた別ですけれども、まだ実践では使わないでおいた方がいいと思いますよ。 互換性を向上させる為には、例えばmodernizrを使用してブラウザの機能を検出したり、役に立つHTML5のpolyfillsを見付けたりすることが出来るかと思います。 今度はあなたの番ですよ。CSS3をプロジェクトの中でどのように活用していきますか?HTML5ならいかがでしょうか。コメントどしどしお待ちしています!

詳細を読む »
CSS
winmonaye

LESS CSSを徹底解説

私はフロントエンドディベロッパーとしての仕事を、いかに簡単にそして効率よく行うか常々考えてきました。けれど最も身近な存在であるCSSに改めて注目し始めたのは、ほんのここ最近のことです。フロントエンド開発を楽にするためには、まずグリッドシステムとobject-oriented CSS(オブジェクト指向CSS)の考え方から始めまって、さらにCSSプリプロセッサという形で言語自体の拡張が容易になりました。最も知名度の高いのはLESSとSassですね。 今回のアーティクルではコードをモジュール化や再利用可能にすることにより、効率的にオーガナイズするベネフィットを探していきましょう。 この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 CSS開発お助けツール オブジェクト指向CSSは、ほぼどこでも使用可能かどうか、また将来的なプロジェクトの開発時間短縮に繋がるようなコーディングを自分が行っているかどうか確認する手段にもなります。OOCSS(オブジェクト指向CSS)の基本原則は以下の通りです。 構造とスキンの分離:個々の要素がレイアウトに沿うように適切なクラス設定がなされており、また目的に合ったスタイリングがされていること。 位置依存的なスタイリングの回避:OOCSS GitHubプロジェクトで完璧に説明されていますが、軽く説明すると、「.container h2」と書くより、セマンティック的に問題なければ何でもいいのですが「h2.tagline」などと記述することを推奨しています。こうすることにより全てのH2要素は必ず同じように表示されると言うような考え方です。 オブジェクト指向CSSで記述する際には、HTMLマークアップの時点から何をどのようにしたいのか注意しておく必要があります。例えばこのようなコードがあったとします。 それよりもこのように記述するべきです。 そしてCSSはこのように使うのです。 「.blog-post」の中身それぞれにCSSルールを適用させるのではなく、もっと特定した情報だけ与えて再利用可能にするのです。ただしこのままでは「HTML書き過ぎ」という問題があります。1つのシンプルなブログポストにしては、コードが若干複雑過ぎるのです。ここがLESSの目の付け所で、LESSを使えばもっとプロセスを単純化させることが出来ます。 LESSとはCSSプリプロセッサーのことで、CSS言語をとんでもなく便利な機能満載に拡張してくれます。一度使い始めたらその凄さにビックリすると思いますよ。LESSには非常に多くの便利な機能が備わっているのですが、今回はその中でも3つの機能に注目したいと思います。 変数: @color1: #df0290;といった形で変数を定義し、コードの中に埋め込んでいきます。 .container { background: @color1 url(‘img/bg_gradient.png’); } Mixin: 便利なファンクション(パラメータ有り無しに関わらず)を定義します。 .box (@w: 500px, @h: 200px) { display: block; width: @w; height: @h; } これもまたコードに埋め込んでいきます。 .modal-dialog ( .box(400px, 700px); } 入れ子式ルール: 説明するまでもなさそうですよね。みなさん今まで「CSSでこういうことが出来たらいいな」と思っていたのではないでしょうか。 article { font-family: serif; line-height: 1.4; h1 { font: 2em bold sans-serif; } h2 { font-size: 1.5em; &.category { color: #666; } } } アンパサンドマーク(&)を使用すると、親ルールを参照します。その為LESSコードがコンパイルされると、「&.category」は「article h2.category」に変換されます。 LESSを使用すれば、先ほどのブログポストの例もHTMLはこんなにシンプルになります。 CSSはこんな感じです。 CSSをオーガナイズする必要性 先ほどの例は極めてシンプルなものでしたが、WEB開発プロジェクトが大きくなればなる程、多用なスタイル設定が必要になればなる程、CSSをオーガナイズする必要性は現実味を帯びてくるのではないでしょうか。若干ダイアログは異なって見えるかもしれませんが、全体のルールを書き換えない理由にはなりません。単純にLESSとOOCSSの組み合わせを使って、スタイルコード(すなわちモジュール)を完成させましょう。先ほどの例のように、役割ごと細かくね。 スタイルコードのオーガナイズにこれほど重点を置くベネフィットの1つとして、様々なデザイン機能の分離が可能と言うことが挙げられます。この考え方でいくと、CSS(この場合はLESSですが)のライブラリを作成していくような感じになります。 /project/css/ – reset.css:ブラウザのデフォルト設定をリセット – grid.less:グリッドシステムにmixinを適用(上記の.col(@width)と言ったmixin) – type.less:フォント設定にmixinを適用(@font-faceルールなど) – colorscheme.less:デザインで使用する様々な色用のLESS変数 – interface.less:インターフェース機能用のmixin(ボタン、フォーム、ダイアログなど) – layout.less:サイトのレイアウトに特定したデザイン – style.less:メインスタイルシート(上記含め、サイトのデザインに必要なもの) このレベルでのオーガナイズは、ページ数の少ないものや1ページのアプリにはやり過ぎです。けれど多くの異なるページを所有した大規模なプロジェクトでは話が違ってきます。これが更に大規模になったら、search.lessやprofile_page.lessといったページやファンクションに特定したスタイリングファイルも必要になってくるでしょうね。 しかしながら、運用サーバー上でやみくもに多数のLESSファイルをロードするのも考えものです。以下にガイドラインを記しておきますね。 いつでもきちんとしたスタイルのCSSを記述するようにしましょう。全てはディベロップメントの為ですから、コードスタイリングで横着をするのは止めましょう。 LESSではコメントアウトする時、「/* */」ではなく「//」を使いましょう。LESSコンパイラで削除されてしまいます。 常にパラメトリック(媒介変数)mixinを使うようにしましょう。もし変数を持たないLESS mixinだとしても、空のカッコを追加して「.border () { border: 1px solid black; }」というふうに記述しましょう。こうすることによりLESS mixinがコンパイルされたコードに紛れることを防ぐことができます。 LESSコードをコンパイルしてからCSS用のミニファイを使って縮小させます。LESSには「node.js」用に書かれた独自のコンパイラーがあり、またPHPコンパイラーもあります(オンラインデモもあります)。PHPのLESSコンパイラーでエラーが発生したとよく聞きますが、私自身はまだそういうことはありませんね。

詳細を読む »
CSS
winmonaye

CSS3 3Dギャラリー

本日は、CSSの3Dトランスフォームを使って、3Dギャラリーを作ってみましょう! 3Dトランスフォームを使用すれば三次元空間の設定が可能となり、単純な要素でも色々と面白い動きをさせることができます。またCSSトランジッションも併用すれば、3D空間での移動を可能にし、より現実的な効果を産み出すことができます。 今回実現したいメインアイデアは、真ん中に1枚そして両脇に2枚画像があり、それが円形のギャラリー形式に表示されるようにすることです。CSSでperspectiveを使用しているので、画像を回転させると側面の2つの画像は立体的に見えるかと思います。 尚、CSS 3D transformをサポートしているブラウザでないと動作しませんのでお気を付け下さい。 この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 HTMLマークアップ 今回は以下の様なHTMLコーディングで構築されています。 またこちらがギャラリーを初期化するコードです。 オプション また、以下のようなオプションを加えることも可能です。 お楽しみいただけましたでしょうか?

詳細を読む »

cssイメージキャプションのスライドイン

この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 デモ 読者のジェイソン・ルチェッシさんが、ロールオーバーするとイメージキャプションがスライドインしてくるデモを送ってくださいました。効果を実現させるために無数の入れ子DIVタグが使われていたので、イメージキャプションを付ける標準HTML5の構造とCSSを使って私なりの方法を考えてみました。 そもそもこの効果の目的は一体何なのでしょうね。レイアウト上のスペース削減や、デザイン上キャプション自体が少々目障りだから条件付きで表示されるだけにしておいた方がよいとか・・・。送っていただいたデモだけでは分からなかったのですが、もし気に入らなかったら使わないでおいてくださいね。 HTML5の構造 ピュアでセマンティック的にも全く問題のない、イメージキャプションのマークアップです。 CSSの構造 エンパワーメントの概念は「figure要素は基本的なビルディングブロックで、全てをラップしている。」ここから来ています。figure要素はposition: relative;を指定する必要があり、これによりキャプションを配置したい場所に絶対配置することが可能となり余計なスペースを使うこともありません。またキャプションスライド時に、figureの枠から出たら消滅させる為にoverflow: hidden;も必要になってきます。 スライディングアクションをキメる 画像がロールオーバーされた時にきっちりスライディングアクションをキメるためには、キャプションを完璧に隠さなければなりません。まずはキャプションを左下少し越えたところに配置し、opacityを0にして完全に隠しましょう。それからfigureの範囲内がホーバーされた時に、キャプションをスライドインさせ、opacityも元に戻しましょう。実際にスライドさせるには「transition」を使用する必要があります。 オプション デモではそれぞれ配置場所とスライドインさせる方向が異なります。これはただfigureにクラス名を追加し、クラスによって配置等が異なるように設定してあるだけです。 キャプションに気付いてもらうために・・・ 折角苦労してスライドインするキャプションを作ったのに、誰も気付いてくれなかったら意味がありません。なのでクエスチョンマークのサインを使って、キャプションの存在をアピールしてみましょう。セマンティック的によくない不要なマークアップを増やすよりも、疑似要素を使って生成されたコンテンツを使ってみましょう。 注目していただきたいのが、position: absolute;を使っているのにCSS上でそれ以外に配置に関する値がないところです。何故かと言うと、配置はオプションで作成したクラスの方で指定しているからです。きっとクエスチョンマークは、キャプションがスライドインしてくる隅に配置するのがいいかと思いますので、こんな感じになります: 実際に使ってみること! このサイトで見つけたアイデアは、是非実際使ってみてください。可能なら(全部あなたが考えたと上司に伝えても構いませんので)会社の大きなプロジェクトなどで使用して、どんどん昇給してもらっちゃってください。

詳細を読む »

:hoverでHTML5サウンド再生

この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 デモ CSSでサウンド再生する方法をググると、大抵以下の様な検索結果が出るかと思います: Counter Strike: Sourceに関する何やら。 play-duringやcue-beforeに関する何やら。 こちらは一見使えそうに見えますが、実際には古いブラウザでメニューアイテムをロールオーバーした時に奇妙な音を立てるための機能だけでなく、聴覚スタイルシート(アクセシビリティとかスクリーンリーダー等)をサポートするためのものです。 サウンドもまたデザインの一部なのだから、CSSでコントロール出来るべきだと思うのですが、残念ながらまだそこまでは至っていません。指定したエリアをマウスオーバーした時にサウンドが再生されるようにするには、HTML5かFlashに頼らなければなりません。でもこれを読んでいる皆さんはFlashを使うよりも、HTML5を使って再生する方が興味があるはずです。 HTML5では<audio>要素(Firefox 3.5+、 Chrome 3+、 Opera 10.5+、 Safari 4+、 IE 9+で対応)を使って、サウンド再生することが出来ます。ブラウザのサポートを最大限活用するために、MP3ソース(WebKitとIE)とOGGソース(ForefoxとOpera)の両方を使ってみましょう。 上記のコードを丸々そのままページに記述したとしても、何も見えないし聞こえません。小さなプレイヤーを表示させたいなら、コントロール属性(<audio controls>)を使う必要があることを覚えておきましょう。音源だけ再生させてプレイヤーを表示させたくない場合は、オートプレイ属性(<audio autoplay>)が必要となります。 今回の我々のゴールは、メニュー項目など特定の要素の上にマウスオーバーさせると、サウンドが再生されるということです。しつこくなりますが、残念ながらCSSで<audio>要素に指示を与えることは出来ませんので、JavaScriptを使用することになります。JavaScriptを使ってサウンド再生するには以下のようなコードになります: イベントの取り扱いと選択が簡単になるので、jQueryを使ってみましょう。 ではこれに、指定した要素をマウスオーバーした時にサウンド再生するようにコードを加えます: その他の方法 Goodfootモバイルアプリのティーザーページでは「Available on the App Store」をホバーすると変な唸り声が聞こえるという、似たようなテクニックが使われています。このページではアイコンがホバーされる度に、DOMに新しいオーディオ要素が注入されるようになっています: 同様にOGGもサポートするには、もう少し改善しないといけないところもありそうですね。W3Cのスペックでも他のどこでも見かけたことがないので、ボリューム属性がどうなっているかはちょっとハッキリとは分かりません。こちらはジェフリー・ウェイさんによる修正版です: きちんと動作するように見えるし、言ってみればそれが最低条件なので、このアプローチの仕方はとてもいいと思います。一度サウンド再生されると、キャッシュされて再生速度が上がるようなのですごくいいですね。 他に考えうる方法としては、3つのオーディオ要素全てをページに記述してしまうことでしょうか。 それから、この内の1つがランダムで選択されるようにします: トライアルと問題点:サウンドオーバーラッピング 私の元々のアイデアは「ナビゲーションメニュー等をホバーすると小さなクリック音が再生される」というものでしが、すぐに問題点が浮かび上がりました:.play( )をトリガーするメニューアイテムを、サウンド音が終わるよりも断然早くホバー出来てしまうということです。単体のオーディオ要素は自分自身のサウンドをオーバーラッピング再生させることは出来ません。サウンドが再生し終わるまでは.play( )のリクエストを無視し続けてしまいます。 この対策として、まず.pause( )でサウンド再生を停止させて再度.play( )させることを思い付きました。けれどあまりうまくいきませんでした。きちんと停止してはくれるのですが、その後再び再生されないことが何度もあったのです。 一番スムーズに行く方法としては、オーディオ要素を全てのメニューアイテム用に複製することでした。こうすればメニューアイテム1つ1つがオーディオ要素を所有しているので、サウンド再生もオーバーラップも可能になります。

詳細を読む »

直ぐに使いたいHTML5機能6個

2009年にW3CがXHTML2をやめてHTML5の開発に集中したことや、GOOGLE, APPLE & MicrosoftのVPやCEOが揃って ”これからは、HTML5” と言ったことをきっかけに、HTML5の注目とその浸透率は、日に日に加速している。実際に最終的なHTML5の完成は2022年以降とされているが、ブラウザーのサポートの早さと企業の後押し次第では、予想よりずぅ〜と早く完成するのではないかという見解もある。 そこで、今回はHTML5の中でも簡単に使用できる便利な機能をいくつかピックアップして紹介したいと思います。 Doctype Doctypeの歴史をたどると、なぜこんなバカバカしい長ーーーいDoctypeになったかわかりますが(ヒント:IE)、そんな長い古い昔の歴史は忘れて、新しく短いきれいな新しい歴史に向かう第一歩です。 古いDoctype: 新しいHTML5 Doctype: すばらしい。こうやって人間は、昔の苦労を忘れていくんですね〜。 Script と Links の Types 新しいHTML5では、JavaScriptやCSSファイルなどを入れる場合、そのファイルがどんなタイプかを指定するtypeを指定する必要がなくなり、簡単になりました。 古いLinkとScript 新しいLinkとScriptの入れ方 コンテンツを編集 最近よくWeb2.0などで見られるのが、ディスクトップアプリーケーションなどの用に、文書などのコンテンツをクリックすると、フォームになり、それで編集して、コンテンツをアップデートすると言ったようなのがありますが、現状では、jQueryのJeditableに見られるようにJavascriptを使って作られています。 新しいHTML5では、contenteditable=”true”を指定するだけで、その属性内の内容が編集できるようになります。例えば、p に指定するとこんな感じです。 HTML5 フォームインプット フォームは、いろんなアプリーケーションで最も使われている属性です。今回HTML5では、様々な機能がフォームのinput属性に追加されました。その一つがtypeで指定できる様々な種類です。range inputの使い方は、前回のチュートリアルでも紹介しましたが、他にも以下のリストが使えるので、是非是非試してみてください。また、typeを指定することで、validationも行ってくれるので、いち早くすべてのブラウザーが対応してくることを願うのみです。 Search tel url email datetime date month week time datetime-local number range color Audioのサポート ちょっとしたBGMを流すにも、ちょっとしたFlash Playerなどを用意する必要がありましたが、HTML5では、audioタグが用意されているので、簡単に音楽を流せる。もちろん、まだ実際にサポートしているブラウザーは少ないので、すぐに使うにはリスクが高いがもうあと1年もすれば大丈夫でしょ。 Videoのサポート 音楽だけでなく、動画もHTML5で使える様になるのは、業界にとってはかなりの大ニュースだと思います。Youtubeもいち早くHTML5でビデオを埋め込みをサポート<http://apiblog.youtube.com/2010/07/new-way-to-embed-youtube-videos.html>させるなど、いろいろな方面から活発的にHTML5のビデオサポートが行われている。 videoタグ内にある”preload”を見てもらうとわかる様に、簡単にpreloadを出来るのもうれしいですねー。 他にも、media elements APIを使えばビデオプレヤーのカスタマイズなどもできるので、カスタマイズしていいのができましたら、是非共有してください。 少しでも早く使いたい方へ もうウェブ業界である程度身を置いている人であれば知っていると思いますが、CSSのサポートが最悪だったIEが、今回、HTML5のサポートも今の所最悪です。 ただ、実際に日本でのIEの浸透率は、海外と比べてもダントツで大きいために、日本国内でのHTML5を使用すためには、できるだけIEでもしっかり動かしたい。 ただ単にHTML5を使いたいがためにわざわざJSを使うのは気が引けますが、知らない人のために、こんな物があるというのだけ紹介しておきましょう。 JSでHTML5をIEで使えるようにする

詳細を読む »