<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>0から目指すWebマスター</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/" />
<link rel="self" type="application/atom+xml" href="http://www.allinthemind.biz/atom.xml" />
<id>tag:www.allinthemind.biz,2011-02-12://2</id>
<updated>2012-05-02T23:24:02Z</updated>
<subtitle>Webを様々な角度から切り込み、Webに関する様々な知識を学んでいくための備忘録・情報サイトです。</subtitle>
<generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.04</generator>

<entry>
<title>デバイス別、クロスブラウザ別対応 - not useragent</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/javascript/_-_not_useragent.html" />
<id>tag:www.allinthemind.biz,2012://2.1446</id>
<published>2012-05-02T23:18:58Z</published>
<updated>2012-05-02T23:24:02Z</updated>
<summary> もはや他ブラウザでも問題ないようにクロスブラザ対応だけでなく、スマートフォンや...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="Javascript" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<section>
<p>もはや他ブラウザでも問題ないようにクロスブラザ対応だけでなく、スマートフォンやタブレット端末などマルチデバイスに対応できるようになっておかなければ、という時代になって1,2年が経ちました。<br />
「プログレッシブエンハンスメント」や「グレイスフルデグラデーション」、「メディアクエリ」、「CSSスプライト」、「モバイルファースト」というキーワードも聞かれるようになりました。<br />
あ、最大のキーワードは「html5」。これは広義にも狭義にも使われてますね。</p>

<p>このような流れを受けてか、ビジュアルデザインは大きく、フォントも大きくなったサイトを見かけることが多くなった気がします。<br />
結果見やすく、アクセシビリティにも良い印象。個人的にも素材を大きくダイナミックな表現は好みなので見てて楽しいです。<br />
っとデザインの話しではなく、クロスブラウザ、マルチデバイスにどう対応するか。</p>

<h2>そのコンテンツのユーザーは誰か？をデバイスごとに考える</h2>

<p>「そのコンテンツのユーザーは誰か？」だけではなく、これからは、この問いを「デバイスごとに」しっかり考えたい。<br />
ここができなければ、そもそもあえてマルチデバイス対応する必要は「絶対ない」と思う。そんなコンテンツは制作者のスキルアップ以外、ただのリソースの無駄だ。資源は大切にしたい。</p>

<p>ここを踏まえた上で、マルチデバイス対応を考えたときに、その手法は大きく分けて2つ。</p>

<ol>
<li>デバイス別にマークアップ（each device）</li>
<li>1ソースマルチデバイス（one for all）</li>
</ol>

<h3>デバイス別にマークアップ（each device）</h3>
<p>デバイス別に表現したい内容が異なる場合や表現方法自体異なる場合に最適。<br />運用負荷は高くなってしまうが、カスタマイズする自由度は高い。</p>

<h3>1ソースマルチデバイス（one for all）</h3>
<p>PCサイトとスマートフォンサイトで見せたい内容はほぼ同じ場合に最適。<br />
htmlソースはひとつで、端末別に読み込むCSSを変えてデザインを変更するのが基本。<br />運用中、あるデバイス用にhtmlの骨格自体を修正する必要が出た場合、管理がカオスになる危険があるが、通常の運用負荷は低い。</p>


<h2>useragentを使わずにデバイス別、クロスブラウザ別対応する</h2>
<p>ぼくはCSSハックが大嫌い（大概のことはhtmlとcssを見直せばハックの必要がない）。クロスブラウザ対応と言ってユーザーエージェント使ってブラウザ別にCSSを組むなんてあり得ない（大概のことはhtmlとcssを見直せばハックの必要がない！）。<br />そんなタイプなので、デバイス判別にユーザーエージェントは使わずに対応したい。これはその後のメンテも必要ないのでハッピー。</p>
<p>と、スーパー前置きが長くなりました。いきなり本題です。</p>

<dl>
<dt>html（CSSメディアクエリ）</dt>
<dd class="quote">
&lt;link rel=&quot;stylesheet&quot; href=&quot;smartphone.css&quot; media=&quot;screen and (max-width: 480px)&quot; type=&quot;text/css&quot; /&gt;<br />
&lt;link rel=&quot;stylesheet&quot; href=&quot;smartphone.css&quot; media=&quot;screen and (max-height: 480px)&quot; type=&quot;text/css&quot; /&gt;
</dd>
<dt>javascript</dt>
<dd class="quote">
<p>if (&quot;object&quot; == typeof document.documentElement.ontouchend) {<br />
// 【type A】これはスマートフォンかタブレット端末です。<br />
}</p>
<p>if (&quot;undefined&quot; == typeof document.documentElement.style.maxHeight) {<br />
// 【type B】これはレガシーブラウザです。<br />
}</p>
</dd>
</dl>
<p>この組み合わせで、クロスブラウザ対応、マルチデバイス対応を実現できます。</p>

<table>
<thead>
<tr>
<th>&nbsp;</th>
<th style="text-align:center;">CSSメディアクエリ</th>
<th style="text-align:center;">JS</th>
</tr>
</thead>
<tbody>
<tr>
<th>スマートフォン</th>
<td style="text-align:center;">○</td>
<td style="text-align:center;">○【type A】</td>
</tr>
<tr>
<th>タブレット</th>
<td style="text-align:center;">×</td>
<td style="text-align:center;">○【type A】</td>
</tr>
<tr>
<th>レガシーブラウザ</th>
<td style="text-align:center;">△（ウィンドウサイズによる）</td>
<td style="text-align:center;">○【type B】</td>
</tr>
<tr>
<th>モダンブラウザ</th>
<td style="text-align:center;">△（ウィンドウサイズによる）</td>
<td style="text-align:center;">×</td>
</tr>
</tbody>
</table>


<p>下記は、bodyタグのid名にデバイス別に値をセットするサンプルJavaScriptです。</p>
<div class="quote">
window.onload = function () {<br />
var type_device = 'normal';<br />
if (&quot;object&quot; == typeof document.documentElement.ontouchend) {<br />
// これはスマートフォンかタブレット端末です。<br />
type_device = 'smartphoneOrTablet';<br />
} else if (&quot;undefined&quot; == typeof document.documentElement.style.maxHeight) {<br />
// これはレガシーブラウザです。<br />
type_device = 'legacy';<br />
}<br />
document.getElementsByTagName('body')[0].setAttribute('id', type_device);<br />
} 
</div>
<p>Windows PhoneなどWebkit以外のスマホが普及してきたら、IEかどうかの判別が必要になるかもですね。<br />
ちなみにIEかどうかの判別もuseragentを使わずに簡単にできます。<br />
<a href="http://www.allinthemind.biz/markup/javascript/javascriptie.html">JavaScriptでIEかどうかの判別</a></p>



<h2>さいごに</h2>
<p>スマートフォン普及の原動力、iPhone。そのAppleのサイトはスマートフォンで見るとどうなるんだろう？と思って見て、その選択に妙に納得。ピンチイン・ピンチアウトは重要なUX。運用管理の面でも最強です。</p>

</section>
]]>

</content>
</entry>

<entry>
<title>検索エンジン経由の流入を増やすなら</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/works/seo/post_11.html" />
<id>tag:www.allinthemind.biz,2012://2.1445</id>
<published>2012-02-06T06:35:50Z</published>
<updated>2012-02-06T00:15:45Z</updated>
<summary> 書籍「Google上位表示 64の法則」を踏まえて、データに基づいて「検索エン...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="SEO" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[
<p>書籍「Google上位表示 64の法則」を踏まえて、データに基づいて「検索エンジン経由での流入を増やしたい」ならを改めてまとめてみます（書籍レビュー：<a href="/study/books/google_1.html">Google検索で上位表示されるページの共通点</a>）。</p>

<ul>
<li>ページを新規作成していきましょう。</li>
<li>1ページのボリュームは400字詰め3、4枚を目安に。</li>
<li>画像を用いたら、その画像を説明するテキストを。</li>
<li>なるべく装飾語より名詞で。</li>
<li>キーワードはページ全体にまんべんなく。</li>
<li>関連キーワード（検索結果の上下にある他の候補）や類似キーワード（Reflexa：http://labs.preferred.jp/reflexa/）を多く含むコンテンツで。</li>
</ul>


<p>この辺りは今後もそう変わらない基本となるとこだと思う。<br />
以下は「現時点」での傾向と対策。</p>

<ul>
<li>メタディスクリプションは、第1、2キーワードを1回交えて70～80字程度で。</li>
<li>メタキーワードは、第1、2キーワードを交えて6～8個程度で。</li>
<li>タイトルは27文字を目安に35文字以内で、キーワードを1回冒頭に交えて。</li>
</ul>
<p>メタディスクリプションは検索順位に影響しない、とアナウンスがあったり、メタキーワードが検索順位に影響しないことが調査から分かったが、実際、検索結果10位以内にあるコンテンツの統計結果は、ちゃんとメタディスクリプションもメタキーワードも対応している。今後は不明。</p>

<ul>
<li>h1 は1つ、キーワードを含んで</li>
<li>h2 は１～4つ</li>
<li>h3 は１～4つ</li>
<li>strong　はキーワードを含めて1つ（0～4個）</li>
</ul>

<p>html5でのマークアップを考えた場合、h1タグの意味合いが変わりえることがあることを考慮すると、見出しの検索アルゴリズムは変化していくのでは（願望込めて）？</p>

<p>今後はこの辺りもウォッチしながら対応していきたい。</p>]]>

</content>
</entry>

<entry>
<title>Google検索で上位表示されるページの共通点</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/study/books/google_1.html" />
<id>tag:www.allinthemind.biz,2012://2.1444</id>
<published>2012-02-06T06:30:12Z</published>
<updated>2012-02-06T00:15:48Z</updated>
<summary> タイトル Google上位表示 64の法則 著者 藤井慎二郎 発行日 2012...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="タメになった本" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<dl class="column_book">
<dt>タイトル</dt>
<dd>Google上位表示 64の法則</dd>
<dt>著者</dt>
<dd>藤井慎二郎</dd>
<dt>発行日</dt>
<dd>2012年2月3日</dd>
<dt>値段</dt>
<dd>2,380円＋税</dd>
</dl>

