Category: CSS3

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&jQueryを使ったパララックススライダー

本日はシンプルなパララックス対応のコンテンツスライダーをご紹介したいと思います。CSSアニメーションを使ってスライダー内の個々の要素をアニメーション化させます。それからスライダーの背景もアニメーション化させることによりパララックス効果を実現させます。 このアイデアはKendo UIのホームページを基にしています。この効果に対するリクエストやご質問を何件かいただいたので、再現してみることにしました。 この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 HTMLマークアップ スライダー内は複数のスライドで分かれていて、それぞれのスライドにはH2タグ、Pタグ、リンク用Aタグ、画像用DIVタグが含まれています。 このスライダーで大切なのは、各要素ごとのアニメーションです。それぞれのスライドに「direction class(方向クラス)」を与えることにより、個々の要素の動作を制御します。方向クラスにはスライド可能な向きに基づき4つの種類があり、例えば右にスライドさせるものには「da-slide-toright」クラスを適用させると言った具合です。 .da-slide-fromright .da-slide-fromleft .da-slide-toright .da-slide-toleft これらの方向クラスを割り当てることによって、個々の要素のアニメーションの制御が可能となります。 オプション csliderプラグインをコールすれば以下のオプションも使用可能です。 パララックス効果は、スライダーの背景を反対方向に移動させることで実現しています。「bgincrement」を使えば、何ピクセル移動させるかと言う事まで指定することが出来ます。 デモ Demo 1: デフォルトのオプション Demo 2: スライドショー(別のタイプのアニメーション) ☆CSSアニメーションやトランジッションをサポートしていないブラウザ用に、簡単なフォールバックを使用しています。 是非色々試してご活用くださいね。

詳細を読む »

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ならいかがでしょうか。コメントどしどしお待ちしています!

詳細を読む »

Javascriptを使わずにシングルWebサイトを作成

ここ数年、ネット上でシングルページWEBサイトを目にする機会がグンと増えてきましたね。その殆どがトランジッション効果にJavaScriptを使用しています。さて今回はそんなマジックを「CSS Transition」と「:target」プロパティで実現する方法をご紹介したいと思います。 デモで使用しているdribbbleのshotはMatt Kaufenbergさんによるものです。ご興味あればDribbbleのプロフィールやブログも覗いてみてくださいね。 この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 HTMLマークアップ HTMLは5つのパートから成り立っていて、ヘッダーと4つのコンテンツが入るセクションに分けることが出来ます。それぞれのコンテンツセクションには独自のIDと「panel」と言うクラス名を割り当て、更にその中に入れ子で「content」クラスを割り当てたDIVタグを記述しています。「home」IDを持った1つ目のコンテンツセクションは他のものと違い入れ子のDIVタグは入れず、クラス名も「content」を使用しています。 ヘッダー部分にはメインとなるH1タグとナビゲーションメニューを入れます。 どうしてわざわざ最後にヘッダーを追加してULリスト使用しているかと言うと、間接セレクタ(general sibling selector)を使ってちょっと遊びたかったからです。こうすれば、それぞれのアイテムの色を変えたり出来ますよね。 さて、今回のメインの目的はそれぞれのセクションにトランジッションを追加する為に「:target」疑似要素を使用することです。今回のデモではセクションを上下に移動させています。 CSSスタイリング まずはヘッダーとナビゲーション部分にスタイリングを施します。ここのセクションは、他の部位と違って移動したりせず、ずっと同じスポットに留まらせます。 「home」IDを持ったセクション以外は全て「panel」クラスを持っていましたよね。その「panel」クラスを持った要素がターゲット(:target)になる度に、トランジッション効果が発動されるようにします。タネ明かしをしてしまうと、クラスがノーマル状態の時はマージンをマイナスの値でセットして、「:target」の疑似要素ではマージンを全て0%に設定しているだけのことです。トランジッションを追加したことにより、選択されたセクションは上方向からスライドインしてくるようになります。 今度は全セクション共通で設定してある「content」クラスのスタイリングに移りましょう。 ナビゲーション内で選択されているメニューの色を変更する為には該当アイテムをゲットする必要があり、ここで「:target」疑似要素を間接セレクタ(general sibling selector)と併せて使用しています。 もうこれで完成です!デモも見て、他にも何か工夫出来るか試してみてくださいね。

詳細を読む »
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 イメージスライドパネルショー

今回はCSSのみを使用して、かなりイイ感じのスライディング・イメージ・パネルの作成方法をご紹介したいと思います。これはパネルに背景画像をセットして、ラベルをクリックすればアニメーション化されるというものです。ラベルにはラジオボタンを使用し、ターゲットはそれそれのパネル部分とし間接セレクタ(general sibling selector)を使っていきます。 今回使用する美しいな画像はJoanna Kustraさんによるもので、Attribution-NonCommercial 3.0 Unported Creative Commons Licenseの元に帰属しています。 同じ様なテクニックを使って、画像をホバーするとスクリーンがかかる効果をFilter Functionality with CSS3でご紹介しておりますので、こちらも併せてご覧くださいね。 ※CSS transitionとアニメーションをサポートしているブラウザでのみ正常に動作します。お気を付け下さいね。 この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 HTMLマークアップ HTMLは大分すると「ラジオボタンとラベル」「パネル用コンテナと各画像のスライス」「タイトル」という3つのパートから成り立っています。「cr-bgimg」クラスを割り当てたコンテナは各パネルを含有しています。更に各パネルは4枚にスライスされており、各スライスは正しい場所に配置されるようにSPANタグで囲まれています。すなわち1つ目のパネルは4枚のスライスから成り、1つ目のスライスは背景画像として最も左側に配置されます。2つ目のパネルも勿論4枚のスライスから成りますが、背景画像の配置場所は「次」の部分へと移行されます。 タイトル用のH3要素には2つのSPANタグがあり、1つはメインヘッドライン用でもう1つはサブヘッドライン用です。 それではCSSスタイリングに移りましょう! CSSスタイリング ベンダープリフィックスは省略しています。ご了承ください。 私たちの目的は、第1にラベルでカバーしてラジオボタンを隠すことです。WEBブラウザ上でラベルをクリックすれば、それぞれのチェックボックスかラジオボタンが選択された状態になります。なので、インプットにIDを与えればラベルの「for = 参照ID」属性を使って、それぞれのインプットを参照することが可能となります。 次に全ての背景画像を適切な部分に配置すること。第3にラベルがクリックされたら、それぞれのスライス画像とタイトルがきちんと表示されるようにすることです。 それでは、まずは最も外側のコンテナのスタイリングです。白いボーダー線を引いて、ボックスシャドウでほんのり影もつけましょう。 きちんと目的のスライス画像とタイトルに辿りつくように間接セレクタ(general sibling selector)を使用したいので、ここでまずラベルを適切に配置しておく必要があります。z-indexを使ってレイヤーが最上部に来るようにし、トップマージンを350px確保して下の方に配置します。 ラベルに小さな円を加えて、ちょっとかわいくデコりましょう。疑似要素を使って丁度テキストの背後に来るように配置します。 パネル間にもちょっと細工を施してみましょう。ラベル用に別の疑似要素を用意して、パネル状に縦線を描きます。グラデーションを使っているので上の方に行くにつれ線が薄く消えていくよう見えるはずです。 最後のパネルに縦線は不要なので、幅を0pxにしています。 ラベルの設定が完了したので、安心してインプットを隠してしまいましょう。 これでラベルをクリックすれば、対応するインプットがチェックされた状態になります。では今度はラベルに間接セレクタ(general sibling selector)を使用して細工していきましょう。下記のようにコーディングすると、選択されたラベルの色を変更することができます。 それから円部分の疑似要素の背景色とボックスシャドウも変更します。 画像パネルのコンテナはabsoluteで絶対配置し、幅はいっぱいいっぱいに使います。このコンテナは「現在選択されている画像」に背景画像を設定する為、後程使用します。これはデフォルトとして何らかの画像が表示された状態を維持する為です。なので幾つかの背景プロパティを追加しておきましょう。 表示用の画像(パネル)は4枚に分割しているので、1つのパネルの幅は150pxです。(600÷4)。パネルはフロートで左に配置し、スライドインして来る時に余計な部分まで表示したくないのでオーバーフロー分はhiddenで隠します。 SPANタグで囲まれた各スライスはabsoluteで絶対配置し、左側-185pxに配置することにより最初は隠された状態であるようにします。 それから次に画像コンテナの背景と、それぞれの画像スライスの設定です。 ここで背景ポジションはパネルによって配置場所が異なるので、間違わないように気をつけながら設定します。 ラベルがクリックされたら、全てのスライス全てが右側へとスライドアウトするように設定します。 選択された背景画像は-150pxから0pxへとスライドインしてきます。 最後にH3のタイトル要素とSPANタグのスタイリングを行います。H3には透過度のトランジッションを適用させ、対応するラベル(インプット)が選択されたら透過度が0から1へと増加するよう設定します。 もしモバイルデバイスではラベルのトリックを使用したくなかったら、メディアクエリーを使って以下のように設定します。 これはとてもシンプルな解決方法なので、必要あらばif the label trick is supportedもチェックしてみてください。 これで完成です!他にも色々実現可能な効果があるかと思います。幾つかデモをご用意しましたので、そちらも併せてご覧くださいね。 DEMO Demo 1: Slide to right(右側へスライド) Demo 2: Odd/even slide to left/right(奇数と偶数でそれぞれ右側と左側へ) Demo 3: Odd/even slide up/down(奇数と偶数で上と下へ) Demo 4: Scale up/down(縮小拡大) 今回はここまでです。みなさんのご参考になれば幸いです。

