javascript

PC用とスマホ用のレイアウト切替ボタン

「現在のサイトをスマホ対応にもして欲しい」との依頼

ここは Google大明神の推奨する方法でやるしかないでしょう。
(https://developers.google.com/webmasters/smartphone-sites/details)
という事で、いわゆるレスポンシブwebです。
(あまりに古いサイトは、サイトをリニューアルした方が良い場合もあります)

その流れで、サイトのPC用レイアウトとスマホ用のレイアウトの切り替えボタンが必要になり作成しました。
「ボタンを押せばレイアウトが切り替わる」という例はいくらでも検索で見つかりますが、では、選択したレイアウトを利用してページを推移した時に選択したレイアウトは維持されるのか?と言えば細工をしないと無理です。

いろんな実装方法があると思いますが、今回は、jQueryでクッキーを操作して作成して、参照する先のCSSファイルを保持したままページの推移をしています。
こんな感じ。

ポイントは、

  • jQuery cookie の使い方
  • CSSのリンク先を記述(分岐するように)
  • 読み込むcssの中身(htmlとcssの知識)

でしょうか。
切替ボタン作成に関しての作業は、

  • jQuery を読み込ませる
  • クリックしたときのイベントを書く。CSSのリンク先を記述も
  • 読み込むcssの中身を作ってゆく

こんな感じでしょうか。私の場合は、先にスマホ用表示のレイアウトを、お客さんのサイトを見ながらCSSを書いて、ボタン作成作業で、それらをドバっとスマホ用のCSSに載せました。

残る実装作業は、
このボタンをPC用サイトでも表示するのか・しないのかなど、運用・使用上の問題をお客さんと話し合って実装(たぶんメディアクエリー使用)という流れになります。

最後に、PC用のレイアウトで、スマホ用の切り替えボタンを表示しているサイトが少ないように思うので、こんな意見を載せておきます
(私個人的には、PC用のサイトでもレイアウト切替のボタンは表示させておく方が良いのではと思っています)

http://www.elezea.com/2012/09/responsive-design-expectations/ このページのより
ここでは
「スマホで通販サイトを見て、購入前にはパソコン用のレイアウトに切り替える」「それは、スマホ用のサイトは、PC用のサイトに比べ情報量が少ないと思っているから、」というように書かれています。
どうでしょう。実は私もそんな風に思っています。本当に同じ情報なのか確かめたくなります。
ということで、スマホで見た時にレイアウト切替ボタンは必須である事は間違いありません。
上の英語の記事は、「スマホサイトにPC用にレイアウト切替ボタンはつけておく方が良いよね」という事になっています。

PCでサイトで見た時はどうでしょう。パソコンで見てスマホ用のレイアウトに切り替える人はいないかもしれませんが、
「あーレイアウトが切り替わるだけね」と確認してもらうためにも、表示させておいた方がよくありませんか・・・・
「混乱させないためにPC用レイアウトには切替ボタンは非表示」という考え方もありますが、私は余計なパターナリズムかなと今のところは思っています。

後日追記:
上記のように、PCサイトにも切替ボタンつけた方が良いかも、と書きましたが、実装していて気づきました。
PCサイト上でのクロスブラウザーでの検証と対策、スマホ用ブラウザーはバリバリにCSS3.0とHTML5で対応なので、PC用の旧ブラウザーでの検証の実作業が発生するので、費用が「さらに倍」となりかねなかったです。作業時間と効果を考えれば、PC用サイトではレイアウト切替ボタンはイラネーという線が濃厚になるのも仕方がないことかもしれませんね。

CSSの達人

CSSの達人になりたいと思っているのとは別に、WPを触っていて、時々そのページだけCSSを編集したい、という場合に、重宝する機能
カスタムCSS custom CSS

これは便利です。こちらから引用(Thanks!)

下記のデータをfunction.phpに書き込む

//Custom CSS Widget
add_action('admin_menu', 'custom_css_hooks');
add_action('save_post', 'save_custom_css');
add_action('wp_head','insert_custom_css');
function custom_css_hooks() {
	add_meta_box('custom_css', 'Custom CSS', 'custom_css_input', 'post', 'normal', 'high');
	add_meta_box('custom_css', 'Custom CSS', 'custom_css_input', 'page', 'normal', 'high');
}
function custom_css_input() {
	global $post;
	echo '<input type="hidden" name="custom_css_noncename" id="custom_css_noncename" value="'.wp_create_nonce('custom-css').'" />';
	echo '<textarea name="custom_css" id="custom_css" rows="5" cols="30" style="width:100%;">'.get_post_meta($post->ID,'_custom_css',true).'</textarea>';
}
function save_custom_css($post_id) {
	if (!wp_verify_nonce($_POST['custom_css_noncename'], 'custom-css')) return $post_id;
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
	$custom_css = $_POST['custom_css'];
	update_post_meta($post_id, '_custom_css', $custom_css);
}
function insert_custom_css() {
	if (is_page() || is_single()) {
		if (have_posts()) : while (have_posts()) : the_post();
			echo '<style type="text/css">'.get_post_meta(get_the_ID(), '_custom_css', true).'</style>';
		endwhile; endif;
		rewind_posts();
	}
}

ついでにJSも

JavaScriptを追加できるようにする場合は、以下をfunctions.phpに記述します。
//Custom JS Widget
add_action('admin_menu', 'custom_js_hooks');
add_action('save_post', 'save_custom_js');
add_action('wp_head','insert_custom_js');
function custom_js_hooks() {
	add_meta_box('custom_js', 'Custom JS', 'custom_js_input', 'post', 'normal', 'high');
	add_meta_box('custom_js', 'Custom JS', 'custom_js_input', 'page', 'normal', 'high');
}
function custom_js_input() {
	global $post;
	echo '<input type="hidden" name="custom_js_noncename" id="custom_js_noncename" value="'.wp_create_nonce('custom-js').'" />';
	echo '<textarea name="custom_js" id="custom_js" rows="5" cols="30" style="width:100%;">'.get_post_meta($post->ID,'_custom_js',true).'</textarea>';
}
function save_custom_js($post_id) {
	if (!wp_verify_nonce($_POST['custom_js_noncename'], 'custom-js')) return $post_id;
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
	$custom_js = $_POST['custom_js'];
	update_post_meta($post_id, '_custom_js', $custom_js);
}
function insert_custom_js() {
	if (is_page() || is_single()) {
		if (have_posts()) : while (have_posts()) : the_post();
			echo '<script type="text/javascript">'.get_post_meta(get_the_ID(), '_custom_js', true).'</script>';
		endwhile; endif;
		rewind_posts();
	}
}

ピアノ(html5とJavaScriptで)

ピアノ
iPhoneで鉄琴の音を鳴らせるアプリを作りたかったのですが、自宅にMacが無いので、「Webアプリもどき」を作ってみました。
PC上では、そうでもないですが、iPhone や Androidなどのモバイル端末では反応の厳しいものしか出来ませんでした。
まだまだ研究の余地ありです。

今回は、AIで作成したデータに、SVGインタラクティブパネルでJavaScriptを指定し、SVG書き出しして活用するまでの一連の流れ

http://www.wgn.co.jp/store/blog/item-1205.html?utm_source=works&utm_medium=mailmagazine&utm_campaign=%282726%29+2%2F15%A1%A1%A5%A4%A5%C8%A5%A6%C0%E8%C0%B81

まずは、AIで普通にデータを作成します。当然ながら、複雑なオブジェクトは書き出した後にSVGのソースが長くなります。今回は、AIで作成したテキストをアウトライン化したものをSVGで書き出してみます。

作成したオブジェクトに、JavaScriptのイベントを適用したい場合に、SVGインタラクティブパネルから、イベントを設定することが可能です。
AIで作成したオブジェクトを選択しておき、SVGインタラクティブパネルから、イベントの種類を選択した後、直接記述します。イベントとは、そのオブジェクトをクリックした時にどうする、マウスカーソルを添えたときにどうする、というような動作を設定できるものです。今回は、そのオブジェクトをクリックしたときに、「イトウ先生のTipsnote」というアラートウインドウを返すように設定します。この場合は、SVGインタラクティブパネルのJavaScriptの箇所に、【alert(“イトウ先生のTipsnote”)】と書いておくだけです。外部JavaScriptと連携させる場合には、SVGインタラクティブパネルのパネルメニューから、「JavaScriptファイル…」を選択し、外部ファイルと連携させることも可能です。

●SVGで保存する

ファイルメニュー→保存を選択し、SVG形式で保存します。書き出したSVGのソースを使用してWebブラウザに表示するため、SVGプロファイルはSVG1.1を選択しておきます。SVG Tinyという形式は、携帯電話用の形式になります。

書き出したSVGファイルを、任意のテキストエディタで開き、SVGタグの有効範囲内をコピーして、HTMLファイル内にペーストし使用します。

●SVGサンプル

以下のWorksCorporationのオブジェクトが、AI CS5から書き出した、SVGのサンプルです。ブラウザの表示を拡大(SafariやFirefoxなどほとんどのブラウザは、command【Ctrl】+「+」キーで拡大表示)して、画質の劣化が無いことを確認してみましょう。
なお、IE8以前をお使いの場合には、この段落の下に何も表示されないため、IE9以降かそれ以外のブラウザで確認してみてください。
また、このオブジェクトの上でクリックし、アラートが表示されることを確認します。WorksCorporationの黒い部分で正確にクリックしてみてください。なお、ブラウザのJavaScriptが無効になっている場合には、クリックしてもアラートウインドウが表示されませんので、ブラウザの「JavaScriptを有効にする」をONにして試してみてください。

使い方は非常に簡単ですね。なんといっても、拡大しても画質の劣化が無いというのがSVGの特徴です。SVGを使用することで、画像ではできない表現が可能ですので、ぜひ活用してみてください。

もっとJavascriptを活用したい方は!
JavaScriptの基礎知識の受講がオススメです!

▼JavaScriptの基礎知識