<p>検索結果に上位表示されるには、外的要因と内的要因がある。<br />
そして、内的要因に手を施すのが「本来のSEO対策」であり、外的要因に対して対策を練ることはスパムであるべきだ。<br />
たとえばWebリングや相互リンクを使った外部ドメインからのバックリンクを増やすという行為は健全なSEO対策とはいえない。</p>

<p>と考えると、SEO対策でできないことは、書にも触れられているが、</p>
<ul>
<li>ドメインの取得経過日数</li>
<li>外部ドメインからのバックリンク</li>
<li>年月をかけて積み上げたページ数</li>
</ul>
<p>であり、できることは</p>
<ul>
<li>内部施策</li>
</ul>
<p>である。</p>

<p>という前置きはいいとして、実際のとこはどうなのか？<br />
250個のキーワードでGoogle検索した検索結果を50位まで収集し、分析されたのがこの本。</p>

<p>「やっぱりね」</p>

<p>で終わるわけだが、その裏づけとなるので、知識に対する自信につながった。</p>

<h2>Google上位表示 64の法則</h2>
<ul>
<li>ページランクが高いと上位表示？★★★★</li>
<li>Webサイトの重要度は「ドメイン年齢」で判断される？★★★★</li>
<li>インデックス数が多いほどSEO的に有利？★★★☆</li>
<li>本文の文字数が多いと良い？★★★☆</li>
<li>名詞が多いと上位表示？★★★☆</li>
<li>画像よりテキスト？★★★★</li>
<li>検索第1キーワードの位置は？前：★★☆☆　中：傾向あり　後：★★★★</li>
<li>検索第2キーワードの位置は？前：傾向あり　中：傾向あり　後：★★☆☆</li>
<li>検索第3キーワードの位置は？前：傾向あり　中：傾向あり　後：傾向あり</li>
<li>複合キーワードは最初の単語が重視される？★★★★</li>
<li>検索キーワード（1単語）がページ内に多くあるとよい？★★☆☆</li>
<li>検索キーワード（2単語）がページ内に多くあるとよい？1番目：★★☆☆　2番目：傾向あり</li>
<li>検索キーワード（3単語）がページ内に多くあるとよい？1番目：傾向あり　2番目：傾向あり　3番目：傾向あり</li>
<li>検索キーワードがWebサイト全体で多くあるとよい？★★★★</li>
<li>キャッシュで同色の複合語はつながりの強い組み合わせ？傾向あり</li>
<li>キャッシュで色分けされている単語はつながりの弱い複合語？傾向あり</li>
<li>関連キーワードを多く含むコンテンツを作るとよい？★★★★</li>
<li>類似キーワードを多く含むコンテンツを作るとよい？★★★★</li>
<li>メタディスクリプションは検索順位と関係ある？★★★☆</li>
<li>メタディスクリプションに検索第1キーワードを入れるとよい？★★★★</li>
<li>メタディスクリプションに検索第2キーワードを入れるとよい？★★★☆</li>
<li>メタディスクリプションに検索第3キーワードを入れるとよい？★★☆☆</li>
<li>メタキーワードは検索順位と関係ない？☆☆☆☆</li>
<li>メタキーワードに検索第1キーワードを入れるとよい？★★★☆</li>
<li>メタキーワードに検索第2キーワードを入れるとよい？★★☆☆</li>
<li>メタキーワードに検索第3キーワードを入れるとよい？☆☆☆☆</li>
<li>メタロボットでインデックスを拒否しても検索結果に表示されることがある？☆☆☆☆</li>
<li>リダイレクト元のWebページは上位表示されない？☆☆☆☆</li>
<li>CSSは外部参照がよい？傾向あり</li>
<li>JavaScriptは外部参照がよい？★★★☆</li>
<li>タイトルの文字数は35文字以内がよい？★☆☆☆</li>
<li>タイトルには検索キーワードを入れるとよい？傾向あり</li>
<li>タイトル冒頭に検索第1キーワードがあるとよい？★★★☆</li>
<li>タイトル冒頭に検索第2キーワードがあるとよい？傾向あり</li>
<li>タイトル冒頭に検索第3キーワードがあるとよい？☆☆☆☆</li>
<li>ページタイトルとh1,h2要素は同じがよい？☆☆☆☆</li>
<li>Webサイト内の各ページは異なるタイトルを付けるべき？★★☆☆</li>
<li>URLの正規化canonicalを使ってる？まだまだこれから</li>
<li>h1はページ内に１つだけがよい？傾向あり</li>
<li>h1の文字数は多すぎるとペナルティー？☆☆☆☆</li>
<li>h1に検索第1キーワードを入れるとよい？★★★☆</li>
<li>h1に検索第2キーワードを入れるとよい？☆☆☆☆</li>
<li>h1に検索第3キーワードを入れるとよい？☆☆☆☆</li>
<li>h1冒頭に検索第1キーワードがあるとよい？傾向あり</li>
<li>h1冒頭に検索第2キーワードがあるとよい？傾向あり</li>
<li>h1冒頭に検索第3キーワードがあるとよい？☆☆☆☆</li>
<li>h1はbody冒頭にあるとよい？傾向あり</li>
<li>h1は画像よりテキスト？傾向あり</li>
<li>h1は他のhnの親要素？傾向あり</li>
<li>h2が多いとよい？★★★☆</li>
<li>h2は長いとペナルティー？☆☆☆☆</li>
<li>h2に検索第1キーワードを入れるとよい？★☆☆☆</li>
<li>h2に検索第2キーワードを入れるとよい？☆☆☆☆</li>
<li>h2に検索第3キーワードを入れるとよい？☆☆☆☆</li>
<li>h2冒頭に検索第1キーワードがあるとよい？傾向あり</li>
<li>h2冒頭に検索第2キーワードがあるとよい？傾向あり</li>
<li>h2冒頭に検索第3キーワードがあるとよい？☆☆☆☆</li>
<li>h2はbody冒頭にあるとよい？傾向あり</li>
<li>h2は画像よりテキスト？　傾向あり</li>
<li>h3が多いとよい？★★★☆</li>
<li>h3は長いとペナルティー？☆☆☆☆</li>
<li>h3に検索第1キーワードを入れるとよい？☆☆☆☆</li>
<li>h3に検索第2キーワードを入れるとよい？☆☆☆☆</li>
<li>h3に検索第3キーワードを入れるとよい？☆☆☆☆</li>
<li>h4が多いとよい？☆☆☆☆</li>
<li>h4は長いとペナルティー？☆☆☆☆</li>
<li>h4に検索第1キーワードを入れるとよい？☆☆☆☆</li>
<li>h4に検索第2キーワードを入れるとよい？☆☆☆☆</li>
<li>h4に検索第3キーワードを入れるとよい？☆☆☆☆</li>
<li>hnに続けて検索キーワードに関する文章を書くとよい？★★☆☆</li>
<li>strong,bは検索エンジンにも有効？☆☆☆☆</li>
<li>strongに検索キーワードを入れるとよい？★★★★</li>
<li>bに検索キーワードを入れるとよい？★★★☆</li>
<li>alt属性の記述は検索順位に関係ある？★★★☆</li>
<li>alt属性は長いとペナルティー？☆☆☆☆</li>
<li>title属性の記述は検索順位に関係ある？☆☆☆☆</li>
<li>無意味なタグが多いと検索順位が下がる？☆☆☆☆</li>
<li>サイト内リンク切れが多いと検索順位が下がる？★★☆☆</li>
<li>サイト外リンク切れが多いと検索順位が下がる？☆☆☆☆</li>
<li>HTMLの入れ子が深いと検索順位が下がる？☆☆☆☆</li>
<li>Webサイトの階層が深いと検索順位が下がる？★★☆☆</li>
<li>302リダイレクトを使うと検索順位が下がる？★★☆☆</li>
<li>サイト内リンクが多いと検索順位が上がる？★★★☆</li>
<li>サイト外リンクは検索順位と関係ない？★★★☆</li>
<li>サイト内外のリンクバランス？ 傾向あり</li>
<li>ドメイン内★★★☆</li>
<li>ドメイン外 傾向あり</li>
<li>検索キーワードに関連するWebページへリンクを張るとよい？★☆☆☆</li>
<li>ソーシャルブックマーク数が多いと上位表示されやすい？★★★★</li>
</ul>

<p>どうして重要と判断したのか、また「傾向あり」に関してはどんな傾向なのか、そのあたりは書内で詳しく書かれている。<br />半日みっちりで読み込むことができる。</p>

<p>この本を読んで、どう実践に役立たせることができるか、記事を書いみた。<br />
<a href="/works/seo/post_11.html ">検索エンジン経由の流入を増やすなら</a></p>
]]>

</content>
</entry>