詳細を読む »
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
winmonaye

CSS3を使ってイントロアニメーションを作る

CSS3は様々な可能性への扉を開いてくれました。今日はCSS3アニメーションを使い、スプラッシュとComing Soon(準備中)ページ効果の作り方をご紹介したいと思います。まるでシンプルな要素に命を吹き込んだかのように自由に動かす方法と、アニメーションシーケンスを実現していますのでお楽しみに。 1つ目のデモで使用しているかわいらしい靴の画像は、これまたかわいらしいAmira Almajidさんによるもので、画像のセットはこちらからご利用いただけます。 ※尚、アニメーションをサポートしているブラウザでのみ動作しますので、ご注意くださいね。 チュートリアルがあんまりにも長くなり過ぎないように、ベンダープレフィックスは省略していますので、こちらも併せてご了承くださいね。それでは早速参りましょうか! この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 Demo 1 こちらのデモでは画像読込みの時間を確保する為に、アニメーション開始までにかなりのゆとりを持たせています。 1つ目のデモではアニメーション化させる要素が幾つかあります。今回のテーマは「Coming Soon(準備中)」です。 まずコンテンツ部分にメインとなるコンテナ(クラス:sp-container)を用意し、その中にサムネイル用の束をそれぞれ記述しています。それからメインのヘッドライン用の束も用意します。メインコンテンツエリアが表示された後に、E-mailアドレス入力枠をスライドインさせています。 HTMLマークアップ では、次はCSSのスタイリングを見てみましょう! CSSスタイリング 1つ目のデモの主な目的は、以下のようなアニメーションの連続を実現させることです。 fromBackを使ってサムネイル出現 fromBackを使って1つ目のH1タグの出現 fromBackを使ってサブヘッドラインのH2タグ出現 fadeOutを使って1つ目のH1タグとサブのH2タグの消滅 fadeOutを使ってサムネイルが順番に消え始め、fadeInColorで2つ目のH1タグを表示それからsizeDownMoveを使ってコンテンツを左に移動と縮小 slideInを使って矢印とサイドコンテンツをスライド それではメインのコンテナをセンタリングして、コンテンツはabsoluteで絶対配置しましょう。 ご覧いただいて分かるように、6秒後にコンテンツへ「動き」と「拡大」のアニメーションを適用させています。この辺のアニメーションはまた後で見ていくことにします。 矢印用のsp-arrowクラスには矢印を背景画像として設定し、absoluteで絶対配置しています。 サイドコンテンツのsp-sideクラスにはE-mailアドレス入力枠が含まれており、画面右側に配置されるよう設定します。 この矢印とサイドコンテンツはいずれもしばらく経ってからスライドインしてきます。 では次にヘッドラインのスタイリングに移りましょう。 それから入力枠とボタン用のラッピング部分ですね。 ではここで、メインコンテンツの内部を見てみましょう。まずヘッドラインのスタイリングですが、こちらは背部から現れてきて、しばらくするとフェードアウトするように設定します。 2つ目のヘッドラインは、1つ目のヘッドラインが消えた後にただフェードインしてくるだけです。 サブヘッドラインは1つ目のH1タグ同様現れては消えるようにします。 お次はサムネイルを格納している束の設定です。 サムネイル用のSPANタグは、現れる時に0から1へと拡大させることにより背部から登場してきたように演出しています。こちらも暫くするとフェードアウトしていきます。 それから各サムネイルが順番に現れては消えるようなシーケンスを作成したいと思います。なので行ごとに、サムネイルを囲んでいる子要素(SPANタグ)1つ1つ順番に時間差設定を施していきます。各行は上の行から順に時計回りに表示されるようにしたいので、行の順番に注意して下さいね。 ここで少し疑似要素を使って、各サムネイルの背景に円が表示されるようにしてみましょう。 お待たせしました。ここからがアニメーション部分です。 1つ目のアニメーションは透過度を1から0に変化させることにより、該当要素をシンプルにフェードアウトさせています。 fadeInColorを使って該当要素をフェードインさせ、またRGBAで背景色の設定も行っています。けれどRGBAの透過度レベルは、要素そのものの透過度が0.5に達した時点でまだ0のままです。こうすることにより要素を先に表示させ、後から背景がフェードインしてくるように細工しています。2つめのヘッドラインにも同様の設定を施しています。 次のアニメーションも極めてシンプルで、該当要素を左側からスライドインしてくるように見せています。 sizeDownMoveは該当要素を縮小させ、左(100px)から左(0px)まで移動させています。ここでtranslateを使用することも出来るのですが、要素をabsoluteで絶対配置させているので左側でちょっと動かす程度にしておこうかと思います。 次のアニメーションは、サイズを0から1に拡大することにより要素が後方から現れて来るよう見せ、同時に透過度も0から1に変化させています。 これで1つ目のデモ用のスタイリングは完成です♪次はもっとシンプルなのでご安心くださいね。 Demo 2 今度は心にグサッとくるメッセージが連続して現れるスプラッシュページなんていかがでしょうか。今回のデモでは単純にボカシ効果を加えつつ、次から次へとメッセージが表示されるような効果を実現させています。 HTMLマークアップ 今回も先ほどと同じ様な感じでコンテナとコンテンツ用にDIVタグを用意し、更にその内部の各メッセージ部分にはframeというクラスを与えています。それに加えて一番最後に表示される地球とリンク用の要素も用意します。 では早速スタイル設定を見ていきましょうか。 CSSスタイリング ヘッドラインはそれぞれ画面上でセンタリングさせ、flurFadeInOutというアニメーションを使って現れたり消えたりさせています。 それぞれのメッセージに時差設定をします。 最後の1つはアニメーション化させてず、代わりに含有しているSPANタグを順番にアニメーション化させています。 地球は実は背景画像であり、abosoluteで絶対配置しています。他のアニメーションが全て完了した14秒後にフェードインさせます。表示画面いっぱいに広がるよう拡大させています。 「join us」リンクは円形の要素で、回転しながら現れてきます。 ここからはアニメーション設定です。 1つ目のアニメーションは、現れては消えるメッセージ用のアニメーションです。text-shadowとthe scaleを巧く使ってボカシ効果を演出しています。 次のアニメーションも大体同じなのですが、今度は最後のメッセージ用で消えずに残ったままにしています。 地球用のアニメーションでは、画面一杯まで拡大させているのと、透過度を始めは増やしてそれから減らしています。 次のアニメーションはリンク用です。回転しながら現れてくるというものですね。 Demo 3 3つ目のデモは商品やアプリを紹介する時に使えるようなアニメーションで、テキストメッセージが色んな動きを見せてくれます。 HTMLマークアップ またこちらも同じような感じでコンテナとコンテンツ用にDIVタグを用意し、更に右側用の要素と左側用の要素をそれぞれDIVタグでラッピングさせています。その狙いは右側と左側とできっちりと分けてテキストに動きを加えたいからです。 ではここからはスタイル設定です。 CSSスタイリング まず真ん中の縦線用の疑似要素を持たせたコンテンツエリアをアニメーション化させたいと思います。まるでそれが「開いて」そこからテキストが流れ出てきているかのように演出します。それから縦線の左側で連続してテキストが右からスライドインしてくるように見せます。同様に右側もで、こちらは左からスライドインさせます。sp-midクラスを適用させたSPANタグのフォントは少し大きめにしてあり、他のテキストが消え去った後でもその場に残るようにしています。2つの大き目フォントのテキストを上に移動させ、コンテンツエリア全体をギュッと詰め寄らせています。(高さを減らすことにより縦線自体も短く変化します。)最後にサインアップ用のボタンを出現させています。 コンテナ部分の幅と高さは固定します。コンテンツのラッピングはまずアニメーションのopenで出現させ、それからaqueezeを適用させることにより高さを減らしています。後者の方は他のテキストが全てフェードアウトしてから発生させる為、開始時間はかなり遅めの設定です。 真ん中の縦線は疑似要素を使って表示させています。 ヘッドライン用のラッピングではoverflowはhiddenにしてあります。こうすることによりスライドさせてもオーバーラップは見えないよう保障されます。 H2要素は内側にSPANタグを含有しており、以下のようなスタイル設定を行っています。 「sp-top」と「sp-bottom」は左からスライドしてきてから消滅します。そして「sp-mid」はフェードアウトする代わりに上に移動します。 右側でも同様の効果が現れるように設定します。ただこちら側は左から要素がスライドしてきます。 sp-midクラスを持った2つの要素が上に移動した直後に、ビックリマークがクエスチョンマークを上書きしたように見せる為、クエスチョンマークをフェードアウトさせてビックリマークを出現させています。 「sp-full」でラッピングされた最後に現れるテキストはフェードインさせて、サインアップリンクの方はズームインもさせています。 そしてここからはアニメーションです。 1つ目のアニメーションはコンテンツエリアを「開く」ことです。ただ単に高さを伸ばせば完成です。 スケーリング用のプロパティを使用していないので、squeezeアニメーションは実際は何もスクイーズしていません。この効果を適用させる時にコンテンツエリアにまだテキストが残っているのでスクイーズはさせず、ただ高さを減らすだけに留めています。 次の2つのアニメーションは要素をフェードイン、フェードアウトさせているだけです。 slideLeftとslideRightはtranslateを使用することにより反対側に要素を移動させています。 moveUpは要素を上に持ち上げています。 最後のアニメーションはscaleを0から1に変更することにより、要素をズームインさせています。 これで完成です!みなさんのお役にたてば幸いです。