<entry>
<title>html5の要素とコンテンツモデル</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/xhtml/html5_1.html" />
<id>tag:www.allinthemind.biz,2012://2.1443</id>
<published>2012-02-02T09:27:57Z</published>
<updated>2012-02-06T07:29:37Z</updated>
<summary>html5の要素を調べたことがあれば、下図のようなものを見たことがあるかもしれな...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="(x)html" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<p>html5の要素を調べたことがあれば、下図のようなものを見たことがあるかもしれない。<br />
これは、<a href="http://dev.w3.org/html5/spec/Overview.html#element-dfn-content-model" class="newWin">W3C Editor's Draft</a>を参考に、自分なりかみ砕いたものだ。</p>
<figure style="margin:25px 0 0;padding:0;"><img src="/img/markup/xhtml_contentmodel.png" alt="コンテンツモデル概要図" /></figure>
<h2>コンテンツ・モデル</h2>
<p>html4までは「インラインレベル要素」か「ブロックレベル要素」がキーワードだったが、html5ではその概念はない。<br />
その代わり「コンテンツ・モデル」という概念を意識する必要がある。</p>
<h3>コンテンツ・モデルの種類</h3>
<p><a href="http://dev.w3.org/html5/spec/Overview.html#element-dfn-content-model" class="newWin">2012年2月1日付けのW3C　Editor's Draft</a>によると大別して7つのコンテンツ＋2に大別され、各要素は下記のいずれかに0個以上に属する。</p>
<ul>
<li>メタデータ・コンテンツ (Metadata content)</li>
<li>フロー・コンテンツ (Flow content)</li>
<li>セクショニング・コンテンツ (Sectioning content)</li>
<li>ヘッディング・コンテンツ (Heading content)</li>
<li>フレージング・コンテンツ (Phrasing content)</li>
<li>エンベッディッド・コンテンツ (Embedded content)</li>
<li>インタラクティブ・コンテンツ (Interactive content)</li>
<li>（Palpable content）</li>
<li>（Transparent content models）</li>
</ul>
<p>・・・。<br />
よく分からない。<br />
そこで理解しやすいようにざっくりかみ砕いてみた。</p>
<h2>思考回路をまじえてまとめ</h2>
<ul>
<li>「各要素は0個以上のコンテンツモデルに属する」ってことはコンテンツモデルに属さない要素があるってわけだ。果て、それはなんだろう？</li>
<li>この図に乗っていない「Palpable content」と「Transparent content」ってのがあるぞ！？これはコンテンツ・モデルではない！？</li>
<li>Sectioning root？ listed？ labelable? submittable? これらは何だ？</li>
<li>なるほど、Metadataコンテンツは、Flowコンテンツでもあったり、Phrasingコンテンツともなる要素があるのかー。</li>
<li>まずは、フローコンテンツかどうかを区別したほうがよさそうだ。</li>
</ul>
<h3>フローコンテンツではない条件</h3>
<p>語弊を承知で書くと</p>
<ul>
<li>html, head, body</li>
<li>headタグ内でしか存在しえない要素</li>
<li>ある特定の要素内でしか存在しえない要素でその要素とは親子関係である要素</li>
</ul>
<h3>ヘッディング・コンテンツは、h1～h6とhgroupだけ。</h3>
<h3>セクショニング・コンテンツは、article, aside, nav, section だけ。</h3>
<h2>というわけで</h2>
<p>これを踏まえて、上図を見てもらえると、コンテンツモデルがちょっぴり分かった気になれるかもしれません。</p>
<p>さらにまとめてみました（自分確認用なので、マルチブラウザ対応はしていませんが・・・）<br />
<a href="/sample/html5.html">html5タグ一覧</a></p>


]]>

</content>
</entry>

<entry>
<title>スマホでアドレスバーを非表示にする</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/javascript/post_10.html" />
<id>tag:www.allinthemind.biz,2011://2.1442</id>
<published>2011-12-06T08:23:51Z</published>
<updated>2011-12-06T09:14:39Z</updated>
<summary><![CDATA[ &lt;!DOCTYPE html&gt; &lt;html lang=&qu...]]></summary>
<author>
<name>たけたけ</name>
</author>

<category term="Javascript" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<section>
<div class="quote">
<p>&lt;!DOCTYPE html&gt;<br />
&lt;html lang=&quot;ja&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&quot;utf-8&quot; /&gt;<br />
&lt;title&gt;&lt;/title&gt;<br />
&lt;meta name=&quot;robots&quot; content=&quot;ALL&quot; /&gt;<br />
&lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no&quot; /&gt;<br />
&lt;meta name=&quot;format-detection&quot; content=&quot;telephone=no&quot; /&gt;<br />
&lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;apple-touch-icon.png&quot; /&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;</p>
<p>&lt;script type=&quot;text/javascript&quot;&gt;<br />
if (0 === window.pageYOffset) {<br />
setTimeout(function () {<br />
var elem_body = document.getElementsByTagName('body')[0];<br />
elem_body.style.minHeight = '2000px';<br />
setTimeout(function () {<br />
scrollTo (0,1);<br />
setTimeout(function () {<br />
elem_body.style.minHeight = window.innerHeight + 'px';<br />
},500);<br />
},500);<br />
},500);<br />
}<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
</p>
</div>


<p>スマホでアドレスバーを非表示にする。というか擬似非表示。<br />
実際は、ファイルを読み込んだら、画面をスクロールして「非表示風」にする。</p>

<h2>window.scrollTo(0,1)</h2>
<div class="quote">
<p>&lt;!DOCTYPE html&gt;<br />
&lt;html lang=&quot;ja&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&quot;utf-8&quot; /&gt;<br />
&lt;title&gt;&lt;/title&gt;<br />
&lt;meta name=&quot;robots&quot; content=&quot;ALL&quot; /&gt;<br />
&lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no&quot; /&gt;<br />
&lt;meta name=&quot;format-detection&quot; content=&quot;telephone=no&quot; /&gt;<br />
&lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;apple-touch-icon.png&quot; /&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;</p>
<p>&lt;script type=&quot;text/javascript&quot;&gt;<strong>window.scrollTo(0,1);</strong>&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</div>
<p>
これでいい気がしますが、これだとscrollToが実行されない端末が多いです。
そこで、setTimeoutを使ってタイミングをずらす。<br />
ただ、処理を開始するタイミングも重要。今のところ500ミリ秒後が自分の検証結果では安全かなと考えています（2011年12月現在）。</p>

<div class="quote">
&lt;script type=&quot;text/javascript&quot;&gt;<strong>setTimeout(function(){ window.scrollTo(0,1); } , 500);</strong>&lt;/script&gt;
</div>

<p>というわけで、これで問題ありません。</p>

<h2>ちょっとした「優しさ」アピールマークアップ</h2>
<p>ただ、コンテンツが表示領域より小さい場合はアドレスバーは表示されたままです。<br />
そこにケアしたのが、最初のサンプルです。</p>

<div class="quote">
<p>&lt;!DOCTYPE html&gt;<br />
&lt;html lang=&quot;ja&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&quot;utf-8&quot; /&gt;<br />
&lt;title&gt;&lt;/title&gt;<br />
&lt;meta name=&quot;robots&quot; content=&quot;ALL&quot; /&gt;<br />
&lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no&quot; /&gt;<br />
&lt;meta name=&quot;format-detection&quot; content=&quot;telephone=no&quot; /&gt;<br />
&lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;apple-touch-icon.png&quot; /&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;</p>
<p>&lt;script type=&quot;text/javascript&quot;&gt;<br />
if (0 === window.pageYOffset) {<br />
setTimeout(function () {<br />
var elem_body = document.getElementsByTagName('body')[0];<br />
elem_body.<strong>style.minHeight = '2000px';</strong><br />
setTimeout(function () {<br />
<strong>window.scrollTo (0,1);</strong><br />
setTimeout(function () {<br />
elem_body<strong>.style.minHeight = window.innerHeight + 'px';</strong><br />
},500);<br />
},500);<br />
},500);<br />
}<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
</p>
</div>

<p>表示領域にアドレスバーがあれば、というif文（0 === window.pageYOffset）を追加しています。</p>

<ol>
<li>コンテンツの最小高さを画面の表示領域以上の高さにする（サンプルでは2000px）。</li>
<li>window.scrollTo(0,1) でスクロールバーを見えなくする。</li>
<li>最小の高さを画面表示領域にセットする。</li>
</ol>

<p>この処理ごとにsetTimeoutを使ってタイミングをずらす（これをしないとうまく動かない端末あり）。</p>


<h2>さらに「優しさ」アピールマークアップ</h2>

<div class="quote">
<p>&lt;!DOCTYPE html&gt;<br />
&lt;html lang=&quot;ja&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&quot;utf-8&quot; /&gt;<br />
&lt;title&gt;&lt;/title&gt;<br />
&lt;meta name=&quot;robots&quot; content=&quot;ALL&quot; /&gt;<br />
&lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no&quot; /&gt;<br />
&lt;meta name=&quot;format-detection&quot; content=&quot;telephone=no&quot; /&gt;<br />
&lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;apple-touch-icon.png&quot; /&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
body{<strong>visibility:hidden;</strong>}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;
</p>
<p>&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/jquery-1.7.1.min.js&quot;&gt;&lt;/script&gt;<br />
&lt;script type=&quot;text/javascript&quot;&gt;<br />
setTimeout(function(){<br />
if (0 === window.pageYOffset) {<br />
$('body').css({'min-height':'2000px'});<br />
window.scrollTo(0,1);<br />
setTimeout(function(){<br />
<strong>$('body').css({'min-height':window.innerHeight+'px','display':'none','visibility':'visible'});</strong><br />
<strong>$('body').fadeIn();</strong><br />
},500);<br />
}<br />
},500);<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</div>

<p>jQueryを使って、スクロールバーを非表示にしてから、「ふわぁ」っとコンテンツをフェードイン表示します。<br />
こうしたおもてなしの心がUXの向上につながると嬉しいです。やりすぎは禁物ですが。。。</p>

</section>]]>
<![CDATA[<dl>
<dt>関連コンテンツ</dt>
<dd><a href="/markup/xhtml/post_9.html">スマートフォン用に最適化したサイトを作る際の＜実践＞最小マークアップ</a></dd>
</dl>]]>
</content>
</entry>

<entry>
<title>スマートフォン用に最適化したサイトを作る際の＜実践＞最小マークアップ</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/xhtml/post_9.html" />
<id>tag:www.allinthemind.biz,2011://2.1441</id>
<published>2011-12-05T06:39:54Z</published>
<updated>2011-12-06T09:14:16Z</updated>
<summary><![CDATA[ &lt;!DOCTYPE html&gt; &lt;html lang=&qu...]]></summary>
<author>
<name>たけたけ</name>
</author>

<category term="(x)html" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<section>
<div class="quote">
&lt;!DOCTYPE html&gt;<br />
&lt;html lang=&quot;ja&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&quot;utf-8&quot; /&gt;<br />
&lt;title&gt;&lt;/title&gt;<br />
&lt;meta name=&quot;robots&quot; content=&quot;ALL&quot; /&gt;<br />
&lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no&quot; /&gt;<br />
&lt;meta name=&quot;format-detection&quot; content=&quot;telephone=no&quot; /&gt;<br />
&lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;apple-touch-icon.png&quot; /&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
</div>