詳細を読む »

CSS3の気になる効果でアニメーションボタン

CSS3が秘めた可能性にみなさんの注目も集まっているかと思いますが、本日はCSS3ボタンの実験をお見せしたいと思います。今回のアイデアは「様々なスタイル、マウス オーバー効果、アクティブステータスを持ったアニメーションリンク要素を作成する」というものです。 今回デモで使用しているアイコンはwebiconset.comから、またシンボルフォントはJust Be Niceからお借りしています。 どんなHTML構造なのか、「ノーマル」「マウス オーバー」「アクティブ」と各ステータス時のスタイリングはどうなっているのかと言うことを、1つ1つのデモで確認しながら見ていきたいと思います。 ※アニメーションやトランジッションは、CSS3のプロパティをサポートしているブラウザでのみ正常に機能しますのでご留意ください。 あんまりギチギチに書き込みたくないので、CSSのベンダープレフィックスは省略しています。ご了承くださいね。 この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 Demo 1 1つ目のデモでは、それぞれ別々のコンテンツを持った大きなボタンを作成しています。ボタンのコンテンツは左側に「アイコン」と「本文」、右側に「矢印」、そしてマウス オーバー時には価格が表示されるようになっています。 HTMLマークアップ マークアップ構造は極めてシンプルで分かり易いもので、アイコンはimgタグで囲み、他の要素はspanタグで囲んでいます。 CSSスタイリング スタイリングでは、マウス オーバー時にアニメーション化させたい要素に、適切なトランジッションが適用されているかどうか注意する必要があります。ここでは価格部分は透過度を0にすることで見えなくしており、複数のボックスシャドウを適用することで、より現実的な効果を作成出来るようになります。 ボタンをマウス オーバーした時にはボックスシャドウを変更し、価格を表示させてアイコンをフェイドアウトさせています。 アクティブステータス時には、あたかもボタンが押されているかのような効果を出す為インセットシャドウをセットしているのと、右側の矢印アイコンは肥大させています。 Demo 2 2つ目のデモは1つ目とよく似ているのですが、別の効果を適用させています。 HTMLマークアップ HTMLのマークアップは1つ目のデモと同じです。 CSSスタイリング スタイル設定も1つ目のデモとほぼ同じですが、色を変えてあります。それとマウス オーバー時に少し違う効果を与えています。価格部分はノーマル時「0」の設定からオリジナルサイズまで戻しているのと、アイコンは消滅、そして矢印のspanタグは背景色が赤に変わります。 アクティブ時も1つ目のデモとほぼ同じですが、やはり色を変更しました。ボタンを押すと、矢印アイコンが回転するようにしてあります。 Demo 3 3つ目のデモでは全く違う効果に挑戦しています。ボタンがマウス オーバーされると下に展開し、そこに新たなメッセージが表示されるようになっています。矢印のアイコンは少しだけ回転させています。 HTMLマークアップ HTMLのマークアップも、今までの2つとは若干異なります。スライドダウンされた場所に表示されるメッセージには「a-btn-slide-text」というクラスを与えています。 CSSスタイリング ボタンマウス オーバー時にアニメーションで追加メッセージを表示させる為に、ノーマル時にも一定の高さを維持します。「a-btn-slide-text」の部分の追加メッセージのポジションは絶対配置(absolute)で、マウス オーバー時に0から36pxまで高さをアニメーションさせます。 マウス オーバー時にはボタンと追加文字要素の高さを変更します。また矢印アイコンの角度を45度回転させます。 アクティブ時はボタンが押されているように見える様、ボタンをほんの少し移動させ色の調整をしています。 Demo 4 4つ目のデモも3つ目と少し似ていて、今回は追加メッセージを右側の水平方向にスライドアウトさせています。これは「ボタンが開いたらメッセージが見えた!」ような効果にしています。 HTMLマークアップ HTMLのマークアップは3つ目と同じです。 CSSスタイリング スタイル設定は3つ目と同じような感じで、以下のようになります。変更部分は色と追加文字要素のポジションです。 マウス オーバー時にはボタンの右パディングを増やしているのと、「a-btn-slide-text」spanタグの幅を広げています。 アクティブ時はボタンが押されているように見える様、インセットシャドウの適用と下方向に少し沈ませています。 Demo 5 5つ目のデモではアイコンにシンボルフォントを使用しています。マウス オーバーするとそれまで見えていたアイコンが消えて、矢印のアニメーションが現れる様な効果を実現させています。 HTMLマークアップ 今回の構造では、ボタンリンクの中に4つのspan要素があります。その中で「a-btn-slide-icon」クラスを持ったspanタグが、上から下へと移動する矢印アニメーションです。 CSSスタイリング 左側でアイコンを表示させる為にフォントを使用するので、フォントも組み込ませる必要があります。矢印はトップの値に-30pxを設定することにより非表示にさせることが出来ます。 マウス オーバー時は左側のアイコンをフェイドアウトさせ、矢印アニメーションを止まることなく再生させます。 ボタンを押した時には、ボタンを赤に変化させインセットシャドウを適用させることにより「押されてる」効果を演出しています。 最後に上から下への矢印アニメーションの設定です。 Demo 6 今回はちょっと豪快に行きましょう!真ん中に星が入った円形ボタンの操作を行います。もっちろんマウス オーバー時には真ん中の星は回転させますよ♪しかもパルス機能付きです。それから追加メッセージを表示させています。 HTMLマークアップ ここでは3つのspanタグをボタンリンクで囲んでいます。最後の一つはマウス オーバー時に現れる隠れメッセージです。 CSSスタイリング 今回のデモでは「nth-child」を使用します。spanタグは3つあるので「.a-btn span:nth-child(1)」「.a-btn span:nth-child(2)」「.a-btn span:nth-child(3)」と分けておきましょう。 それから円形ボタンを作成し、ファンシーなボックスシャドウを適用させます。水平方向の真ん中にメインの文字を配置する為に、displayプロパティは「table-cell」にセットします。星と隠れメッセージのポジションは絶対配置(absolute)です。 マウス オーバー時にはボタンのボックスシャドウを変更し、持ち上がったかのように見える様にします。隠れメッセージを表示させ、元々表示されていた文字はフライアウト・アニメーションを適用させます。星には回転アニメーションを加えています。 クリックしたらボタンが押されているように設定しましょう。 回転とパルスアニメーションはこのように設定します。 Demo 7 最後のデモは、ボックスシャドウをうまく使って3D効果を演出しています。 HTMLマークアップ HTML構造は5つ目のデモと同じです。 CSSスタイリング CSSのスタイル設定も5つ目のデモとよく似ています。色と影のを少し変更しました。 マウス オーバー時にはボタンを拡大し、内部の小さなアイコンを回転させています。 ボタンをクリックした際には、ボタンを小さくしているのとボックスシャドウを調整することにより「押された」感を演出しています。 これで全部です!このデモを参考にしてCSS3で色々面白いボタンを作ってみてくださいね。 参考サイト Add to Cart Buttons (PSD) Simple CSS3 Button Ultimate CSS Gradient Generator

詳細を読む »

イケテルオリジナルマウスオーバーCSS3アニメーション

CSS3の力は尋常では無く、本当にすごいことばかりです。今回のチュートリアルではそのCSS3の巨大な力を、非常にクリエイティブな方法で「いい意味で」悪用する方法をご紹介したいと思います。早速ですが、今回は何種類かのサムネイル・ホバー効果をCSS3のトランジッションを使って表現していきます。色んなスタイルを使用し、それぞれのサンプルでサムネイルをホバーすると、予期せぬ効果が現れるようなものを作っていきます。 ※CSS3のプロパティをサポートしているブラウザでのみ正常に機能しますのでご留意ください。 この記事は、http://tympanus.net/codrops/の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 HTMLマークアップ HTMLマークアップの構造は非常にシンプルで直感的で、画像とその他全ての情報を囲い込むコンテナを作成しています。 viewクラスの中に、maskクラスを含んだ要素を含有しています。このmaskクラスはCSS3で実現させる効果を担うものであり、更にその中にタイトル(H2)や詳細、フルサイズ画像へのリンクといったコンテンツを含有しています。(幾つかのサンプルでは、詳細をDIVタグのcontentクラスで囲み、mask要素は別の要素として機能させています。) CSSスタイリング HTMLマークアップが済んだら、スタイリングに移りましょう。まずは一般的な設定をクラスに施し、それから目的に応じて個別に特別な設定をしていきたいと思います。CSS3のベンダープレフィックスは省略していますのでご注意くださいね。 それでは10個の個別設定を見ていきましょう! Demo 1 こちらの効果には、viewに加えてview-firstというスペシャルクラスも追加しています。今後もそれぞれのデモに、view-secondだとかview-thirdだとかスペシャルクラスを追加していきます。 こちらの1つ目のデモでは、いい感じのホバー効果を演出するために基本的なトランジッションを幾つか加えています。 ではここから効果の心臓部に入っていきます。今回のデモでは画像の上にマウスオーバーさせた時、delayプロパティを使って簡単なアニメーションをエミュレートさせています。このhover疑似クラスで使用しているtransition-delay(時間的変化開始の遅延)プロパティは、ノーマルクラスのものとは異なり変更が可能です。今回はノーマルクラスでは設定しておりませんが、hover疑似クラスには適用させています。こうすると、ほんの少しスタートを遅らせることが出来ます。マウスを画像から外すと、デフォルト値の「0」がすぐに適用されるため「元に戻る」のはあっという間です。 Demo 2 2つ目のデモではスペシャルクラスのview-secondを追加しています。そして今回はmaskクラスの中は空っぽのままにして、contentクラスでその他の要素を含有させています。 ここでのmaskクラスは、今回のスペシャル効果を実現させるために別の属性を持たせています。どういうことかと言うと、transformプロパティ(translate(移動)とrotate(回転))を適用させ枠外で正方形を作っています。そしてホバー時にスライドインしてくるように、タイトル等のコンテンツもtranslate(移動)を使ってこの時点では枠外に出してしまっています。 次に、ホバー時に各要素を従来の配置場所まで移動させる為に、ここでもtransformプロパティでtranslate(移動)を適用させています。mask部分にはrotate(回転)も加えていますね。コンテンツの各要素は少しずつ時間差でスライドインしてくるように、遅延も加えています。 Demo 3 3つ目のデモでは、transformプロパティのtranslate(移動)とrotate(回転)を使って、コンテンツを引っ張り込んでいます。 ここの部分はホバー時の簡単な説明です。transition-delay(遅延)プロパティを上手に使って、コンテンツの要素を今までとは反対の順番でスライドインさせています。 Demo 4 4つ目のデモでは、画像に回転を加えながらシンプルにズームイン、ズームアウトさせています。全てtransformプロパティのscale(拡大)のおかげです。画像に対してtransition-delay(遅延)を0.2秒で設定していますが、ホバー時は0秒です。こうすることにより、ホバー時にはすぐさま変化し、マウスアウト時には少しゆっくり変化し始めるようになります。 ここからは効果実現のためのコードです。CSS3を使えば何でも出来ちゃいますね。 Demo 5 5つ目のデモではtransition-timing-functionプロパティのease-in-outと一緒にtranslateプロパティを使って、コンテンツを左からスライドインさせています。 ホバーすると画像を右側に移動させ、コンテンツを左からスライドインさせて画像を押しのけているように見えるはずです。 Demo 6 6つ目のデモでは、コンテンツを前方に浮き出た状態から本来のサイズまでズームアウト(10から1へ縮小)させています。infoボタンはtranslateを使って下からスライドインさせています。 元に戻る時は、スムーズに見えるように遅延設定を調整します。 Demo 7 7つ目のデモでは、画像は中心に向かって回転縮小させ、コンテンツは上から順番に落ちてきます。 ホバー時には詳細の要素に遅延効果を加えており、こうすることによりまず画像が回転し、あとから画像のあった部分にコンテンツが降ってくるように見えます。元に戻る時はコンテンツはすぐに消滅し、画像が回転拡大しながら戻ってきます。 Demo 8 8つ目のデモではアニメーションを使って、バウンド効果を加えています。コンテンツが上から落ちてきてバウンドしているように見えます。 mask要素にアニメーションを加え、コンテンツが上から落ちてくるように調整しながら遅延の定義を加えます。 本当にバウンドしているように見せる為にtranslateYを使用し、幾つかフレームも設定します。 Demo 9 9つ目のデモでは、右下からと左上からスライドインさせる為2つのmask要素を使います。 2つのマスクの開始地点はそれぞれ別なので、1つは上に1つは下に個々に設定します。 コンテンツは2つのマスクが中央で接触したその線上から現れているかのようにスタイリングさせています。 ホバー時は2つのマスクは端と端がほんの少し重なり、コンテンツはその隙間から浮き出てきます。 マスク用のtransition-delay(遅延)は、ホバーした瞬間に移動開始するよう設定してあります。けれどマウスを外した時は、少し間を開けてから元の隙間に戻っていきます。 Demo 10 最後のデモでは画像はどんどん拡大してフェードアウトさせ、真ん中からコンテンツが湧きあがってくるように見せています。この効果はscale(拡大)と透過レベルを調整することにより実現します。 ホバー時はシンプルにscaleを使って画像を拡大し、opacity(透過度)を「0」にすることによりフェードアウトさせています。 終わりに・・・ CSS3は非常に素晴らしい可能性を秘めており、様々な効果を実現することが出来ます。もしかしたら、簡単な効果なら全てのブラウザでJavaScriptに頼らずCSS3で100%実現出来るようになる日も近いかもしれませんね。今回のアーティクルがみなさんの役に立ち、ご自身のプロジェクトに何かしらのインスピレーションを与えることが出来たなら幸いです。

詳細を読む »

フリー3dスタイルCSS3ボタン

今回は、手軽に使えてとてもインパクトがある3d-CSS3ボタンを無料でご提供!! オリジナルは、http://hellohappy.org/のChad Mazzolaが作成したのを、今回は、LESS用に書き換えました。LESSを使用しているので、簡単に色を変更できるように作ったので、どんなサイトにも使えるすぐれものです。 もちろん、商用も個人用もOK。 ファイルのダウンロード CSS3の3DボタンのLESSコードは以下 HTMLのマークアップはbuttonにpunchのclassをつけるだけ!

詳細を読む »

CSS3フルスクリーン背景スライドショー

今回はフルスクリーン背景画像のスライドショーをCSSのみで作成したいと思います。イメージを色々とトランジットさせるのと、CSSアニメーションを使ってタイトルも表示させたいと思います。 デモで使用しているイメージはMark Sebastianさん撮影のもので、Creative Commons Attribution-ShareAlike 2.0 Generic Licenseにライセンスされています。 今回の効果はCSS animationsをサポートしているブラウザでないと動作しませんのでご注意ください。 こちらのチュートリアルは、私たちが実験している最新のCSS3の一部分にすぎません。他にも色んなことを試しているのでよろしければご覧くださいね。 Original Hover Effects with CSS3 (イケテルオリジナルマウスオーバーCSS3アニメーション) Animated Buttons with CSS3 (CSS3の気になる効果でアニメーションボタン) Splash and Coming Soon Page Effects with CSS3(CSS3を使ってイントロアニメーションを作る) Experiments with background-clip: text Experimental CSS3 Animations for Image Transitions Slopy Elements with CSS3 CSS3 Lightbox この記事は、http://tympanus.net/codrops/ の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 HTMLマークアップ スライドショーの部分にはULリストを使います。個々の画像にはSPANタグをつけて、タイトル部分のH3タグはDIVタグでラッピングします。 SPANタグはスタイリング時にスライドショー用の背景画像を含有する要素になります。 CSSスタイリング それではULリスト部分のスタイリングから始めましょう。ポジションはFIXEDで、表示域まで引き延ばします。また、イメージ上にパターンを表示させる為に:after疑似要素も使います。 今回はドットパターンを繰り返し使用しておりますが、透過させたCSSグラデーションなども勿論代用可能です。 スライドショーのイメージ用SPANタグはabsoluteで絶対配置し、幅と高さは100%に設定します。このSPANタグにはテキストが含まれているのですが、それが見えてしまったら困るので文字色(color)を透過させます。そして背景サイズのプロパティは「cover」にします。こうすることにより背景画像が要素の全領域をカバーしてくれます。要素の全領域とは結局画面サイズの事なので、可視表示域全てをカバーすることになります。透過度は「0」にセットします。これからアニメーションで変化を加えていきます。 SPANのアニメーション間隔は36秒で止まることなく無限に続きます。それから詳細部分でタイトルのDIVタグもスタイリングしておきましょう。 タイトル用DIVタグも36秒間隔にしておきましょう。 ここで背景画像用の全てSPANタグが時間差で流れるように設定します。どういうことかというと、スライドショーのイメージとタイトルが6秒ごとに切り替わるようにするということです。 それではスライドショーのアニメーションを見てみましょう。SPANのアニメーションは36秒間隔です。この36秒間の間に、透過を変更させています。まずアニメーションが8%まで達した時に透過を0から1に変更し、17%まではそのまま維持します。25%に達したら0に戻し、最後まで0のままです。 なぜこんな値になるかというと、各イメージを6秒間隔で可視状態にしたいのと、各サイクルの終わりには1つ目のイメージが再び表示されるようにしておきたいからです。イメージは全部で6つあるので、ひとつのサイクルには36秒を要します。その為透過度に応じて値を「計る」必要があります。2つ目のイメージがアニメーションし始めるのは6秒後なので、1つ目の画像がアニメーションの何パーセンタイルでフェイドアウトするべきか調べる必要があります。6を36で割ると0.166666になり、これはキーフレームのステップだと大体16%位です。そしてイメージをただパッと消したいわけでは無いので、例えば8%などその途中の段階も必要となってきます。この時点で画像を完全に表示させて、また17%に達したらフェイドアウトさせ始めて25%の時点で完全に消えるようにします。 タイトル部分も同様です。けれどタイトルに関してはもう少し早く消してしまいたいので、19%の時に0に戻します。 アニメーションをサポートしていないブラウザでは、SPANの透過を1にすることにより単純にスライドショーの最後のイメージを表示させています。 no-cssanimationのクラスはModernizrによって追加されます。 それと表示域が小さかった場合のフォントサイズも調整しておきましょう。media queriesを使って、特定の幅の場合には小さ目のフォントが表示されるようにします。 これでシンプルバージョンのスライドショーは完成です!ここからはもう少しトランジッションにスパイスを加えてみたいと思います。 アニメーションの他のアイデア イメージとタイトルを表示させる為のアニメーション部分を少しいじってみましょう。 以下のアニメーションでは、イメージを少し拡大して回転させています。 タイトルは右からスライドさせ、左側にスライドしながらフェイドアウトさせています。(text-alignは「right」に変更しています。) 他にも色々な動かし方があると思いますので、色々試してみてください! デモ 他にもバラエティに富んだアニメーションのサンプルをご用意しました。 Demo 1: シンプルなフェイドインとフェイドアウト Demo 2: タイトルは右からスライドさせて、画像を若干回転 Demo 3: イメージは上へ、タイトルは下へ移動 Demo 4: イメージ拡大、タイトルは下からスライドさせ拡大しながらフェイドアウト 今の所、ChromeやSafariなどWebkitブラウザでご覧いただくと一番スムーズに表示されるかと思います。 今回のチュートリアル、楽しんでいただけましたか?活用して色々アレンジしてみてくださいね。