<h2>meta</h2>

<h3>robots,description,keywords</h3>
<p>PCと同様。あえて説明は要らんですね。</p>

<h3>viewport</h3>

<p class="quote">
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,minimum-scale=1,maximum-scale=1,user-scalable=no&quot; /&gt;
</p>

<p>スマホに最適されたコンテンツであることを前提にするので、拡大縮小の設定はオフにしています（もちろん可変にしたいときは適時値を設定）。</p>
<p>contentの値は「,」で区切る（「;」はダメ。「;」だとiOS5からwarning出るので要注意）。</p>

<p>ちなみにAndroidでは、viewportの「width」は効きません。その代わりが「target-densitydpi」です。</p>
<dl>
<dt>target-densitydpiで有効な値</dt>
<dd>device-dpi（端末依存:デフォルト いわゆるdevice-width）</dd>
<dd>high-dpi（240dpi）</dd>
<dd>medium-dpi（160dpi）</dd>
<dd>low-dpi（120dpi）</dd>
<dd>数値（70-140）</dd>
</dl>

<p>効いてたと思ってたのは、Androidでは、いわゆるdevice-widthがデフォルト設定になっているため。</p>

<p>とはいえ、<br />
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,target-densitydpi=medium-dpi&quot;&gt;<br />
と書くとiPhoneのデバッカで、「target-densitydpiなんて知らん」と怒られます。</p>


<p>参考：<a href="http://developer.android.com/reference/android/webkit/WebView.html" class="newWinIcon">http://developer.android.com/reference/android/webkit/WebView.html</a></p>


<h3>format-detection</h3>
<p class="quote">
&lt;meta name=&quot;format-detection&quot; content=&quot;telephone=no&quot; /&gt;
</p>
<p>ありがた迷惑なのが、文字列に数字が並んでいると勝手にリンクになり、その番号に電話をかけれるようになります。このデフォルト設定を無効にします。</p>
<p>電話をかえれるようにしたい場合は</p>
<p class="quote">
&lt;a href=&quot;tel:03xxxxxxxx&quot;&gt;03-xxxx-xxxx&lt;/a&gt;
</p>
<p>とマークアップします。</p>


<h2>ホームアイコン</h2>

<p class="quote">&lt;link rel=&quot;apple-touch-icon-precomposed&quot; href=&quot;apple-touch-icon.png&quot; /&gt;</p>

<p>アイコンのパスは任意。</p>
<p>いつも悩むのが画像サイズはどうしたらいいのか？とりあえず、端末やバージョン別の管理を避けるべく、これからは「114px x 114px」にしようかな、と思っています。</p>
<dl>
<dt>アイコンサイズ</dt>
<dd>iPhone 57px X 57px</dd>
<dd>iPad / android 72px X 72px</dd>
<dd>iOS4以降　114px x 114px</dd>
</dl>
<p>参考：<br />
<a href="http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW1" target="_blank" class="newWinIcon">http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW1</a><br />
<a href="http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html" target="_blank" class="newWinIcon">http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html</a></p>

</section>

]]>
<![CDATA[<dl>
<dt>関連コンテンツ</dt>
<dd><a href="/markup/javascript/post_10.html">スマホでアドレスバーを非表示にする</a></dd>
</dl>]]>
</content>
</entry>

<entry>
<title>offsetTopやらoffsetHeightやら</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/javascript/offsettopoffsetheight.html" />
<id>tag:www.allinthemind.biz,2011://2.1440</id>
<published>2011-11-28T09:30:18Z</published>
<updated>2011-11-28T09:46:51Z</updated>
<summary> コンテンツの高さだったり、ページ内の指定した要素を表示するようスクロールさせよ...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="Javascript" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<section>
<p>コンテンツの高さだったり、ページ内の指定した要素を表示するようスクロールさせようとした際とか、毎回同じことをネット検索してしまうので、ここで高さを取得する方法に限定してまとめておきます。</p>
</section>

<section>
<figure style="margin:0;padding:0;">
<img src="/img/markup/js_offsetheight.gif" alt="" />
</figure>

<dl>
<dt>①画面の表示領域</dt>
<dd class="quote">window.innerHeight</dd>
<dt>②現在表示している上部は、コンテンツ上部からどのくらい離れているか</dt>
<dd class="quote">window.pageYoffset</dd>
<dt>③指定した要素は、コンテンツ上部からどのくらい離れているか</dt>
<dd class="quote">document.getElementById('test').offsetTop</dd>
<dt>④内包されたコンテンツの高さ</dt>
<dd class="quote">document.getElementsByTagName('body')[0].offsetHeight</dd>
<dt>⑤コンテンツ全体の高さ</dt>
<dd class="quote">document.documentElement.clientHeight
</dd>
<dd class="quote">
document.documentElement.scrollHeight
</dd>
</dl>
</section>
<p>⑤ですが、自分はclientHeightを使っているのですが、scrollHeightでも同じ値が返ってくるようです（違いは勉強不足のため不明）。</p>
<p>④と⑤の違いは、大雑把に言ってしまえば、一番外側のコンテンツに対してのmargin-topとmargin-bottomを含めるかどうか。</p>
<p>クロスブラウザで問題ないか調査していませんが、とりあえずスマホやモダンブラウザでは事足ります。</p>]]>

</content>
</entry>

<entry>
<title>ファイル名を拡張子なしで取得するサンプル</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/javascript/basename_js.html" />
<id>tag:www.allinthemind.biz,2011://2.1438</id>
<published>2011-10-26T20:52:48Z</published>
<updated>2011-10-26T20:57:44Z</updated>
<summary>変数bnにhtmlファイルのファイル名を拡張子なしで取得するサンプル var b...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="Javascript" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<p>変数bnにhtmlファイルのファイル名を拡張子なしで取得するサンプル</p>
<div class="quote">
var bn = location.href.split("/");<br />
bn = bn[bn.length -1].split(".html")[0];<br />
// http://www.allinthemind.biz/markup/js/basename_js.html の場合<br />
// 
<script type="text/javascript">
var bn = location.href.split("/");
bn = bn[bn.length -1].split(".html")[0];
document.write(bn);
</script>
</div>
]]>
<![CDATA[<dl>
<dt>PHP版</dt>
<dd><a href="/markup/php/basename_php.html">ファイル名を拡張子なしで取得するサンプル</a></dd>
</dl>]]>
</content>
</entry>

<entry>
<title>ファイル名を拡張子なしで取得するサンプル</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/php/basename_php.html" />
<id>tag:www.allinthemind.biz,2011://2.1437</id>
<published>2011-10-26T20:45:09Z</published>
<updated>2011-10-26T21:00:15Z</updated>
<summary>変数bnにphpファイルのファイル名を拡張子なしで取得するサンプル $bn = ...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="php" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<p>変数bnにphpファイルのファイル名を拡張子なしで取得するサンプル</p>
<div class="quote">
$bn = basename($_SERVER['PHP_SELF'], ".php");<br />
// http://www.allinthemind.biz/markup/php/basename_php.php の場合<br />
// <?php echo(basename($_SERVER['PHP_SELF'], ".html"));?>
</div>
]]>
<![CDATA[<dl>
<dt>JavaScript版</dt>
<dd><a href="/markup/javascript/basename_js.html">ファイル名を拡張子なしで取得するサンプル</a></dd>
</dl>]]>
</content>
</entry>