詳細を読む »

CSS3とjQueryでサムネイルをカッコよくイメージ拡大

本日はjQueryを使ってこざっぱりと綺麗にまとめられたサムネイルのプロキシミティ効果(接近効果)の作り方をご紹介したいと思います。これはマウスを画像にホバーすると自動拡大され、周辺画像もそれに合わせて適切なサイズに自動拡大されるというアイデアです。また同時に説明文も表示されるようになっています。 これは元々http://porscheeveryday.com/というサイトの効果をjQueryを使って実現出来るのかという読者からのリクエストに基づいており、この効果を私たちなりの方法で作り直したものです。 今回はJames Padolseyさんが作ったjQuery Proximity pluginを利用しています。 デモで使用しているイラストはFlorian Nicolleさんによるもので、Creative Commons Attribution-NonCommercial 3.0 Unported Licenseにライセンスされています。 この記事は、http://tympanus.net/codrops/ の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 デモへリンクオリジナルの記事 HTMLマークアップ 今回サムネイルにはULリストを使用し、各画像の説明文用にDIVタグを追加しています。(デモ2の画像をご覧ください。) それではこちらにスタイル設定を加えましょう。 CSSスタイリング ULリストはページ中央にセンタリングし、サムネイルの透明度が低いので「透けて見える」ような背景画像を追加します。 また疑似要素を使ってRGBA背景色を加えることにより、背景画像の色合いを増やしています。 リストアイテムは左側にフロートさせ、アンカーと画像のポジションは相対位置で設定しています。 サムネイルそれぞれは、幅100ピクセル、透明度0.2で設定します。 説明部分はデフォルトでは非表示にし、JavaScriptを使って表示されるようにします。 最後に説明部分のDIVタグの設定をしましょう。 これでスタイル設定は完成です!つぎにJavaScriptを見てみましょう。 [adrotate group=”2″] JavaScript まず大切なのが、サムネイル画像をホバーした際の説明部分のポジションとサイズを計算することです。勿論サムネイル画像がメインラッパーのどこに配置されているかによって、またサムネイル画像が最大化した際のサイズによって異なってくるので注意が必要です。例えばサムネイル画像が右端に近かった場合、説明部分はサムネイル画像の左側に配置したいわけです。 それからプロキシミティイベントを画像にバインドする必要があります。マウスの位置によって画像を上下にスケーリングするということです。画像が最大化されたら、そのz-indexを高いまま維持します。そうすれば説明文をきちんと表示させることが出来ます。 デモ一覧 デモを3種類ご用意しましたので、どうぞご覧ください。 デモ1: サイズ変更のみ デモ2: サイズ変更と説明文 デモ3: 小さ目のサイズ変更と説明文

詳細を読む »

画像を使わずAdobeっぽいヘッダーをCSS疑似要素で作成

Adobeは自社サイト内のモジュールで、結構クールなヘッダーバーを使用していますよね。 ヘッダーバーは右側と左側の2つのセクションに分かれています。左側は説明用のタイトルで、右側は関連リンクになっています。では実際このヘッダーバーがどの様に作られているのか考えてみましょう。まず第一に、これはnon-sprite画像を使用しています。 これはどういう意味かと言うと、ヘッダー用に追加のHTTPリクエストが必要だと言うことです。更に付け加えると、:hover効果は全く別のイメージです。すなわち更に追加のHTTPリクエストが必要で、最初のhover上の2つ目のイメージが読み込まれる間に「黒のフラッシュ」が存在してしまうことを意味します。 私たちはこれを画像を一切使わずに再現してみましょう! この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 デモ ヘッダーのマークアップはリンク込みのタイトルです。 こちらがヘッダー用の基本設定です。リンクの部分は色付けして、ボーダーで白線を付け加えています。 いよいよ核心に迫ってきました。

詳細を読む »
CSS
winmonaye

webkitキーフレームアニメーション構文

この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 基本的な宣言と使用用途 このアーティクルを執筆した時点では、上記で使用されている3つのベンダープレフィックスのみが実装されています。けれどプレフィックス無しのバージョンが大規模な変更無しですぐに実装される可能性があるので、プレフィックス無しのバージョンで使用することも考慮に入れた方がよいかもしれませんね。 そしてこちらのアーティクル上では、コードの簡潔化を図るために-webkit-のみ記述します。実際に現実社会で使用する際には、きちんと全てのベンダープレフィックスを記述してくださいね。 複数時間軸の指定 もしアニメーションの開始と終了のプロパティが同じならば、0%と100%をコンマ区切りで指定する方法もあります: 勿論、アニメーションを二度実行させることも出来ますし(または偶数回なら何度でも)、alternateを使って逆方向に戻って来させることも出来ます。 別々のプロパティを持つキーフレームアニメーションの呼び出し プロパティ 値 timing-function ease、 ease-out、 ease-in、 ease-in-out、 linear、 cubic-bezier(x1, y1, x2, y2)(例: cubic-bezier(0.5, 0.2, 0.3, 1.0)) duration と delay Xs または Xms duration-count X fill-mode forwards、 backwards、 both、 none animation-direction normal、 alternate アニメーションの速記 それぞれ個々の値をスペース区切りで記述することも出来ます。durationとdelayを同時に使用する時は順番に記述する必要がありますが、それ以外は順不同で構いません。下記の例で言うと 1s=duration、2s=delay、3=interationsになります。 transformとanimationの組合せ 複数のアニメーション セレクタ上で値をコンマ区切りすることにより、複数のアニメーションを宣言することも可能です。 サポートしているブラウザ Firefox 5+、 IE 10+、 Chrome 6?+、 Safari 5+ 参考サイト Mozilla Docs

詳細を読む »

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上でそれ以外に配置に関する値がないところです。何故かと言うと、配置はオプションで作成したクラスの方で指定しているからです。きっとクエスチョンマークは、キャプションがスライドインしてくる隅に配置するのがいいかと思いますので、こんな感じになります: 実際に使ってみること! このサイトで見つけたアイデアは、是非実際使ってみてください。可能なら(全部あなたが考えたと上司に伝えても構いませんので)会社の大きなプロジェクトなどで使用して、どんどん昇給してもらっちゃってください。

詳細を読む »
CSS3
winmonaye

CSS3グラデーションを今使う