<entry>
<title>ほんとの意味で「シンプル」とは？</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/study/books/post_8.html" />
<id>tag:www.allinthemind.biz,2011://2.1436</id>
<published>2011-10-26T00:16:09Z</published>
<updated>2011-10-26T00:27:26Z</updated>
<summary> タイトル 複雑さと共に暮らす　デザインの挑戦 著者 D.A.ノーマン 発行日 ...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="タメになった本" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[
<div class="column_book">
<div class="side-right" style="width:350px;">
<dl class="column_book">
<dt>タイトル</dt>
<dd>複雑さと共に暮らす　デザインの挑戦</dd>
<dt>著者</dt>
<dd>D.A.ノーマン</dd>
<dt>発行日</dt>
<dd>2011年7月28日</dd>
<dt>値段</dt>
<dd>2,800円＋税</dd>
</dl>
</div><!--/side-right-->
<div class="side-left" style="width:150px; visibility:hidden;">
</div><!--/side-left-->
</div><!--/column_book-->

<section>
<p>以下、本文内のテキストをほぼそのまま抜粋し、ポイントごとにまとめ直した。実際には、ポイントごとにより深く言及されているので、気になったら是非手に取ってほしい。<br />
とくに同著「誰のためのデザイン？」を読んだことがあれば、「シグニファイア」と「アフォーダンス」のくだりは必読だ。</p>
</section>

<section>
<h2>「なぜ、テクノロジーは複雑か？」<br />
「なぜ、ものごとはシンプルにならないのか？」</h2>

<p>それは、<strong>人生が複雑だから</strong>だ。</p>

<p>機能を減らして複雑を減らすのは容易だが、シンプルを切望する一方、複雑を必要とするのが心理。<br />
実際、モノをシンプルにすると売れなくなる。<br />
選択できるときは、より多くのことをやれるものを選ぶ。その機能が複雑さの元になることを知っていても、シンプルより機能を取るのが心理。シンプルを望むが、すばらしい機能のどれ一つも失いたくはない。<br />
生活の中では「複雑」は必要。</p>

<h3>「複雑である」ことと「分かりにくい」ことは別。</h3>
<p>「分かりにくい」ことは、悪いことだが、「複雑である」ことは、良くも悪くもない。<br />
「複雑」を減らして「分かりやすく」ではなく、<strong>「複雑」を管理して扱いやすくするのがデザイン</strong>。</p>
</section>

<section>
<h2>テクノロジーを扱いやすくするのは心理的なもの</h2>
<p>デザインを表現する前に理解しておくこと。</p>
<ul>
<li>文化間の視覚的な好みの違いを尊重する必要があり、<strong>一見したとこのろ複雑さは文化・経験によって異なる</strong>。</li>
<li>複雑さには好みの幅がある。</li>
<li>簡単すぎるのは、退屈で深みがない。</li>
<li>複雑すぎるのは、混乱させ、腹立たしい。</li>
<li><strong>人は中間的な複雑さを好む。その上、好みの幅は知識と経験によって変わる。</strong></li>
<li>複雑なものも使いやすいことがある。</li>
<li>簡単なものも分かりにくいことがある。</li>
<li>ときに複雑さを好み、ときに簡単さを望む。</li>
</ul>
<p>テクノロジーを扱いやすくするのは身体的タスクではなく、心理的なものである。</p>

<h3>知覚されるシンプルと使用上（操作上）のシンプルとは別。</h3>
<p>シンプルは、理解と強く結びついた心的状態である。<br />
モノはその動き、選択肢、外見が知覚する人の概念モデルに合っているとき、シンプルと知覚される。<br />
ぱっと見、複雑そうでも、操作のシンプルが最適化されれば、知覚されるシンプルも増す。</p>


<h3>「複雑」さへの対処は誰が？ユーザー？開発者？</h3>
<p>これは、誰の視点でシンプルであるかを測るかよって異なる。<br />
結局、シンプルであるかは心の問題。<br />
複雑なものも、それに熟達し、操作法とインタラクションの規則を理解すれば、シンプルになる。<br />
ユーザーと開発者のパートナーシップを通して、複雑さを扱えるようにできる。</p>
</section>

<section>
<h2>「複雑」を管理して扱いやすくする2つの理解</h2>
<ol>
<li>一度習得したらすべてに合点がいく基礎、根本となる論理「概念モデル」</li>
<li>能力とスキル</li>
</ol>

<h3>「概念モデル」は人の心の中にある。</h3>
<p>「概念モデル」とは、複雑な物理的実体を、利用可能な理解できる頭の中の概念に変換する助け。<br />
ただし、良い概念モデルがなくても、簡単な説明や他の真似をすることで、機器を使うことができる。</p>
<p>「分かりにくい」とは、<strong>適切な</strong>概念モデルがないこと。</p>
<p>この適切な概念モデルを与えることが良いデザインと成り得る。</p>
</section>

<section>
<h2>良いデザインとは？</h2>
<dl>
<dt>昔</dt>
<dd>主に見た目</dd>
<dt>今</dt>
<dd>機能と操作、基本的なニーズを満たすこと、ポジティブで快適な体験<br />良いインタラクション、すなわち適切なコミュニケーション
</dd>
</dl>

<h3>重要な三種類の知識状態</h3>
<dl>
<dt>現在の知識</dt>
<dd>今何が起こっているか、ゴールと出発点から見て今どこにいるのか、どんな行動が今可能なのかを知る。</dd>
<dt>過去の知識</dt>
<dd>どのようにして現在の状態に達したかを知る。</dd>
<dt>未来の知識</dt>
<dd>何を期待するかを知る。</dd>
</dl>


<h3>基本的なデザインの規則の一つ</h3>
<p>エラーメッセージを避ける。<br />
どのように動くかに関する充分な情報を提示して、何かがうまくいかないとき、問題の証拠が知覚で、可能な代替案（過去の情報、現在の情報、未来の 情報）があることを示す必要がある。<br />
どのように動くかに関する情報が不足し、何かがうまくいかないとき、間違いだと警告する代わりに、その場で直ちに修復するために必要なツールと共に問題の説明を示す。<br />
これでよりシンプルになる。</p>

</section>

<section>
<h2>複雑さを扱う二種類の基本原則</h2>

<ol>
<li>デザイナーのための規則 -複雑さを扱いやすくする-</li>
<li>対処のための規則 -我々のための規則、複雑さに対処する-</li>
</ol>

<h3 style="border:none;padding-left:0;">1.デザイナーのための規則 -複雑さを扱いやすくする-</h3>
<dl>
<dt>デザインの道具</dt>
<dd>概念モデル、シグニファイア、>組織化された構造、モジュール化、自動化</dd>
<dt>学習の道具</dt>
<dd>マニュアル、ヘルプシステム</dd>
</dl>

<h3>概念モデル</h3>
<p>デザインへの強力な含意を持つ昔からの戦略「分割して統治せよ」。<br />
グループ化して分類することにより複雑さを理解できる構造を得られる。</p>
<p>ただし、デザインの基本的要件は、モノを理解可能にすることだが、そうした優れた概念モデルだけではダメ。適切にコミュニケーションが 行われないと役に立たない。</p>

<dl>
<dt>「社交的なデザイン」</dt>
<dd>
<p>場所を孤立することによって、社会的なインタラクションを最大化している。<br />
機会を減らせば、集中と深さが増す。<br />
理解こそが、複雑なシステムをシンプルに変換する決め手。</p>

<p>機会もサービスも、デザインは社会的な活動と捉えるべきで、その活動がうまく完了するように、インタラクションの社会的性質に充分配慮されるべき。</p>
</dd>
<dd>
<p>製品デザインはかなり考慮されるようになったが、サービスデザインの研究はまだ生まれたばかり。<br />
サービスは製品のように魅力的ではない。多くの場合、何も見えるものがない。<br />
サービスデザインは手段であって、行動で分析されなければならない。</p>
</dd>
</dl>

<h3>シグニファイア</h3>
<p>（意図的であるかは関係なく）適切な行動への知覚可能なサインのこと。</p>
<p>似た概念に「アフォーダンス（生体の持つ可能性とモノの持つ可能性との間の関係性であり、実世界に存在し、行動を可能にする世界の一部）」という 概念がある。</p>
<p>
×「製品にアフォーダンスを追加した」<br />
○「製品のアフォーダンスを明確にするため、シグニファイアを追加した」</p>


<h3>構造</h3>
<p>シンプルにする方法</p>
<dl>
<dt>構造を与える。</dt>
<dd>ひとつひとつが学びやすい、取り扱いやすいモジュールへとタスクを構造化する。</dd>
<dt>再概念化する。</dt>
<dd>問題を今までとは違う枠組みで見ること。<br />
例）テレビ番組を録画する際<br />
「日付と時間、チャンネルを設定」して録画するのではなく、「番組名を設定」
して録画する。</dd>
<dt>強制選択機能</dt>
<dd>好ましくない行動を防止するための制約（負のシグニファイア）。<br />
余分な行動を防ぎ、安全上の価値ある補助。</dd>
<dt>デフォルトとナッジ（軽いひと押し）</dt>
<dd>デフォルトを使うことはシンプル。<br />
ただし、デフォルトが望ましいのはその選択に同意するときのみ。</dd>
</dl>


<h3>モジュール化 - 分割統治 -</h3>
<dl>
<dt>よくデザインされた複合機</dt>
<dt>娯楽システム</dt>
<dd>
<p>各機器ごとにリモコンがあり、煩雑した場合<br />
↓<br />
一つの製品で複数の装置を制御できる「ユニバーサル」な操作機能を与えようとする。<br />
↓<br />
知覚された複雑性と実際の複雑性を増やすだけ。<br />
↓<br />
活動中心にする（活動を選び、それに最適化した項目を表示する）
</p>
<p>実際の要求をモデル化したため、適切にモジュール化されシンプル。</p>
</dd>
</dl>

<h3>自動化</h3>

<p>シンプルにするにはもっとも有効だが、頑健で信頼できるシステムによって、機能が完全に自動化された場合に限る。
自動化が破綻すると、自動化されなかったときより、タスクは複雑になる。<br />
部分的な自動化も完全な自動化や自動化なしに比べて、切り替える際の混乱と複雑さから問題が多い。</p>



<h3>学習の補助</h3>
<p>マニュアルは、ほとんどの人が「ジャストインタイム」の学びを望んでいる。<br />
マニュアルはすばやく効率的な教示素材として用意する。<br />
短いデモにチュートリアル、そして最後に、より進んだ知識を求める人のために、すべての機能とオプションの趣旨に関する完璧な記述をできるだけイ ラスト付きで用意する。</p>



<h3 style="border:none;padding-left:0;">2.対処のための規則 -我々のための規則、複雑さに対処する-</h3>

<dl>
<dt>受け入れよ</dt>
<dd>複雑さを受け入れることを学び、それを克服することも学ぶ。<br />
複雑なものも、ひとたび適切に扱い、小部分に分割して、それぞれを比較的克服しやすくし、理解し、システムに組み込まれている手がかりを見つけて用いたとき、シンプルになる。</dd>
<dt>分割統治せよ</dt>
<dd>タスクを理解可能なモジュールに分割し、一つずつ学ぼう。<br />
達成感が得られ、次を学ぶ動機付けになる。</dd>
<dt>ジャストインタイムで学べ</dt>
<dt>理解せよ、記憶はするな</dt>
<dt>他の人をよく見よ</dt>
<dt>実世界の知識を使え</dt>
<dd>シグニファイア、アフォーダンス、制約、サイン、ラベル、マーカー、リスト</dd>
</dl>

</section>

<section>
<h2>待つことのデザイン（待ち行列の６つのデザイン原理）</h2>
<ol>
<li>概念モデルを提供する</li>
<li>待つことが適切であると受け取れるようにする</li>
<li>期待に応える、あるいはそれを上回って応える</li>
<li>人々の心をとらえておく</li>
<li>公平である</li>
<li>終わりと始まりを強調する</li>
</ol>

<h3 style="border:none;padding-left:0;">1.概念モデルを提供する</h3>
<p>対処しているという確証と安心感を与えることによって、不安を最小限にする。<br />
そのためには、良い概念モデル（これから何が起こるのかを示し、今何が起こっているのかを理解する助け）が必要。<br />
そのためには、充分なフィードバックが必要。たとえ原因不明でも「原因が分からない」という説明で適切な人が問題を認識し、対処しているところだ ということが分かり、安心を与える。</p>

<h3 style="border:none;padding-left:0;">2.待つことが適切であると受け取れるようにする</h3>
<p>なにが起こっているのかの情報と概念モデルの組み合わせがうまくいくとき、適切だと受け止められる。</p>

<h3 style="border:none;padding-left:0;">3.期待に応える、あるいはそれを上回って応える</h3>
<p>適切な行動を提案し、時間はつねに長く見積もらなければならない。<br />
嫌なものだという事実は、それをより良いものにする何かを見つけようとするきっかけになる。</p>

<h3 style="border:none;padding-left:0;">4.人々の心をとらえておく</h3>
<p>物理量と心理量の違いを理解する。<br />
そのときに知覚された時間や距離と、後で記憶に残っているものと間には大きな差異がある。</p>
<p>何かの経験をしているときには、何もすることがない時間はやることが詰まった時間よりも長いと知覚される。しかし後で思い出す と、やることがなかった時間はあった時間よりも短かったと知覚される。</p>

<h3 style="border:none;padding-left:0;">5.公平である</h3>
<p>待つことが理にかなっているように見え、誰に対しても不満がない状態が、無秩序だったり、不公平だと感じた瞬間、強い負の情動 がわき起こる。</p>

<h3 style="border:none;padding-left:0;">6.終わりと始まりを強調する</h3>
<p>常に前向きな終わり方をすること。心理学の研究「系列位置効果」によれば、列の終わりに来たとき、列に付いたとき、中ごろにい るとき、という順番で記憶に影響を与える。</p>
<p>終わりと始まりを強調し、避けられない不愉快な場面を中ごろに埋め込むことが、基本的デザイン原則を強化する。</p>

</section>

<section>
<h2>番外1</h2>

<p>顧客に提供する新機能を加えたい誘惑があり、それは複雑さが増すコストもある。</p>

<dl>
<dt>レンタルサービス業ネットフリック社にみる例</dt>
<dd>
<ol>
<li>新機能を追加</li>
<li>価値より複雑さを増してしまったと判断し、新機能停止</li>
<li>顧客による反対意見続出</li>
<li>機能復活</li>
<li>顧客満足度向上</li>
</ol>
</dd>
</dl>
<p>間違ったことをきちんと正した会社は、間違いをまったく犯したことのない会社よりも好まれる（現在の研究ではあまり支持されていないが実例とし て）。いずれにせよ、いかに顧客のことを気にかけ、行動することが重要。<br />
誠意、正直さ、個人的な配慮は大きい影響力を持つ。</p>
</section>

<section>
<h2>番外2</h2>
<p>人の振る舞いは、一見簡単そうに見えて複雑（社会的な振る舞いはなおさら）。<br />
人の振る舞いに合うようにデザインするべきであって、思い通りに振る舞わせるようにではない。<br />
使っているモノが、可視性、ナッジ（軽いひと押し）、シグニファイア、機能の強制、フィードバックを備えたときに、うまく機能する。</p>

<p>現状のままでは、私たちがテクノロジーに合わせなければならない。<br />
今こそテクノロジーが我々に合わせるように変革するとき。
デザインのコンセプト。それは、人間の立場に立ち戻り、従順なシステム、寛容なシステムを目指すことを求めることだ。
(Norman 2009a)</p>

<p>この考えを適用したクライアントは、これを「エモーショナルデザイン」と呼んだ。</p>
</section>


<section>
<h2>最後に</h2>

<p>複雑さに対する強烈な反対派であり、シンプルを強く主張してきた。<br />
しかし、問題は複雑さでなく、分かりにくさとその結果生まれる矛盾。<br />
その解決方法は、制御・表示・機能を少なくするのではなく、一貫性と理解である。</p>

<ul>
<li>「シンプル」から「複雑さとの共生」へ</li>
<li>「アフォーダンス」から「シグニファイア」へ</li>
</ul>

</section>

<section>
<h2>読んだ感想</h2>
<p>あえて言おう。</p>
<p>これからは、<strong>エモーショナルデザイン</strong>、だ。</p>

</section>

]]>