この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合があります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 デモ こちらの記事は2010年3月2日に掲載されたものに、最新のブラウザサポート状況やシンタックスなど加筆修正しています。 2011年7月20日: シンタックスの再更新 「Safari 4+」「 Chrome 1+」「 Firefox 3.6+」「Opera 11.10+」などは全てCSS3グラデーションをサポートしています。この幅広いブラウザサポートにより、ますます進歩的で魅力的なアピールを実現出来ます。更に付け加えると、CSS3グラデーションでは代替えのもの(画像など)を指定することが出来るので、CSS3グラデーションをサポートしていないブラウザ上では、単純に代わりの画像などが表示されます。 けれど・・・ちょっと待ってください。もしいずれにせよ画像を使用しなければならないのなら、何故わざわざCSSでグラデーションを宣言する必要があるのというのでしょうか。これは私もかなり長いこと疑問に思ってきたのですが、するだけの価値がある理由が1つあります。それはCSS3グラデーションをサポートしているブラウザは、代替えの画像を読み込まないのです。HTTPリクエストが1つ減るだけで、WEBサイトの読み込みが格段速くなります。 書き方 さて、では本題に入りましょうか。こちらは最もシンプルな、上から下へのライン状のグラデーション用CSSです: プレフィックス無しバージョンも追加することが出来ますが、まだどのブラウザでもサポートされていないし、間際に仕様変更があっても困るので止めておいた方が無難でしょうね。 ではもう一度、コメント部分を抜いて書式を揃えて書いてみましょう: CSS3 Please!というサイトでは最新のシンタックスを取り揃えているので、参考になさってくださいね。 レンダリングエンジンごとのシンタックス Mozilla系(Firefox、Flockなど) Mozilla系のシンタックスです(詳細はコチラを参照): グラデーションを宣言する最もシンプルな方法は、ただ色のリストをカンマ区切りするだけです。上から下へ等間隔の配色でグラデーションが完成します。上記のサンプルコードで、グラデーションを下から上に配置したい場合は、pointとangleの部分を90degに変更します。放射状グラデーションの場合はこちらを使ってください:-moz-radial-gradient WebKit系 (Safari、Chromeなど) WebKit系(Chrome 1-9、Safari 4-5)のシンタックスです(詳細はコチラを参照): 古いシンタックスを廃止しもっとシンプルなものに変更する傾向にあり、Chrome 10とSafari 5.1ではこのように変わりました: Opera Operaではバージョン11.10からMozillaや最新のWebKitと同じ形式でCSS3グラデーションをサポートしています。 Trident(IE) Tridentのシンタックスです(厳密に言うとCSS3ではないのですが・・・。詳細はコチラを参照): IE9では未確認ですが、IEの6から8は「filter」でうまくいく筈です。けれど正当なコードではありません。「-ms-filter」はIE8以降で動作します。 厳密に言うと、IEはこのリストに加えない方が良いのかもしれません。filterプロパティを使うと実際動作しますし、プログラム的にグラデーションを宣言することが出来て助かります。けれどこの方法だと、初めにfilterを使い画像を代替えとして使用するのではなく、背景画像を宣言することによりfilterを上書きしてしまうのです。かといって代替画像を書かないわけにもいかないし、この方法は使わない方が賢明でしょうね。 Stopとは WebKitでもMozillaでも、グラデーション用のシンタックス内に「stop」があります。このstopはオプションで、色と位置を追加指定することが出来ます。どういう意味かと言うと、グラデーションは単純にある単色から始まって別の単色で終わるのではなく、stopの位置で色を切り替えることが出来、複数指定することが可能です。 HTTPリクエストの減少 FirebugのNetタブでページで使用されている全てのリソースをチェックすると、結構面白いことが見えてきます。 上記のスクリーンショットはFirefox 3.6です。グラデーションの代替え画像が読み込まれていないことが確認出来ます。すなわちHTTPリクエストを減らすことに成功したと言うことです。 けれどFirefox 3.5.8では結局代替え画像も読み込まれてしまうんですけれどね。 こちらの画像はVistaで開いたFirefox 3.5.8です。グラデーションの代替え画像は読み込まれ(しかも使用され)ているのが分かります。なので古いバージョンのブラウザではHTTPリクエストは減少されません。 WebKitのブラウザだともう少しあやふやな感じです。 WebKitブラウザでも、グラデーションをレンダーするためにCSS3プロパティを使用します。けれど同時に代替え画像も読み込んでいるので、HTTPリクエストは省略されていません。唯一の利点は、色指定をプログラム的に宣言出来る事のみです。 2010年8月9日更新: Safari 5.0.1はまだ代替え画像を読み込んでいます。けれどChrome 6.0.472.25 devでは代替え画像を読み込まなくなりました! 2011年4月1日更新: Safari 5.0.4でもまだ代替え画像を読み込んでいます。Opera 11.10は正しい判断を下しましたね。代替え画像を読み込んでいません。 2011年7月20日更新: 遂にSafari 5.1で、代替え画像を読み込まなくなりました! 数字で記述すると言うこと HTTPリクエストの減少により得られたスピードアップと言うのは、ものすごい武器になると思います。WEBパフォーマンスについて追究していくと、HTTPリクエストを減少させることがページ読込み時間改善の1番の近道になると思うからです。更にCSS3グラデーションを使う利点がもう1つあります。それはこのグラデーションがプログラム的に数字で記述されていると言うことです。色の変更が必要だったら、数字を少し変更すればいい。わざわざ画像編集プログラムを使って画像修正する必要はないのです。サイトのメンテナンスが非常に簡単になりますし、値の調整も朝飯前です。きっとすぐにこういう値のアニメーション化とかJavaScriptライブラリに追加されるんでしょうね。すごく楽しみですね。 自動伸縮 画像でグラデーションを表現するには、CSSで背景画像として宣言してリピート表示させるのが一般的です(大抵サイズ的にも丁度よい1px幅で作る方が多いですよね。)。けれど結果としては、固定された場所は確かにグラデーションになりますが、はみ出した部分は単色になってしまいます。これでうまくいく場合もありますが、グラデーションがボックス全体の高さと幅に合わせて伸縮(ストレッチ)してくれた方が断然いいですよね。これもまたCSS3グラデーションの方が便利な理由の一つです: では果たして「今」使うべきなのか? 2010年3月2日現在の回答:そうですね。大分その時期は近付いてますね。もし数値記述を重要視するのであれば、答えは「Yes」です。今から使う方がよいでしょう。けれどスピードアップのためだけに使用するのであれば、現段階サポートしているのはFirefox 3.6+のみなのでもう少し待った方がよいかもしれませんね。 2011年4月1日現在の回答:概ね「Yes」です。特に線状グラデーションならば、是非使ってみましょう。線状グラデーションはクロスブラウザ対応ですし、サポートしていないブラウザでは使用されないだけですからね。勿論実際の使用ケースによって異なりますが、一般的にグラデーションは視覚的にも微妙な表現ですし、単色カラーや画像で置き換えたとしてもさほど大きな問題にもならないかと思います。 参考サイト WebKitブログ - グラデーション用最新シンタックス Mozilla docs - 線状グラデーション、線状グラデーションの繰り返し、放射状グラデーション、放射状グラデーションの繰り返し CSS3 Please - グラデーション用の最新シンタックスやその他CSS3関連情報多数 Lea Verou - 巧妙かつ実践的な背景テクニック、グラデーション用構文自動作成コンバータ Opera紹介ブログ - 線状グラデーションサポート グラデーションギャラリー 放射状グラデーションに関する情報多数

詳細を読む »

:nth-childと:nth-of-typeの違い

まずはこちらのHTMLから・・・: p要素2番目のpタグにスタイル設定したかった場合、以下のどちらも同じ働きをしてくれます: けれど勿論相違点もあります。 :nth-childセレクタをシンプルに説明すると: パラグラフ要素である親要素に包有される2番目の子要素である。これらの状態を満たす要素を選択するということになります。 :nth-of-typeセレクタをシンプルに説明すると: 親要素に包有される2番目のパラグラフ子要素を選択するということになります。 よく言えば、:nth-of-typeの方が「条件が少なくて済む」という感じですね。 それではマークアップを以下の様に変更したとします: 今度はこちらの記述ではうまくいきません: こちらはうまくいきます: 初めの:nth-childセレクタの方が何故うまくいかないかと言うと、<h1>Words</h1>が追加されたことにより、パラグラフ要素(1)であり、しかも2番目の子要素(2)である条件が当てはまるのは、「Little」になってしまったからです。そのため:nth-childセレクタは「Piggy」ではなく「Little」を選択します。:nth-of-typeセレクタの方で問題がないのは、「Piggy」が親要素に含有される2番目のパラグラフ要素であることに変わりがないからです。 それではもし<h1>タグの後ろに<h2>タグを追加したとしたら、どうなるでしょう。今度は2番目の子要素はp要素ではなくh2要素になります。従って上記2つの条件に当てはまる要素は存在しなくなってしまうため、これまたうまくいきません。けれど:nth-of-typeセレクタの場合は、引き続き問題なく表示されます。 なんとなく今まで:nth-childの方が一般的だと思っていましたが、:nth-of-typeの方が便利で使い勝手がよさそうですね。「もし2番目の子要素がたまたまパラグラフ要素だったら、選択する。」なんて条件を使う気になりますか?そういうことも稀にあるかもしれませんが、それよりも:nth-of-typeを使って「2番目のパラグラフを選択する」とか「テーブル内の行を3行おきに選択する」とした方が、断然使い易いような気がします。 私が「ちょっと待ってよ。なんで:nth-childセレクタがうまくいかないんだ?」と思うときは大抵指定した子要素の番号がずれてしまっている時だったりします。そのため:nth-childを使用する時には、下記のサンプルの様に親要素に縛りをかけて、子要素自体は特定しないで置いておいた方が良いかと思います。 勿論その時々の状況によりけりですけれどね。 各ブラウザのバージョンで言うとFirefox 3.5+、Opera 9.5+、Chrome 2+、Safari 3.1+、IE 9+で:nth-of-typeをサポートしています。jQueryを使えば更に深いサポートが可能になりますが、jQueryでは:nth-of-typeの方はサポートを止めてしまいました。なんだかおかしな話ですよね。最初に聞いたときは使用回数が少ないのが原因かと思いました。(ちなみにjQueryを使って記述する場合は、セレクタを使ってクラスを適用させ、そのクラスにスタイル設定します。\$("セレクタ").css("スタイル設定");)こちらのサイトでは、:nth-of-typeをサポートするプラグインをダウンロードすることが出来ます。 他にも関連セレクタとして「:first-of-type」「 :last-of-type」「 :nth-last-of-type」「 :only-of-type」などもありますので、お忘れなく!こちらで更に詳しく説明しています。 もし視覚的サンプルを試してみたければ、リア・ヴェローさんが作ったこのツールが面白いですよ。

詳細を読む »

CSS アニメーションの再スタート

この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合がります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 デモ CSSアニメーション(ala @-webkit-keyframes)の再スタートは、想像するほど簡単ではありません。ではまず、CSSアニメーションを一度だけ実行すると設定したとしましょう: ロゴ部分にクラス指定して実行したとします: その後、何らかの理由・・・例えばクリックに伴い・・・など、アニメーションを再度実行させたいと仮定します。きっとみなさんCSSで再実行する方法があると予想するかと思いますが、私が思いつく限りそのような方法は残念ながら見当たりません。JavaScript(jQuery)でクラス名を一度削除させて、再追加させてみたりするかもしれませんね: 本当にしなければならないことは、要素をそのページから一度完全に削除して、改めてインサートすることです。jQueryを使った簡単なデモとしては、クローンを作成して、オリジナルのすぐ後ろにクローンをインサートし、その後オリジナルを削除する方法があります。 もっと簡単な方法はありますか? こういう投稿をすると、大抵いろんな方がもっと簡単な方法を提案してくださることが多いので、今回もそういう提案があるとよいのですが・・・。

詳細を読む »

WebKitを使ってスクロールバーをカスタマイズ

一昔前、IE(5.5)などでは非標準のCSSを使って、スクロールバーをカスタマイズすることが可能でした。例えばscrollbar-base-colorをスクロールする要素(<body>など)に使って、結構過激なことなんかも出来ました。けれどIEはそれを廃止してしまいました。 最近になって再びスクロールバーをカスタマイズすることが出来るようになりましたが、今回は非標準CSSではなくWebKitを使うことになります。プロパティはベンダープレフィックス(::-webkit-scrollbarなど)で、シャドウDOMを使用しています。この方法が使われるようになって数年経ちますが、ディビッド・ハイアットさんが2009年の初めにブログで記事にしており、考え付くであろう全てのサンプルを掲載されています。 この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合がります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 デモ Webkitスクロールバー webkit scrollbar使用可能な疑似要素 下記のコードは疑似要素で、スクロールバーの個々のパーツにあたります。 webkitスクロールバー状態指定セレクタ 下記のコードは疑似クラスセレクタです。これらのセレクタを使って、スクロールバーの様々な状態を更に具体的に選択することが出来ます。 ここの部分はディビッドさんのブログの説明が完璧なので、丸々ぱくって日本語訳します: (昨今この疑似クラスは::selectionにも同様に適用されるようになりました。そのうち新しい標準疑似クラスとして他のコンテンツでも適用するよう拡張する予定だそうです。) :horizontal(水平方向) 水平方向の全てのパーツに適用されます。 :vertical(垂直方向) 垂直方向の全てのパーツに適用されます。 :decrement(減少疑似) button(2)とtrack-piece(4)に適用され、垂直スクロールバーの上方向や水平スクロールバーの左方向等、それらのパーツが減少方向にあるかどうかを示します。 :increment(増加疑似) button(2)とtrack-piece(4)に適用され、垂直スクロールバーの下方向や水平スクロールバーの右方向等、それらのパーツが増加方向にあるかどうかを示します。 :start(スタート疑似) button(2)とtrack-pieces(4)に適用され、オブジェクトがthumb(5)より前に配置されているかどうかを示します。 :end (エンド疑似) button(2)とtrack-pieces(4)に適用され、オブジェクトがthumb(5)より後ろに配置されているかどうかを示します。 :double-button(ダブルボタン疑似) button(2)とtrack-pieces(4)に適用されます。buttonの場合は、そのbuttonがスクロールバーの同じ端にあるペアボタンの1つであるかを判断するのに使用されます。track-piecesの場合は、track-piecesがペアボタンと隣接するかどうかを示します。 :single-button(シングルボタン疑似) button(2)とtrack-pieces(4)に適用されます。buttonの場合は、スクロールバーの端っこに単独で存在するボタンかどうかを判断します。track-piecesの場合は、単独のボタンと隣接するかどうかを示します。 :no-button(ノーボタン疑似) track-pieces(4)に適用され、track-piecesがスクロールバーの一番端まで適用されるかどうかを示します。(すなわち、そのトラックの端にはボタンが存在しません。) :corner-present(コーナー・プレゼント疑似) 全てのパーツに適用され、スクロールバーのcornerが存在するかどうかを示します。 :window-inactive(ウィンドウ・インアクティブ疑似) 全てのパーツに適用され、そのスクロールバーを含むウィンドウが現在アクティブであるかどうかを示します。 全てを組み合わせると・・・ 実際に疑似要素と疑似クラスセレクタを組み合わせたサンプルを、幾つかご紹介しましょう: 簡単なサンプル それではとてシンプルなカスタムスクロールバーを作ってみましょう: これを垂直方向にオーバーフローしているテキストのdiv要素に、組み込んであげればよいのです: 実装例 ティム・ヴァンダムさんのブログMaxvoltarで、とても繊細でいい感じのスクロールバーを使っているので見てみてください: このページで注目すべきところは、普段私たちが見ているページとは異なり、スクロールバーはページの上端にも下端にも右端にも接していないところです。(スクロールバーはbody要素なのにも関わらず!です。)コードをコピペして似たようなテストページを作成したのでご覧ください: デモページ ForrstというWEBサイトでも、コードスニペットの部分でカスタムスクロールバーを使用しています。スクロールバーがあまり目立たないようにしてあるので、コードの着色部分とあわさって目がチカチカすることもなく、いい感じに仕上がってますね。

詳細を読む »

PNGファイルでカラーアニメーション

あまり普段やってみようと思うことはないかもしれませんが、<img>タグにも背景色を付けることは可能です。例えば画像周囲に2本の枠線を引きたかったとします。1本目の枠線は通常通りborderを使用し、もう1本の方はbackground-colorとpaddingを使ってあたかも枠線かのように見せることが出来ます。もしくは背景色を真っ赤にセットすれば、画像が抜けているところが一目で確認出来ます。 他に背景色を使う可能性としては、画像の透過部分から背景色を透かして見せたい場合などでしょう。実際この方法ならば、何でも自分の好きな形を作って後ろ側に背景色を設定すればよいのです。すなわち作成した形の色をCSSで好きなように変えることが出来るのです。更に言えば、CSSでコントロールするのですから、CSSで出来ることなら何でも出来ると言うことです。アニメーションにすることだって出来ます。 この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合がります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 デモ まずは画像の作成ですが、透過させない部分はソリッドカラーで残します。以下のサンプルの場合は白ですね。そして背景色で「形作りたい」個所を透過させます。フォトショップで見るとこんな感じです: そこにマークアップを加えていきます: そして背景色を付けます: それから何色かが順番に繰り返し表示されるようなアニメーションを作ります。シンタックスは2つとも必要です: 最後にアニメーションシンタックスを画像に適用させます: これが完成図です!デモページで実際のアニメーションを確認してみてください。おまけでマウスオーバーすると色が変わる自転車の画像もつけておきます。

詳細を読む »

疑似要素で出来るあれこれ