</content>
</entry>

<entry>
<title>スクロールバーのカスタマイズ</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/javascript/flexcroll.html" />
<id>tag:www.allinthemind.biz,2011://2.1435</id>
<published>2011-10-20T00:04:13Z</published>
<updated>2011-10-20T01:27:47Z</updated>
<summary> サンプル スクロールバーは、基本ブラウザが用意してるのを使えばいい、という考え...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="Javascript" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[
<p><a href="http://www.allinthemind.biz/sample/flexcroll/">サンプル</a></p>

<p>スクロールバーは、基本ブラウザが用意してるのを使えばいい、という考えでした。<br />そのため、スクロールバーのデザインをカスタマイズしたいと思ったとき、「いや、待てよ。スクロールバーを使うようなインラインフレームによる見せ方があるのでは？」と別案を模索して実装。<br />画面全体のスクロールバーであれば、別にブラウザが用意してるのでもOKな考えでした。</p>

<p>だが、しかしッ！</p>

<ul>
<li>なんかこう、こじんまりとしたサイトを作ろうと思ったとき</li>
<li>コンテンツによって情報量が異なるんだろなと想定したとき</li>
<li>ワンソースでマルチデバイス対応して、うまく見せたいとき</li>
</ul>

<p>そんなことから、スクロールバーをカスタマイズしてデザインする選択肢を持っておいたほうがいいな、と今更ながらに思い立ちました。</p>

<p>ググる。</p>

<p>あった！あった！jQueryを使ったスクロールバーのカスタマイズ、サンプル</p>

<ul>
<li><cite><a href="http://manos.malihu.gr/jquery-custom-content-scroller" class="newWin">jquery custom content scroller</a></cite></li>
<li><cite><a href="http://jscrollpane.kelvinluck.com/" class="newWin">jScrollPane</a></cite></li>
</ul>

<p>これこれ！素晴らしいー！<br />
でも読み込むJSやらCSSやら多くて、カスタマイズもなんか難しそう。jqueryのライブラリを各最新版にしたら、動かなくなってしまって。。。<br />もっとシンプルにいきたくてさらにググる。</p>

<p>見つけたッ！自分にとってはこれがベストぉ！</p>

<p><cite><a href="http://www.hesido.com/web.php?page=customscrollbar" class="newWin">fleXcroll</a></cite></p>

<p>このライブラリ「fleXcroll」を使って、さらにスッキリさせました。<br />読み込むファイルはJS1ファイルだけっていうのと、CSSでの指定もしやすくいと嬉し。</p>

<p><a href="http://www.allinthemind.biz/sample/flexcroll/">サンプル</a></p>]]>

</content>
</entry>

<entry>
<title>html5でマークアップするときの最小設定</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/xhtml/html5.html" />
<id>tag:www.allinthemind.biz,2011://2.1434</id>
<published>2011-10-17T03:17:02Z</published>
<updated>2011-10-17T03:46:32Z</updated>
<summary><![CDATA[1ファイルにまとめると &lt;!DOCTYPE html&gt; &lt;ht...]]></summary>
<author>
<name>たけたけ</name>
</author>

<category term="(x)html" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<h2>1ファイルにまとめると</h2>
<div class="quote">
&lt;!DOCTYPE html&gt;<br />
&lt;html lang=&quot;ja&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&quot;utf-8&quot; /&gt;<br />
&lt;title&gt;&lt;/title&gt;<br />
&lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
<strong>section{display:block;}</strong><br />
&lt;/style&gt;<br />
&lt;script type=&quot;text/javascript&quot;&gt;<br />
<strong>(function(){<br />
if(!/*@cc_on!@*/0)return;<br />
var e = &quot;abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,figcaption,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video&quot;.split(',');<br />
for(var i=0;i&lt;e.length;i++){document.createElement(e[i]);}<br />
})();</strong><br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
</div>

<h3>html</h3>
<ul>
<li>html5は、xhtml1とhtml4から派生してできたので、書式はどちらでも可（例：&lt;img /&gt; でも &lt;img&gt; でもよい）。<br />（管理上どちらかに統一すべき。個人的にはxhtmlに慣れているので、特別な理由がない限りxhtmlの書式で書いていくかな。</li>
<li>styleやscriptのtype属性も、html5では、CSS、JavaScriptであれば不要。<br />ただ、念のため指定しておく。</li>
</ul>

<h3>CSS</h3>
<ul>
<li>html5で追加されたタグは、display、margin、paddingの設定をする。<br />とりあえず、sectionしか指定していないが、html5の要素を使う場合は、都度。<br />
※ブラウザによって、インラインレベル要素として認識するため。<br />
※ブラウザによって、デフォルトmargin, paddingが設定されるため。<br />
※html5では、inline、blockの概念がなくなったため、aタグ要素の中に pタグ要素 という書き方もvalid。</li>
</ul>

<h3>JavaScript</h3>
<ul>
<li>ゆくゆくは不要となるだろうが、現時点でクロスブラウザ対応させるためのJavaScript。<br />
※タグ要素にCSSを充てても有効にならない場合、ここにそのタグ要素があるか確認するといいかも。<br />
<cite>参考：<a href="http://remysharp.com/2009/01/07/html5-enabling-script/" class="newWinIcon">http://remysharp.com/2009/01/07/html5-enabling-script/</a></cite></li>
</ul>

<h2>CSSとJavaScirptを外部化すれば</h2>

<div class="quote">
&lt;!DOCTYPE html&gt;<br />
&lt;html lang=&quot;ja&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta charset=&quot;utf-8&quot; /&gt;<br />
&lt;title&gt;&lt;/title&gt;<br />
&lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;<br />
&lt;meta name=&quot;keywords&quot; content=&quot;&quot; /&gt;<br />
&lt;link rel=&quot;stylesheet&quot; href=&quot;xxx.css&quot; /&gt;<br />
&lt;script type=&quot;text/javascript&quot; src=&quot;xxx.js&quot;&gt;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;
</div>
<p>※外部CSSとJSは省略</p>
<p>DOCTYPE宣言とか書く必要もなくなり、かなりすっきり！<br />上記を踏まえれば、すべてのブラウザで、html5で追加された要素を使ってマークアップすることができる。</p>
気をつける点はCSS3を使った実装。<br />ここに関しては、ターゲットブラウザをしっかり確認して、そのブラウザ内での動作検証はしっかりする必要がある。またプログレッシブ・エンハンスメントの適用に同意をもらうことも大事ですね。<br />ただ、<strong>プログレッシブ・エンハンスメントの適用の同意は、角丸を例に、表示速度と閲覧機会損失が比例することを説明する</strong>ことで得やすいのではないでしょうか。</p>
]]>

</content>
</entry>

<entry>
<title>「アイデア浮かばねー」の答え</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/study/books/post_7.html" />
<id>tag:www.allinthemind.biz,2011://2.1433</id>
<published>2011-10-04T07:30:54Z</published>
<updated>2011-10-04T07:31:50Z</updated>
<summary> タイトル アイデアのつくり方 著者 ジェームス・W．ヤング 発行日 1988年...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="タメになった本" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<section>

<aside class="column_book">
<dl class="column_book">
<dt>タイトル</dt>
<dd>アイデアのつくり方</dd>
<dt>著者</dt>
<dd>ジェームス・W．ヤング</dd>
<dt>発行日</dt>
<dd>1988年4月8日</dd>
<dt>値段</dt>
<dd>816円＋税</dd>
</dl>
</aside>

<p>1988年に発売されていながらも、今も色あせない根本論ともいうべき形。<br />
「アイデア浮かばねー」ってときにこの考えで我にかえります。<br />
60分で読み終わるけど、抽象的な言葉ゆえに不変です。</p>

<h2>アイデアは才能なのか？</h2>
<p>人は二極化できる。</p>
<ul>
<li>新しい組み合わせの可能性に「つねに夢中」になっている</li>
<li>型にはまった、着実にものごとをやる、想像力に乏しい、保守的</li>
</ul>
<p>アイデアは才能ではなく、既存の要素を事物の関連性を見つけ出し、新しく組み合わせることである。</p>
<p>このスキルは<strong>社会学</strong>を鍛錬することで習得できる。</p>

<ol>
<li><strong>資料を収集する</strong>
<dl>
<dt>当面の仕事</dt>
<dd>すべての製品とある種の消費者との間に、「関連の特殊性」を見つけるまで粘り強く。</dd>
<dt>生涯にわたる仕事</dt>
<dd>一般的知識を得る</dd>
</dl>
<p>「当面の仕事」＋「生涯にわたる仕事」＝　<strong>アイデア</strong></p>
</li>
<li><strong>資料を咀しゃくする</strong>
<p>様々な視点で眺め意味を探すというより、意味の声に耳をかたむけ、あれやこれやと吟味していると、やがて絶望状態になる。</p>
</li>
<li><strong>問題を完全に放棄して、想像力や感情を刺激する</strong></li>
<li>自然にアイデアは生まれる</li>
<li>理解ある人々の批判を仰ぎ、アイデアの具体化を展開</li>
</ol>



</section>
]]>

</content>
</entry>

<entry>
<title>Javascriptでカレンダーを作ってみた</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/javascript/calendar.html" />
<id>tag:www.allinthemind.biz,2011://2.1432</id>
<published>2011-08-12T00:05:33Z</published>
<updated>2011-08-12T00:38:50Z</updated>
<summary> ポイントは、「その年月のカレンダーのその日は第何週なのか、第何曜日なのか、何日...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="Javascript" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<section>
<p>ポイントは、「その年月のカレンダーのその日は第何週なのか、第何曜日なのか、何日なのか」をJavaScriptで生成し、祝祭日はCSSで指定していること。</p>
<p>サンプル：<a href="/sample/calendar/calendar.html">Javascriptでカレンダーを作ってみた（基本）</a>
<figure style="margin:10px 0 0;padding:0;"><img src="/sample/calendar/calendar_sample.png" alt="年月カレンダー" /><br /><figurecaption>サンプルキャプチャ</figurecaption></figure></p>

<dl>

<dt>html</dt>
<dd class="quote">
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;<br />
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;<br />
&lt;style type=&quot;text/css&quot;&gt;<br />
下記CSS<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;script type=&quot;text/javascript&quot;&gt;<br />
下記JavaScript<br />
&lt;/script&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt; 
</dd>

<dt>CSS</dt>
<dd class="quote">
.month1 .date1,/* 元日 */<br />
.month1 .mon2,/* 成人の日 */<br />
.month2 .date11,/* 建国記念の日 */<br />
.month4 .date29,/* 昭和の日 */<br />
.month5 .date3,/* 憲法記念日 */<br />
.month5 .date4,/* みどりの日 */<br />
.month5 .date5,/* こども日 */<br />
.month7 .mon3,/* 海の日 */<br />
.month9 .mon3,/* 敬老の日 */<br />
.month10 .mon2,/* 体育の日 */<br />
.month11 .date3,/* 文化の日 */<br />
.month11 .date23,/* 勤労感謝の日 */<br />
.month12 .date23,/* 天皇誕生日 */<br />
#d20110321,/* 春分の日（年によって異なる 20日 - 21日） */<br />
#d20110923,/* 秋分の日（年によって異なる 20日 - 24日） */<br />
.sun1,<br />
.sun2,<br />
.sun3,<br />
.sun4,<br />
.sun5{background:#F9C;color:#fff;}
</dd>

<dt>JavaScript</dt>
<dd class="quote">
<p>//　取得したい年月設定（とりあえずPC時間の今日の年月）<br />
var y = new Date().getFullYear();<br />
var m = new Date().getMonth()+1;</p>
<p>// 初期設定 <br />
var feb_date = (y%4 == 0 &amp;&amp; y%100 != 0)?29:28;<br />
if(y%400 == 0){feb_date = 29};<br />
var month_count = {1:31,2:feb_date,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}<br />
var day_en = {d0:&quot;sun&quot;,d1:&quot;mon&quot;,d2:&quot;the&quot;,d3:&quot;wed&quot;,d4:&quot;thu&quot;,d5:&quot;fri&quot;,d6:&quot;sat&quot;};<br />
var m_display = (m&lt;10)?&quot;0&quot;+String(m):m; <br />
var last_day = new Date(y,m-1,month_count[m]).getDay();<br />
var first_day = new Date(y,m-1,1).getDay();<br />
var w = 1;<br />
var d = first_day;</p>
<p>// マークアップ生成<br />
var txt = &quot;&quot;;<br />
txt += '&lt;h1&gt;' + y + '年' + m_display + '月のカレンダー&lt;/h1&gt;';<br />
txt += '&lt;table summary=&quot;' + y + '年' + m_display + '月のカレンダー&quot; class=&quot;calendar month' + m + '&quot;&gt;';<br />
txt += '&lt;tr&gt;';<br />
txt += '&lt;th&gt;SUN&lt;/th&gt;';<br />
txt += '&lt;th&gt;MON&lt;/th&gt;';<br />
txt += '&lt;th&gt;TUE&lt;/th&gt;';<br />
txt += '&lt;th&gt;WED&lt;/th&gt;';<br />
txt += '&lt;th&gt;THU&lt;/th&gt;';<br />
txt += '&lt;th&gt;FRI&lt;/th&gt;';<br />
txt += '&lt;th&gt;SAT&lt;/th&gt;';<br />
txt += '&lt;/tr&gt;';<br />
txt += '&lt;tr class=&quot;week1&quot;&gt;';<br />
for(var j=0;j&lt;first_day;j++){<br />
txt += '&lt;td&gt;&amp;nbsp;&lt;/td&gt;';<br />
}<br />
for(var i=1;i&lt;=month_count[m];i++){<br />
if(d != 0 &amp;&amp; (first_day + i)%7 == 1){<br />
w++;<br />
d = 0;<br />
txt += '&lt;/tr&gt;'; <br />
txt += '&lt;tr class=&quot;week' + w + '&quot;&gt;';<br />
}<br />
var i_display = (i&lt;10)?&quot;0&quot;+String(i):i;<br />
<br />
day_count = (i%7 == 0)? Math.floor(i/7) : Math.floor(i/7) + 1 ;<br />
txt += '&lt;td id=&quot;d' + y + m_display + i_display + '&quot; class=&quot;' + day_en['d'+d] + day_count + ' date' + i + '&quot;&gt;' + i + '&lt;/td&gt;';<br />
d++;<br />
}<br />
<br />
for(var j=0;j&lt;(6-last_day);j++){<br />
txt += '&lt;td&gt;&amp;nbsp;&lt;/td&gt;\n';<br />
}<br />
txt += '&lt;/tr&gt;';<br />
txt += '&lt;/table&gt;';</p>
<p>// 書き出し<br />
document.write(txt);</p>
</dd>
</dl>

<h2>JavaScriptの流れ</h2>
<ol>
<li>取得したい年月の設定
<div class="quote">
var y = new Date().getFullYear();<br />
var m = new Date().getMonth()+1;
</div>
</li>
<li>その年月の日数を設定
<div class="quote">
<p><strong>閏年チェック</strong><br />
var feb_date = (y%4 == 0 &amp;&amp; y%100 != 0)?29:28;<br />
if(y%400 == 0){feb_date = 29};</p>
<p>var month_count = {1:31,2:feb_date,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}</p>
</div>
</li>
<li>曜日の文字列設定
<div class="quote">
var day_en = {d0:&quot;sun&quot;,d1:&quot;mon&quot;,d2:&quot;the&quot;,d3:&quot;wed&quot;,d4:&quot;thu&quot;,d5:&quot;fri&quot;,d6:&quot;sat&quot;};
</div>
</li>
<li>月の0付き表示設定（例：1月であれば「01」）
<div class="quote">var i_display = (i<10)?"0"+String(i):i;</div>
</li>
<li>その年月の最終日は何曜日かを設定
<div class="quote">var last_day = new Date(y,m-1,month_count[m]).getDay();</div>
</li>
<li>その年月の1日は何曜日か、第1週目で、1日であることを設定
<div class="quote">
var first_day = new Date(y,m-1,1).getDay();<br />
var w = 1;<br />
var d = first_day;
</div>
</li>
<li>マークアップ生成<br />
<div class="quote">
<p>・・・<br />
txt += '&lt;tr class=&quot;week1&quot;&gt;';</p>

<p><strong>//その年月の1日がはじまる曜日までの空白セル生成</strong><br />
for(var j=0;j&lt;first_day;j++){<br />
txt += '&lt;td&gt;&amp;nbsp;&lt;/td&gt;';<br />
}</p>

<p><strong>//その年月の日数分ループ処理</strong><br />
for(var i=1;i&lt;=month_count[m];i++){</p>

<p><strong>//土曜日と日曜日の間の処理</strong><br />
if(d != 0 &amp;&amp; (first_day + i)%7 == 1){<br />
w++; //第何週か<br />
d = 0; //曜日、日曜にリセット<br />
txt += '&lt;/tr&gt;'; <br />
txt += '&lt;tr class=&quot;week' + w + '&quot;&gt;';<br />
}</p>

<p><strong>//日の0付き表示設定（例：1日であれば「01」）</strong><br />
var i_display = (i&lt;10)?&quot;0&quot;+String(i):i;</p>

<p>
day_count = (i%7 == 0)? Math.floor(i/7) : Math.floor(i/7) + 1 ;<br />
txt += '&lt;td id=&quot;d' + y + m_display + i_display + '&quot; class=&quot;' + day_en['d'+d] + day_count + ' date' + i + '&quot;&gt;' + i + '&lt;/td&gt;';<br />
<strong>//表示例：&lt;td id=&quot;d20110801&quot; class=&quot;mon1 date1&quot;&gt;1&lt;/td&gt;</strong><br />id属性値は西暦からはじまるユニーク、class属性値は、第何曜日かと日付を指定。<br />
d++;
</p>

<p><strong>}</strong></p>

<p><strong>//その年月の最終日以降の空白セル生成</strong><br />
  for(var j=0;j&lt;(6-last_day);j++){<br />
txt += '&lt;td&gt;&amp;nbsp;&lt;/td&gt;';<br />
}</p>

<p>txt += '&lt;/tr&gt;';<br />
・・・</p>
</div>
</li>
</ol>

<h2>やってみて</h2>
<p>サンプル：<a href="/sample/calendar/calendar.html">Javascriptでカレンダーを作ってみた（基本）</a></p>
<p>もし振替休日とかに対応しようとしたら、すべてJavascriptで処理し、祭日にholidayとかclass名追加してやったほうがいいかも<br />
これを踏まえて、イベントカレンダーなるもの作ってみようかと思いますー</p>

</section>


<aside class="prerequisite">
<h2>この記事の動作確認環境</h2>
<table cellspacing="0" border="1" summary="この記事の対象Windowsブラウザ">
<caption>Windows7</caption>
<thead>
<tr>
<th scope="col">IE8</th>
<th scope="col">Firefox5</th>
<th scope="col">Google Chrome 13</th>
<th scope="col">Opera11</th>
</tr>
</thead>
<tbody>
<tr>
<td>○</td>
<td>○</td>
<td>○</td>
<td>○</td>
</tr>
</tbody>
</table>
<table cellspacing="0" border="1" summary="この記事の対象Macブラウザ">
<caption>Mac OS 10.6</caption>
<thead>
<tr>
<th scope="col">Safari5</th>
<th scope="col">Firefox5</th>
</tr>
</thead>
<tbody>
<tr>
<td>○</td>
<td>○</td>
</tr>
</tbody>
</table>
<h3>html宣言</h3>
<dl>
<dt>バージョン</dt>
<dd>html4.01 transitional</dd>
</dl>
<!--.prerequisite--></aside>]]>