この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、翻訳しています。一部変更して翻訳している部分もある場合がります。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 疑似要素の:beforeや:afterは「すごい」のヒトコトに尽きます。ページ上のいかなる要素においても、他のHTML要素で出来ることは何でも出来てしまうようなすごいモノを追加で2つもゲットすることが出来てしまいます。しかもセマンティック的に悪影響を及ぼすことなく、様々なデザインの可能性を拡げてくれます。今回は総集編です。それでは早速ご紹介していきましょうか。 複数の背景キャンバスの実現 相対配置した親要素に疑似要素を絶対配置できっちりと貼り付けることが可能なので、色々と遊べる2枚のエクストラレイヤーが追加されたと考えてよいでしょう。ニコラス・ギャラガーさんが別の記事で、複数のボーダーラインや、CSS3での複数背景シミュレーションや、同じ高さの列など詳しくご紹介なさっています。 単一要素で作成可能な図形例 上記の画像内にあるアイコンは全て単一要素から作成することが可能で、しかも非常に実用的です。それとは対照的に「CSSでコーヒーカップを描いてください!」などと言われたら、それは面白そうですが1700個以上のdivタグが必要となってしまうので全く実用的ではありません。他にもいろいろな形があります。 六芒星のサンプルをご覧ください: 印刷用ページでのURL表示 CSSサンプル フロートの解除 フロートを解除するために、セマンティック的によろしくない余計なタグをコンテナ要素に追加するよりも、疑似要素を使用して解除することが出来ます。一般的に「clearfix」として知られる手法ですが、もう少しセマンティック的に表現するとクラス名は「group」です。 float: center; のシミュレーション いくらみんなで望んでみても、floatプロパティーには実際はセンタリング用の値はありません。けれどfloatには右寄せと左寄せはあるので、疑似要素をプレースホルダーとして使用し2つの列の真ん中を削って画像を配置することが出来ます。 ラベルブロックに使用言語の表示 今このサイトでは疑似要素を使って、使用している言語名をラベルとして表示させています。 アイコンセットの作成 ニコラス・ギャラガーさんがまたすごいことをしています。上記の画像内にあるアイコンは全て画像を一切使用せず疑似要素だけで作られています。 限りあるスペースの有効活用 CSSが与えてくれたり奪ったりすること。何が言いたいかと言うと、疑似要素のコンテンツはメディアクエリーによって、条件的に適用されたり無効化されたりします。例えば上記の画像例で言えば、スペース幅に応じてアイコンを使用したり、もっと充分にスペースがあるならば単語や文字を追加して表示させたりすることが可能です。 タイポグラフィーな飾り書きを追加 もし疑似要素がテキストだったなら、親要素のタイポグラフィースタイルを継承します。けれどもしコンテンツを設定しているなら、その部分は好きなようにスタイル設定することが出来ます。例えば別のフォントや色などの飾り書きを使ってヘッダーを目立たせることも出来ます。 フルブラウザ幅のバー作成 もしコンテンツはそのままのサイズで、背景だけブラウザのサイズに応じて幅を変更させたいような場合、セマンティック的にもよろしくないようなラッピングタグを追加してみたり、すっちゃかめっちゃかなスペース設定をしてみたりと試してみて煮詰まってしまったことはございませんか?これもまた疑似要素をうまく使用することにより簡単に解決します。1つの要素でコンテンツ幅を制限し、ヘッダーバーの方は疑似要素でフルサイズまで拡張するようシミュレートさせることが出来ます。 ボディ枠線の作成 通常の枠線を左右に使用し、position:fixedで固定された疑似要素で上下の設定をします。すると何もマークアップすることなく、ボディ枠線効果を実現させることが出来ます。 きらりと光るボタンの作成 まず透明→白→透明のグラデーションになっている画像を疑似要素ブロックに入れて、ボタンの外側に配置します(overflow: hiddenで隠してあります)。次にhover時にボタンの上を通過させるようにします。こうすればマウスを乗せた時に、きらりと光って見えるボタンを作ることが出来ます。今のところ疑似要素のトランジッションに対応しているのはFirefoxの4か5のみなので、Firefoxの4か5で試してみてください。 特定リンクのロールオーバー時はページ全体をフェイドアウト もし親要素が相対配置されていなかった場合、絶対配置されている疑似要素は、その更に1つ外側の相対配置されている親要素を元に配置が決まります。もし相対配置されている要素が無ければ、大元のルート要素に関連付けられます。これをうまく利用して、フルブラウザ・ウィンドウ要素を作ることが出来ます。メイン要素の下に配置し、マウスが乗せられた時に「ページフェイドアウト」効果をリンクに適用させます。 ヘッダーに3D効果なリボン設定 リボンを嫌いな人はいないと思います!このページにHTMLとCSSの詳細が載っています(http://css-tricks.com/snippets/css/ribbon/)。これは少しz-indexを負の値で使用している為、不透明な背景が設定された親要素の下に隠れてしまわないように、ラッピング用に内側に追加でタグを記述する必要がある場合があります。 olリストの番号にスタイル設定 順序付きリスト(olリスト)の番号部分に、スタイル設定を試みたことがありますか?色々試してspanを使ってラッピング用にタグを追加したり、リストアイテムをスタイル設定したり、はたまたspanでそのスタイル設定を無効化してみたりしてもうにっちもさっちもいかなくなってしまったりとか・・・。それか背景画像をとんでもない方法で使ってみたり、リストスタイルを無効化させて独自の番号を入れてみたりとか・・・。どれもこれもしょうもない方法ですよね。疑似要素をカウンターとして使う方が断然ベターです。 データテーブルのレスポンシブ化 大きなデータテーブルは小さなスクリーンで見るにはやっかいですよね。大き過ぎて垂直方向にも水平方向にもスクロールしなければならなかったり、全体を表示させるために縮小されていて今度は小さ過ぎて全く読めなかったりとか。CSSのメディアクエリーと疑似要素を組み合わせれば小さなスクリーンに合わせて読み易くなるように、データテーブルをレスポンシブ化&再フォーマットすることが出来ます。 ツールチップのスタイル設定 HTML5のデータ属性を利用して、その属性を疑似要素としてスタイリングします。こうすればCSSだけで簡単にツールチップが作成出来るのです!

詳細を読む »

css テキストストローク text-stroke

この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、一部変更し、翻訳しています。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 ウェブ上で表示されているフォントは、基本的にはベクターグラフィックなので、フォントサイズを12pxから120pxに大きくしたりしても、ぼやけたりしないのです。ベクターと言うことは、ピクセルのデーターでフォントや形を表示するのではなく、数式で計算されたポイント一個一個で作られておます。なので、ベクターイメージ編集ソフト(e.g. Adobe Illustrator)の様に、テキストの周りストロークを書いたりできるのです、そして、ついてWebkitでも同じ様にテキストにストロークを書けるようになりました。 使用例: ショートハンド そこで自分はすぐに”いいねー。webkitでしかサポートしてないってことは、テキストカラーと背景を白にして、テキストストロークを入れれば、webkitだけにでもテキストの飾り付けができる!” 嬉しいことに、Webkitも簡単にWebkitでしか適用なれないプロパティーが提供しているので、全部のブラウザーに影響なく使える; @font-face を使って Anime Ace 2 のフォントにストロークを使った場合。 webkit以外のブラウザーは普通の黒い文字になる。 text-strokeを他の方法で再現 次に、まだwebkitしか対応していないtext-strokeを使用するのではなく、FirefoxやOpera,IE9でも対応しているtext-shadowを使ってテキストストロークを再現してみましょう。shadowを上下左右に1pxずつ ずらせて blurはなしで設置します。 これが、テキスト影(text-shadow)を使ってtext-strokeを再現したのになります。かなりいい感じに再現できてますのねー。この方法を使う一番の問題は、2px以上のストロークを設定すると、ストロークに間が空いてきます。webkitを使ってもstrokeのpxが大きくなると問題が出てくるので、とっちらを使ってもそう大差は無さげな気がしあす。 text-strokeとtext-shadowを合わせる text-strokeとtext-shadowを合わせて使うと、なかなか面白い表現をすることができる。それでは、webkitのtext-strokeを入れてからtext-shadowをいれてみましょう。 テキストストロークのアニメーション テキストストロークは、色んなカラー値使用できるので、透明なストロークを重ね合わせて、重なった部分だけが濃くすることもできる。 残念ながら、ストロークの太さはWebkit Keyframeアニメーションには対応してないが、色のアニメーションは対応している。

詳細を読む »

:nth-childの使い方

この記事は、http://css-tricks.com/ の Chris Coyier の許可を得て、一部変更し、翻訳しています。オリジナルの記事はここよりご覧いただけます。 オリジナルの記事 :nth-child と :nth-of-type を完璧に使い分けれるのは、なかなか難しいですが、どんどん理解していくことで、CSSのプロに一歩近づけると思います。 今回、:nth-child を使って、何個か例をあげて説明して行こうと思います。 5個目だけのエレメントだけをセレクトする場合 かっこ内に特定の数字を入れることで、上の例で言うと5個目だのliを指定して、スタイルを当てれます。 5個目以降だけのエレメントだけをセレクトする場合 これでもし li が10個以上あったら、それらもすべて指定することになります。n は、0 から始まることを覚えといてください。 最初の5個だけのエレメントだけをセレクトする場合 n が 0 から始まって -1, -2, -3 となっていきますので、 5 番目より低いエレメントが選択できます。 1個目から始まって、4個ずつ飛ばして選択する場合 奇数を選択する場合 偶数選択する場合 最後のエレメントを選択する場合 10個のエレメントがあれば10個目を、100個あれば100個目を選択します。 最後から2個目のエレメントを選択する場合 nth に last を入れることで、最後から何個目かを選択することができます。もちろん 2n などを使うことで、後ろからの偶数でもOKです。 対応しているブラウザー 面白いことに :first-child は、インターネットエクスプロラー7(IE7) より対応していましたが、 それ以外のセレクターは IE9 になってからしか対応してません。 それ以外のブラウザーに関しては、特に心配することなく使えると思います。IEの対応が心配な方は、Selectivizrなどを使って補助もできます。

詳細を読む »