</content>
</entry>

<entry>
<title>borderで背景画像を表示する border-image</title>
<link rel="alternate" type="text/html" href="http://www.allinthemind.biz/markup/css/border_border-image.html" />
<id>tag:www.allinthemind.biz,2011://2.1430</id>
<published>2011-04-21T23:13:09Z</published>
<updated>2011-04-22T01:16:44Z</updated>
<summary> border-imageは、一枚の画像で9スライスのデザインが実現できちゃうと...</summary>
<author>
<name>たけたけ</name>
</author>

<category term="CSS" scheme="http://www.sixapart.com/ns/types#category" />


<content type="html" xml:lang="ja" xml:base="http://www.allinthemind.biz/">
<![CDATA[<section>

<p>border-imageは、一枚の画像で9スライスのデザインが実現できちゃうという優れもの。</p>

<p>残念ながらIE8以下で適用できず、実際にはまだ使えないかなーという印象。プログレッシブエンハンスメントを適用してうまく見せるのは結構難しそうだなー、という感触。<br />
とはいえせっかく調査したので備忘録。<br />
<a href="/sample/border-image.html">border-image を使ったサンプル</a></p>

<h2>仕様</h2>
<dl>
<dt>border-image-source</dt>
<dd>none（初期値）/ url(画像パス)</dd>
<dt>border-image-slice</dt>
<dd>100％（初期値）/ 数値 / ○○% / 数値 fill / ○○% fill</dd>
<dt>border-image-width</dt>
<dd>1（初期値）/ ○○px / ○○% / auto</dd>
<dt>border-image-outset</dt>
<dd>0（初期値）/ 数値? px?</dd>
<dt>border-image-repeat</dt>
<dd>stretch（初期値）/ repeat / round / space</dd>
</dl>
<p><strong>一気書き</strong></p>
<dl>
<dt>border-image</dt>
<dd>{ border-image-source } { border-image-slice } / { border-image-width } / { border-image-outset } { border-image-repeat }</dd>
</dl>
<h3>現段階（2011年4月20日現在）で試して気になった点</h3>
<ul>
<li>必須は、border-image-source と border-image-slice と border-image-width。<br />
border-image-widthは、border-widthで代用できる。</li>
<li>個別にプロパティとその値を指定しても（たとえば、border-image-source:url(xxx.png);border-image-slice:xx; のような）適用されないため、border-image として一気に指定する必要がある。</li>
<li>border-image-outsetは現段階で対応するブラウザはないばかりか、指定するとborder-imageが無効になるので指定しないよう気をつける（実際、border-image-outsetの効果は未確認）。</li>
<li>Opera 11.10 では、border-image-repeatを指定するときは、border-image-widthの指定は4方向（上 右 下 左）指定する必要がある。</li>
<li>プリフィックスを付けないと対応しない（対応確認ブラウザは本記事下参照）。</li>
</ul>
<h3>これらを踏まえると border-image の指定方法は以下。</h3>
<div class="quote">
background-image:{ border-image-source } { border-image-slice } / { border-image-width } { border-image-repeat };<br />
<strong>-moz-</strong>background-image:{ border-image-source } { border-image-slice } / { border-image-width } { border-image-repeat };<br />
<strong>-webkit-</strong>background-image:{ border-image-source } { border-image-slice } / { border-image-width } { border-image-repeat };<br />
<strong>-o-</strong>background-image:{ border-image-source } { border-image-slice } / { border-image-width } { border-image-repeat };
</div>
<p>スマートフォン（iPhone, Android）限定なら</p>
<div class="quote">
background-image:{ border-image-source } { border-image-slice } / { border-image-width } { border-image-repeat };<br />
<strong>-webkit-</strong>background-image:{ border-image-source } { border-image-slice } / { border-image-width } { border-image-repeat };<br />
</div>
<p>というわけで、背景画像を用意してサンプル。<br /><img src="/img/markup/css_border_image_arrow.png" alt="" /></p>
<h2>サンプル</h2>
<dl>
<dd><div style="display:inline-block;line-height:40px;color:#fff;border-image: url(/img/markup/css_border_image_arrow.png) 23 82 23 26 / 23px 82px 23px 26px;-moz-border-image: url(/img/markup/css_border_image_arrow.png) 23 82 23 26 / 23px 82px 23px 26px;-webkit-border-image: url(/img/markup/css_border_image_arrow.png) 23 82 23 26 / 23px 82px 23px 26px;-o-border-image: url(/img/markup/css_border_image_arrow.png) 23 82 23 26 / 23px 82px 23px 26px;">サンプルサンプルサンプルサンプル</div></dd>
<dt>html</dt>
<dd class="quote">
&lt;div class=&quot;sample&quot;&gt;サンプルサンプルサンプルサンプル&lt;/div&gt;
</dd>
<dt>css</dt>
<dd class="quote">
.sample{<br />
display:inline-block;<br />
line-height:40px;<br />
color:#fff;<br />
border-image: url(/img/markup/css_border_image_arrow.png) 23 82 23 26 / 23px 82px 23px 26px;<br />
<strong>-moz-</strong>border-image: url(/img/markup/css_border_image_arrow.png) 23 82 23 26 / 23px 82px 23px 26px;<br />
<strong>-webkit-</strong>border-image: url(/img/markup/css_border_image_arrow.png) 23 82 23 26 / 23px 82px 23px 26px;<br />
<strong>-o-</strong>border-image: url(/img/markup/css_border_image_arrow.png) 23 82 23 26 / 23px 82px 23px 26px;<br />
}
</dd>
</dl>
<p>これは便利！！！</p>
<p>
いろいろテストしました。実際にソースと見比べながらのほうがイメージ掴めます。<br />
<a href="/sample/border-image.html">border-image を使ったサンプル</a></p>

<aside class="prerequisite">
<h2>この記事の動作確認環境</h2>
<table summary="この記事の対象Windowsブラウザ" border="1" cellspacing="0">
<caption>Windows7</caption>
<thead>
<tr>
<th>IE 8</th>
<th>Chrome 10</th>
<th>Firefox 4</th>
<th>Opera 11.10</th>
<th>Safari 5</th>
</tr>
</thead>
<tbody>
<tr>
<td>×</td>
<td>△（※）</td>
<td>△（※）</td>
<td>△（※）</td>
<td>△（※）</td>
</tr>
</tbody>
</table>
<p>※ プリフィックスが必要</p>
<!--.prerequisite--></aside>

</section>
]]>
<![CDATA[<dl>
<dt>参考</dt>
<dd><a href="http://www.w3.org/TR/css3-background/#border-images" class="newWinIcon">W3C モジュール（背景とボーダー）</a></dd>
<dd>Web Designing 2011/4</dd>
</dl>]]>
</content>
</entry>

</feed>

