<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>No.1026 &#187; css</title>
	<atom:link href="http://no1026.com/archives/tag/css/feed" rel="self" type="application/rss+xml" />
	<link>http://no1026.com</link>
	<description>CSSのこととかwebのこととか何となく書きたいことを書くところ</description>
	<lastBuildDate>Sun, 23 Mar 2014 15:02:00 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8.11</generator>
	<item>
		<title>kss-nodeのテンプレート作った</title>
		<link>http://no1026.com/archives/481</link>
		<comments>http://no1026.com/archives/481#comments</comments>
		<pubDate>Wed, 18 Dec 2013 02:29:50 +0000</pubDate>
		<dc:creator><![CDATA[1026]]></dc:creator>
				<category><![CDATA[何か作った話]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[KSS]]></category>
		<category><![CDATA[styleguide]]></category>

		<guid isPermaLink="false">http://no1026.com/?p=481</guid>
		<description><![CDATA[webの中心でスタイルガイドの必要性が叫ばれていまして、あのCodeGridでもStyleDocco、KSSの導入方法が立て続けに紹介されている今日このごろ。 そんな中、StyleDocco、KSSはともかく、kss-n [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>webの中心でスタイルガイドの必要性が叫ばれていまして、あの<a href="https://app.codegrid.net/" target="_blank">CodeGrid</a>でもStyleDocco、KSSの導入方法が立て続けに紹介されている今日このごろ。</p>

<p>そんな中、StyleDocco、KSSはともかく、kss-nodeのデフォルトテンプレートが非常に残念な感じになっており、「悪くないのにこれじゃあ導入しにくい」なんて方もいらっしゃるのではないでしょうか。</p>

<p>かくいう私も、先日twitterにて「kss-nodeのデフォルトテンプレートが微妙すぎるのに、探しても全然見つからない。もっと、みんな作って公開すればいいのに。githubのとかいいよねぇ」的なことを話していたところ、CSSプログラマーに「<a href="https://twitter.com/GeckoTang/status/409907638835482624" target="_blank">おぬしがつくれば</a>」と言われてしまいました。<br />その場では聞こえないふりをしたのですが、結局作ってしまいました。</p>

<h2>kss-node-template-such-as-github</h2>

<p><a href="https://github.com/1026/kss-node-template-such-as-github" target="_blank">kss-node-template-such-as-github</a></p>

<p>GitHubのようなkss-nodeテンプレート。何のひねりもない名前です。</p>

<p>kss-nodeとはなんぞやということや、使い方は割愛します。<br />知らない方はググってください。<p>
<p>石本さんがgrunt-plugin化した<a href="http://qiita.com/t32k/items/9e03e80061de21411765">grunt-kss</a>を作っていたんで、grunt導入済みの方はそちらをご利用になると便利かもしれません。</p>

<p>微妙に余計なpタグが入ってきていてinlineにしてやったりと、無理やりっぽいところはありますが、とりあえずKSS・githubのスタイルガイドにそっくりです。<br />素敵です。</p>

<p>著作権とかライセンスとか的なところが気になりますが、とりあえず公開します。<br />なにかあれば、適当にPull Requestでも送ってくださっても、自分だけこっそり直して使っていただいても構いません。</p>

<p>怒られたら消します。</p>
]]></content:encoded>
			<wfw:commentRss>http://no1026.com/archives/481/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>displayについて本気出してW3Cの仕様書読んでみた</title>
		<link>http://no1026.com/archives/455</link>
		<comments>http://no1026.com/archives/455#comments</comments>
		<pubDate>Sat, 07 Dec 2013 15:00:21 +0000</pubDate>
		<dc:creator><![CDATA[1026]]></dc:creator>
				<category><![CDATA[技術的な話]]></category>
		<category><![CDATA[Advent Calendar]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[display]]></category>

		<guid isPermaLink="false">http://no1026.com/?p=455</guid>
		<description><![CDATA[こんばんは。 CSS Property Advent Calendar 2013 8日目のエントリーです。 非常に地味な display のお話です。 なお、flexboxの話をし出すと、それだけで1エントリーくらいの分 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>こんばんは。<br />
<a href="http://www.adventar.org/calendars/57" target="_blank">CSS Property Advent Calendar 2013</a> 8日目のエントリーです。 </p>

<p>非常に地味な display のお話です。 <br />
なお、flexboxの話をし出すと、それだけで1エントリーくらいの分量になってしまうので、css2.1までの話をします。 <br />
flexbox関係は昨日担当の富田さんがまとめてくれてるので、そちらを参考にしましょう。<br />
<a href="http://tech.naver.jp/blog/?p=2479" target="_blank">flexboxの旧仕様、改定仕様、現行仕様の一覧 «  LINE Engineers&#8217; Blog</a></p>

<p>では、まずブロックとインラインを理解するためにボックスモデルから復習していきます。</p>

<h2>ボックスの種類</h2>

<p>w3cの仕様書では先に「ブロックレベル要素とブロックボックス」次に「インラインレベル要素とインラインボックス」といった感じで説明されていますが、ちょっと趣向を変えて、ブロックとインラインを対比しながら見てみます。</p>

<h3>ブロックレベル要素とインラインレベル要素</h3>

<p>ボックスのレベルの話。</p>

<h4>ブロックレベル要素</h4>

<p>ブロックレベル要素は、ソース文書でブロック（段落など）として視覚的にフォーマットされた要素のことです。 <br />
‘display’プロパティの’block’、’list-item’、’table’値は、要素をブロックレベルにします。 <br />
御存知の通り、ブロックレベル要素は縦方向にスタックされていきます。</p>

<h4>インラインレベル要素</h4>

<p>インラインレベル要素はソース文書のうち新しい内容ブロック整形しない要素であり、内容は複数行にまたがります。（たとえば、段落内の文字強調や、インライン画像など）。 <br />
‘display’プロパティの’inline’、 ‘inline-table’、’inline-block’値は、要素をインラインレベルにします。</p>

<h3>ブロックボックスとインラインボックス</h3>

<p>実際に生成されるブロック整形コンテキストに関わるボックスの話。</p>

<h4>ブロック</h4>

<h5>ブロックレベルボックス</h5>

<p>ブロックレベルボックスは、ブロックレベル要素によって生成されたボックスです。 <br />
各ブロックレベル要素は、子孫ボックスや生成されたコンテンツが含まれており、また、任意の位置決め方式に関与するボックスである主ブロックレベルボックスを生成します。</p>

<p>一部のブロックレベル要素（’list-item’要素）は、主ブロックレベルボックスに加えて追加のボックス（マーカーボックス。簡単に言うと’list-style-type’とか’list-style-image’で決めるもの）を生成することがあります。この追加ボックスは主ボックスを基準にして配置されます。</p>

<h5>ブロックコンテナボックス</h5>

<p>置換要素とテーブルボックスを除くブロックレベルボックスは、ブロックコンテナボックスでもあります。 <br />
ブロックコンテナボックスはブロックレベルボックスのみを含むか、**インラインレベルボックスのみを含みます（匿名ブロックボックスと匿名インラインボックスの話）。 <br />
ブロックレベルボックスとブロックコンテナボックスは別で、すべてのブロックコンテナボックスがブロックレベルボックスとは限りません。 <br />
非置換テーブルセルや非置換インラインブロックは、ブロックレベルボックスではありませんが、ブロックコンテナでです。</p>

<p>ブロックコンテナでもあるブロックレベルボックスをブロックボックスと呼びます。</p>

<p>非常に雑な言い方をすれば、ブロックレベルボックスがボックスの外側の話でブロックコンテナボックスがボックスの内側の話と言う感じでしょうか。</p>

<p>（置換要素：img, button, input, object等、当該要素の属性に入力される値などによって内容が置き換えられ、その寸法で認識される要素）</p>

<h4>インライン</h4>

<h5>インラインレベルボックス</h5>

<p>インラインレベルボックスはインラインレベル要素によって生成されるボックスです。
これは、インライン整形コンテキストに加わるために、ボックスとして定義されたものです。</p>

<h5>インラインボックス</h5>

<p>インラインボックスは、インラインレベルボックスであり、それらのコンテナのインライン整形コンテキストに加わるボックスでもあります。
‘inline’の’display’値を伴なう非置換要素は、インラインボックスを生成します。</p>

<h6>atomic インラインレベルボックス</h6>

<p>インラインレベルボックスであるが、インラインボックスでないもの（置換要素、インラインブロック要素、インラインテーブル要素等。幅・高さの指定できるインラインレベルボックス）は、単一の不透明なボックスとしてインライン整形コンテキストに関与するため、atomic（分割不能・不可分な）インラインレベルボックスと呼ばれます。 <br />
atomicインラインボックスは、インライン整形文脈内で複数の行にわけることが出来ません。</p>

<h3>匿名ブロックボックスと匿名インラインボックス。</h3>

<h4>匿名ブロックボックス</h4>

<p>次のようなHTMLマークアップされた文書で:</p>

<p><code>&lt;div&gt;Some text&lt;p&gt;More text&lt;/p&gt;&lt;/div&gt;</code></p>

<p>&lt;div&gt;はインラインコンテンツとブロックコンテンツの両方を持つように見えます。しかし、整形の定義のわかりやすさのために、”Some text”の周囲に匿名ブロックボックスがあるとみなします。</p>

<p>言い換えれば、ブロックコンテナボックス（上記の例では&lt;div&gt;に対して生成される）が、内部にブロックレベルボックス（上記の例で P）を持つ場合、ブロックボックスの内部はブロックレベルボックスのみになるよう強制することになります。</p>

<p><img src="http://no1026.com/wordpress/wp-content/uploads/2013/12/block.gif" alt="block" width="575" height="142" class="alignnone size-full wp-image-463" /></p>

<h4>匿名インラインボックス</h4>

<p>次のようなHTMLマークアップされた文書で:</p>

<p><code>&lt;p&gt;Some &lt;em&gt;emphasized&lt;/em&gt; text&lt;/p&gt;</code></p>

<p>&lt;p&gt;は内部にインラインボックスを持つブロックボックスを生成します。”emphasized”のボックスは、インライン要素（&lt;em&gt;）によって生成されたインラインボックスですが、他のボックス（”Some”と”text”）はブロックレベル要素（&lt;p&gt;）によって生成されたインラインボックスです。後者は、関連するインラインレベル要素を持たないため匿名インラインボックスと呼ばれます。</p>

<p><img src="http://no1026.com/wordpress/wp-content/uploads/2013/12/inline.gif" alt="inline" width="575" height="124" class="alignnone size-full wp-image-468" /></p>

<h2>display</h2>

<p>ここから、cssプロパティのはなしです。 </p>

<p>displayは要素に使用されるレンダリングボックスの種類を指定します。 HTMLでは、デフォルトの表示プロパティの値は、HTMLの仕様か、ブラウザ/ユーザのデフォルトのスタイルシートに記述から取られています。</p>

<p>初期値：上記の通り <br />
適用対象：全要素 <br />
継承：しない <br />
アニメーション：不可</p>

<h3>: none</h3>

<p>要素を整形構造に出現させません。すなわち、視覚メディアにおいて要素はボックスを生成せず、レイアウトに影響しなくなります。 <br />
不可視のボックスを作成するわけではなく、ボックスを作成しないのです。 <br />
子孫要素もいかなるボックスも生成しません。要素とその内容は整形構造から完全に削除されます。この動作は、子孫での’display’プロパティの設定によって上書きされません。 <br />
なお、当然ですがDOM上は存在します。</p>

<h3>: inline</h3>

<p>1つ以上のインラインボックス要素を生成します。</p>

<h3>: block</h3>

<p>ブロックボックス要素を生成します。</p>

<h3>: list-item</h3>

<p>コンテンツのための主ブロックレベルボックスに加えて追加のマーカーボックスを生成します。</p>

<h3>: inline-block</h3>

<p>インラインレベルボックスコンテナを生成します。
先で説明したatomicインラインレベルボックスです。 <br />
MDNに「単一のインラインボックスであるかのように周囲のコンテンツの流し込みが行われる、ブロックボックス要素を生成」と解説されていましたが、inline-blockはブロックコンテナではありますがブロックレベルボックスではなくインラインレベルボックスなのでブロックボックス要素とは呼べず、誤りです。。</p>

<h3>: table</h3>

<p>&lt;table&gt; 要素と同じように動作、つまりブロックレベルのテーブルを生成します。</p>

<h3>: inline-table</h3>

<p>インラインレベルのテーブルを生成します。 <br />
またMDNに「インラインボックスとしてではなく、ブロックレベルボックスとして動作します。」とありますが、ブロックコンテナのインラインレベルボックスです。</p>

<h3>: table-row</h3>

<p>&lt;tr&gt;要素と同じように動作します。 <br />
指定要素はセルの行となります。</p>

<h3>: table-row-group</h3>

<p>&lt;tbody&gt;要素と同じように動作します。
指定要素グループが1つ以上の行となります。</p>

<h3>: table-header-group</h3>

<p>&lt;thead&gt;要素と同じように動作します。
行グループは、常にすべての行と行のグループの前に、かつ任意の上部のキャプションの後に表示されます。  テーブルが ‘display: table-header-group’ をもつ複数の要素を含む場合は、1行目のみヘッダとして描画され、他の行はあたかも ‘display: table-row-group’ を持つかのように扱われます。</p>

<h3>: table-footer-group</h3>

<p>&lt;tfoot&gt;要素と同じように動作します。
行グループは、常にすべての行と行のグループの後に、かつ任意の下部のキャプションの前に表示されます。 <br />
テーブルが ‘display: table-footer-group’ をもつ複数の要素を含む場合、1行目のみフッタとして描画され、他の行はあたかも ‘display: table-row-group’ を持つかのように扱われます。</p>

<h3>: table-column</h3>

<p>&lt;col&gt;要素と同じように動作します。 <br />
指定要素は、セルの列を記述します。</p>

<h3>: table-column-group</h3>

<p>&lt;colgroup&gt;要素と同じように動作します。 <br />
要素グループは、1つまたは複数の列があることを指定します。</p>

<h3>: table-cell</h3>

<p>&lt;td&gt;要素と同じように動作します。 <br />
要素がテーブルのセルを表すことを指定します。</p>

<h3>: table-caption</h3>

<p>&lt;caption&gt;要素と同じように動作します。 <br />
テーブルの説明文を指定します。’display: table-caption’をもつすべての要素はテーブルにおけるcaptionのように描画されなければならなりません。</p>

<h4>display: table、inline-table、table-xxxについて</h4>

<p>これらの’display’値をもつ置換要素は、レイアウト中にその指定されたdisplay型として扱われます。 <br />
たとえば、’display: table-cell’に設定される画像は使用可能なセル空間を埋め、その寸法は通常のセルと同様に、テーブルのサイズアルゴリズムに貢献するかもしれません。</p>

<p>‘table-column’または’table-column-group’に設定される’display’をもつ要素は、レンダリングされません（’display: none’をもつ場合とまったく同じ）が、それらが表す特定の列のスタイルを風洞する属性を持つかもしれないので、有用らしいです。</p>

<p>なお、最近ではいつまでも地雷臭が抜けないflexboxの代わりに、レスポンシブなサイトを作る際に順番を入れ替えたりするのにも使われたりもしているようです。 <br />
初日げこたんの2位参照：<a href="http://geckotang.tumblr.com/post/68567307745/css-2013" target="_blank">僕の好きなCSSのプロパティ2013 &#8211; &lt; /gecko &gt;</a></p>

<h3>: run-in</h3>

<p>・run-inボックスにブロックボックスを含むなら，run-inボックスはブロックボックスを生成します。 <br />
・run-inボックスの後に，フロート配置でも絶対位置決めでもない弟ブロックボックスがつづく場合，run-inボックスはそのブロック内の最初のインラインボックスになります。ただし弟のブロックがすでにrun-inボックスで始っているか，run-in自身なら例外です。 <br />
・それ以外では、run-inボックスはブロックボックスになります。</p>

<p>run-in要素は視覚的に後続ブロックボックスの一部のように見えるにも拘らず，それでもDOMツリー上にある親からプロパティの値を継承します。 すなわち，一見して親であるかのように見えるブロック要素から値を継承される訣ではない，という事です。</p>

<h3>: compact</h3>

<p>面白いんですが、Operaがレンダリングエンジンをprestoからwebkitに変えたことで、対応ブラウザがなくなったので割愛します。</p>

<p>以上、W3Cの仕様書を日本語訳しただけのようなエントリーでした。 </p>

<p>明日、8日目は<a href="http://www.adventar.org/users/280" target="_blank">くぼしょー</a>さんです。 <br />
お楽しみに！</p>]]></content:encoded>
			<wfw:commentRss>http://no1026.com/archives/455/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>table系にはposition:relativeが効かない</title>
		<link>http://no1026.com/archives/406</link>
		<comments>http://no1026.com/archives/406#comments</comments>
		<pubDate>Tue, 07 May 2013 05:01:51 +0000</pubDate>
		<dc:creator><![CDATA[1026]]></dc:creator>
				<category><![CDATA[技術的な話]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://no1026.com/?p=406</guid>
		<description><![CDATA[同じ事を書いている記事は他にもありますが、個人的に一番わかりやすくて細かいと思っていた記事が消えていたので。 というわけで、細かい話 は、ほぼ table系にはposition:relativeが効かない ( http: [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>同じ事を書いている記事は他にもありますが、個人的に一番わかりやすくて細かいと思っていた記事が消えていたので。</p>

<p>というわけで、<b>細かい話</b> は、ほぼ <a>table系にはposition:relativeが効かない ( http://gyauza.egoism.jp/clip/archives/2007/11/071129-tablepositionrelative/ )</a> にあった内容を引っ張ってきて、文調と表現を若干変えてうちのブログに合わせただけです。許可も取ってませんが、お許し下さい。</p>

<h2>Firefoxが正しい</h2>
<p>&lt;td&gt; や &lt;div style=&#8221;dispaly:tablec-cell&#8221;&gt; の中身を絶対位置で指定したいなー<br />
↓<br />
親の&lt;td&gt; や &lt;div style=&#8221;dispaly:tablec-cell&#8221;&gt; に position:relative を指定<br />
↓<br />
chrome や IE で確認、よし出来た？<br />
↓<br />
あれ？ Firefox では position:relative が効いてないぞ</p>

<pre>
&lt;div&gt;
    &lt;table&gt;
        &lt;td&gt;
            &lt;div class=&quot;left&quot;&gt;左上&lt;/div&gt;
            &lt;div class=&quot;right&quot;&gt;右下&lt;/div&gt;
        &lt;/td&gt;
        &lt;td&gt;
            &lt;div class=&quot;right&quot;&gt;右下&lt;/div&gt;
            &lt;div class=&quot;left&quot;&gt;左上&lt;/div&gt;
        &lt;/td&gt;
    &lt;/table&gt;
&lt;/div&gt;
</pre>


<pre>
div {
    position: relative;
}

td {
    position: relative;
    width: 200px;
    height: 100px;
    border: solid 1px #000;
}

.left {
    position: absolute;
    left: 5px;
    top: 5px;
    color: red;
}

.right {
    position: absolute;
    right: 5px;
    bottom: 5px;
    color: blue;
}
</pre>


<p>
<img src="http://no1026.com/wordpress/wp-content/uploads/2013/05/table.gif" alt="table" width="510" height="345" class="alignnone size-full wp-image-428" /><br />

<a href="http://jsdo.it/No_1026/pn8j">サンプル</a>
</p>

<p>あると思います。</p>

<p>これは Firefox のバグではなく、 Chrome(webkit・blink全体？Androidでは効かないという情報あり) や IE が独自の実装をしているのです。効かない方が正しい表示です。<br />「Androidでは効かないバグかー」といったようなツイートを見かけたこともありますが、どちらかと言えば効いている方がバグみたいなものです。</p>

<h2>細かい話</h2>

<p><a href="http://www.w3.org/TR/CSS21/" target="_blank">CSS2.1 Visual formatting model</a>によると

<blockquote>
<p>The effect of &#8216;position:relative&#8217; on table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, and table-caption elements is <strong>undefined</strong>.</p>

<cite><a href="http://www.w3.org/TR/CSS21/visuren.html#choose-position" target="_blank">CSS2.1 &#8211; Visual formatting model &#8211; 9.3.1 Choosing a positioning scheme: &#8216;position&#8217; property</a></cite>
</blockquote>

<p>テーブルの中身系に対する position:relative の指定は、定義されていません。よって、この通り実装している Firefox では無視されるわけです。</p>

<p>尚、親の table や display:table; に position:relative; を指定しても、そこを基準に絶対配置はしてくれません。御存知の通り、 position:absolute を指定した要素は、祖先の包含ブロックに position:static 以外を指定したとき、そこを基準に絶対配置するのですが、どの要素が包含ブロックを作るかは決まっていて、最初の包含ブロックは viewport、ようするにブラウザの表示領域ですが、それ以下の要素に関しては</p>

<blockquote>
<p>For other elements, if the element&#8217;s position is &#8216;relative&#8217; or &#8216;static&#8217;, the containing block is formed by the content edge of the nearest <strong>block-level, table cell or inline-block</strong> ancestor box.</p>

<cite><a href="http://www.w3.org/TR/CSS21/visudet.html#containing-block-details" target="_blank">CSS2.1 &#8211; Visual formatting model details &#8211; 10.1 Definition of &#8220;containing block&#8221;</a></cite>
</blockquote>

<p>block-level / table cell / inline-block が、この包含ブロックを作りますが、table はブロックレベルのような振る舞いをするだけで、実はブロックレベルではないらしく、包含ブロックは作れないようです。Tableの項を見ると</p>

<blockquote>
<p>In terms of the visual formatting model, <strong>a table can behave like a block-level</strong> (for &#8216;display: table&#8217;) or inline-level (for &#8216;display: inline-table&#8217;) element.</p>

<cite><a href="http://www.w3.org/TR/CSS21/visudet.html#containing-block-details" target="_blank">CSS2.1 &#8211; Tables &#8211; 17.4 Tables in the visual formatting model&#8221;</a></cite>
</blockquote>

<p>正に「tableはブロックレベル（やインライレベル）のように振る舞える」だけでブロックレベルではないようです。</p>

<h2>おわり</h2>

<p>最近は display:table-cell とか非常に便利ですが、この辺は理解しておかないとドハマリするよ、ということで、毎度あげさせてもらっていた記事が消えていたので、勝手にそこだけ復旧的な記事でした。</p>]]></content:encoded>
			<wfw:commentRss>http://no1026.com/archives/406/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSSプログラミング新作出来ませんでした</title>
		<link>http://no1026.com/archives/284</link>
		<comments>http://no1026.com/archives/284#comments</comments>
		<pubDate>Fri, 19 Oct 2012 02:42:07 +0000</pubDate>
		<dc:creator><![CDATA[1026]]></dc:creator>
				<category><![CDATA[何か作った話]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[CSSプログラミング]]></category>

		<guid isPermaLink="false">http://no1026.com/?p=284</guid>
		<description><![CDATA[CSSプログラミングの新作としてインベーダーゲームを作っていたんですが、途中で心が折れて中途半端なまま投げました。 [ incomplete ] CSS Invaders インベーダーを作りたかったというのはわかっていた [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>CSSプログラミングの新作としてインベーダーゲームを作っていたんですが、途中で心が折れて中途半端なまま投げました。</p>

<p><a href="http://jsdo.it/No_1026/ydB4" target="_blank">[ incomplete ] CSS Invaders</a></p>

<p>インベーダーを作りたかったというのはわかっていただけると思います。</p>

<p>敵の横移動が絡むと予想以上に自機の動きや位置が綺麗にできず、面倒くさくなって投げちゃったってとこです。</p>

<p>打つシステムとしては、敵をラッピングしているlabelを縦長に伸ばして、敵を直接クリックせずとも、その延長線上をクリックすると打った風になるという感じです。<br />
この説明では何を言ってるか全くわからないと思うので、ソース見てください。</p>

<p>こういった、クラス名だけ変えて延々繰り返しみたいなコードを書くときはSCSSはほんとうに便利ですね。人力では絶対書きたくないです。</p>

<p>お暇な方、興味のある方は、forkして調整・機能追加してみませんか？<br /><b>『皆で作ろう、CSSインベーダー』</b></p>

<p>まず、げこたんがスコアつけてくれたよ。<br /><a href="http://jsdo.it/GeckoTang/dKtX" target="_blank">スコアをつけました forked: [ incomplete ] CSS Invaders</a></p>

<ins datetime="2012-10-19"><p><b>追記</b>：<a href="http://jsdo.it/No_1026/4v7i" target="_blank">ピコピコさせると重い / forked: [ incomplete ] CSS Invaders </a><br />思ったより重くなかった。ローカルだと非常に重いんですが…</p></ins>

<ins datetime="2012-10-20"><p><b>追記</b>：げこたんが音つけてくれたよ。<br /><a href="http://jsdo.it/GeckoTang/8pZv" target="_blank">音とスコア追加 forked: ピコピコさせると重い / forked: [ incomplete ] CSS Invaders</a></p></ins>]]></content:encoded>
			<wfw:commentRss>http://no1026.com/archives/284/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSSのみ画像不要の影付き吹き出しの作り方3種を全然丁寧じゃなく列挙してみる</title>
		<link>http://no1026.com/archives/256</link>
		<comments>http://no1026.com/archives/256#comments</comments>
		<pubDate>Fri, 05 Oct 2012 05:43:52 +0000</pubDate>
		<dc:creator><![CDATA[1026]]></dc:creator>
				<category><![CDATA[技術的な話]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[CSS3]]></category>

		<guid isPermaLink="false">http://no1026.com/?p=256</guid>
		<description><![CDATA[CSSのみ画像不要の吹き出しの作り方 昨日ゴロドクさんが改めて丁寧に解説にしていましたCSSのみ画像不要の吹き出しの作り方。 せっかく丁寧に説明されているので、基本的な作りからはそちらを御覧ください。 CSSのみ画像不要 [&#8230;]]]></description>
				<content:encoded><![CDATA[<h2>CSSのみ画像不要の吹き出しの作り方</h2>
<p>昨日<a href="https://twitter.com/gorodoku" target="_blank">ゴロドク</a>さんが改めて丁寧に解説にしていましたCSSのみ画像不要の吹き出しの作り方。<br />
せっかく丁寧に説明されているので、基本的な作りからはそちらを御覧ください。<br />
<a href="http://blog.56doc.net/Entry/421/" target="_blank">CSSのみ画像不要の吹き出しの作り方を若干丁寧に解説してみる</a></p>

<h2>影の付け方</h2>
<p>せっかく吹き出しなので「影も付けて更にそれっぽくしたいたい！」と思う方もいらっしゃるかと思います。<br />ただ、これには割と癖がありませして単純にdrop-shadowをかければいいというわけではありません。吹き出しの▼部分に影がなかったり、影が被ったり、ずれたりしてしまいす。<p>

<script type="text/javascript" src="http://jsdo.it/blogparts/6Qkh0/js"></script>

<h3>パターン1：影を隠す</h3>

<p>「影が▼と被ってしまうなら、被ってしまう部分を上から隠そう」という方法です。<br />こちらは以前<a href="https://twitter.com/kzms2" target="_blank">Zuma</a>さんが紹介していた方法です。<br />以下Zumaさんのブログを御覧ください。<br />
<a href="http://blog.kzms2.com/2012/04/16/howtomake_css3shadowarrowbox/" target="_blank">影付きの吹き出しをスマフォ向けにCSSだけで作る方法</a></p>

<h3>パターン2：影を別につける</h3>

<p>「影が被ってしまうのなら、そのまま付けなければいい。別に付けてやろう」という方法。</p>

<script type="text/javascript" src="http://jsdo.it/blogparts/3Gfu/js"></script>

<p>擬似要素の片方でborderではなく、ボックスを transform の rotate と skew を使って吹き出しの▼部分を作成。元の要素自体には影を付けず、余った擬似要素を元要素と同じ大きさにして影を作成。z-indexで元要素の影→▼→元要素と重ねてやる方法です。</p>

<p>サンプルで力技と書いている通り、本来は高さを指定したほうがいいです。&lt;br&gt;等による改行なしの場合は、content: に吹き出しの中と同じテキストを入れてやり、font-size、line-height を元要素と同じにしてやるとどうにかなります。</p>

<p>面倒な箇所としては、▼の部分をrotateで回して実現しているので、元要素と同じ数値で影を指定すると違う方向に出てしまいます。見ながら調整が必要です。</p>

<p>以前、<a href="http://no1026.com/archives/104" target="_blank">要素の重なりの話</a>で解説しましたが、元の要素がスタックコンテキストを生成するとこの方法がとれなくなるので注意。</p>

<p>また、影用の擬似要素には元要素と同じ背景色を設定したほうが綺麗に出来る気がします。透明にしてしまうと、元要素と影の間に微妙に隙間ができるような…<p>

<h3>パターン3：filter: drop-shadowを使う</h3>

<p>現状ChromeとSafari6しか使えませんが、ゴロドクさんの方法で▼をつけて、▼に filter: drop-shadow で影をつけてやる方法です。</p>

<script type="text/javascript" src="http://jsdo.it/blogparts/xCGy/js"></script>

<p>box-shadow ではボックスに対する影なので、一部ボーダー見た目上消して▼を実現しているゴロドクさんの吹き出しの作り方では▼とは違う位置に影が現れてしまいますが、 filter: drop-shadow ならコレが解決できます。<br />webkitさんは本当に優秀やで。</p>

<ins datetime="2012-10-09"><p><b>追記</b>：drop-shadow なら元の要素に drop-shadow を指定するだけで擬似要素にも影がついてくれるらしいです。<br />参考：<a href="http://geckotang.tumblr.com/post/33208290681/box-shadow-filter-drop-shadow" target="_blank">box-shadow と filter: drop-shadow の違い &#8211; &lt; /gecko &gt;</a><br />（サンプルも修正しました）</p></ins>

<h2>まとめ</h2>

<p>というわけで、CSSのみ画像不要の影付き吹き出しの作り方を三種列挙してみました。</p>

<p>今すぐ使わなくとも、今後「あれ？吹き出しに影が上手くつけられない！」みたいなことが起こったときのために、こんな方法があるというくらいに頭にとめておくのも悪くはないのではないでしょうか。</p>]]></content:encoded>
			<wfw:commentRss>http://no1026.com/archives/256/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>要素の重なりについて本気出して考えてみた（z-indexとか何とかとか）</title>
		<link>http://no1026.com/archives/104</link>
		<comments>http://no1026.com/archives/104#comments</comments>
		<pubDate>Mon, 24 Sep 2012 05:07:14 +0000</pubDate>
		<dc:creator><![CDATA[1026]]></dc:creator>
				<category><![CDATA[技術的な話]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[z-index]]></category>

		<guid isPermaLink="false">http://no1026.com/?p=104</guid>
		<description><![CDATA[あなたはhtml/cssにおける要素の重なり方を知っていますか？z-indexを指定しなければ先に書いたほうが下層で後に書けば上層に来る？ というわけで、実は割りと複雑な要素の重なりについて書きます。そこまで意識しなくと [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>あなたはhtml/cssにおける要素の重なり方を知っていますか？<br />z-indexを指定しなければ先に書いたほうが下層で後に書けば上層に来る？<br /></p>

<p>というわけで、実は割りと複雑な要素の重なりについて書きます。そこまで意識しなくとも支障がでることは滅多にないと思いますが、知っておいて損はないはずです。<br />ちなみに、昨今CSS3なるものが流行していますが、この記事はW3CのCSS2.1勧告（と付録）を元に書いています。<br />基本的な内容であり、目新しいことは特になにもありません。</p>

<h2>スタックコンテキストとスタックレベル</h2>

<p>用語と概念から。<br />ある意味、ここが一番よくわかりませんが、ここがわからないと何もわかりません。</p>

<h3>スタックコンテキスト（スタッキング・コンテキスト）</h3>

<p>簡単に言えばauto以外のz-indexと位置（static以外のposition）を指定した要素によって生成される階層構造を形成する固まりです。ただし、ルート要素（html）はルートスタックコンテキストを整形するので、例えz-indexを一つも指定しなくとも、スタックコンテキストは存在することになり、各ボックスは何らかのスタックコンテキストに属することになります。</p>

<p>スタックコンテキストはその内部に追加のスタックコンテキストを含むことができ、z-indexに整数値を指定すると自身のスタックレベルを0としたローカルスタックコンテキストが生成されます。しかし、スタックコンテキストは各階層における構造によるものなので、あるボックスが同時に複数のスタックコンテキストに股がって属したり、他のスタックコンテキスト内のボックスが任意のボックスの間にくることはできません。</p>

<h3>スタックレベル</h3>

<p>ボックスは同一スタックコンテキスト内でのz軸の位置となるスタックレベルを持ちます。まぁ、z-indexで指定する数字です。</p>

<p>同じスタックコンテキストに同じスタックレベルを持つボックスがある場合、構造内での順番に従って背面から前面へとボックスが積み重ねられます。</p>

<h2 id="layer">基本的な重なり</h2>

<p>基本的に以下のレイヤー順番で重なります（スタックコンテキスト内での子孫の塗装順序）。W3C勧告に倣い、先に書いたものが下層、後に書いたものが上層になります。<p>

<ol>
<li>スタックコンテキストが整形する要素の背景とボーダー</li>
<li>負のスタックレベルをもつ子スタックコンテキスト</li>
<li>インラインレベル以外の位置（position）を指定していない要素</li>
<li>位置（position）を指定していないフロートしている要素とその子孫</li>
<li>インラインレベルの位置（position）を指定していない要素（但しインラインテーブル・インラインブロックを含む）</li>
<li>z-indexがauto又は0の要素とその子孫</li>
<li>正のスタックレベルを持つ子スタックコンテキストとその子孫</li>
</ol>

<p>以上の基準に基づきながら、同レイヤーに存在する・同スタックレベルを持つ場合は後から書いたものが上層に、先に書いたものが下層に配置されます。</p>

<h2>z-index</h2>

<p>注：z-indexはブラウザによるバグが少なくなく以下に書くように動作しない場合があります。</p>

<h3>z-indexは垂直位置を指定する</h3>

<p>z-indexはボックスの重なりの順序を指定するプロパティであるとよく言われていますが、<strong>垂直（z軸の）位置を指定するプロパティ</strong>と考えた方がよりわかりやすいのではないでしょうか。x軸・y軸の位置をtop(bottom)・left(right)で指定するのと同様にz軸での位置をz-indexで指定するのです（スタックコンテキスト内で）。</p>
<p>よって、x軸・y軸の位置を指定するときと同様にpositonにstatic以外（relative、absolute、fixed）を指定しなければいけません。</p>

<h3>z-indexにはpositionが必要⇔positionあるところにz-indexあり</h3>

<p>z-indexを指定するには position: static; 以外の指定が必要といいましたが、逆に、position: static; 以外を指定すれば自動的にz-indexが指定されていることにもなります。ある要素に、あなたがposition: static; 以外を指定すると、その要素は自動的にz-indexの初期値である auto が指定されたことになります。</p>

<p>普段意識せずに使っているかもしれませんが、positionを指定した要素がz-indexを指定せずとも以降の要素の下に隠れないのは、これによるものです。</p>

<p><a href="#layer">先ほどのリスト</a>を思い出して下さい。</p>

<p>「z-indexがauto又は0の要素とその子孫（つまり、positionを指定した要素）」は「正のスタックレベルを持つ子スタックコンテキストとその子孫」を除き、その他の要素より上層のレイヤーとなります。これにより、absoluteやfixedでのナビゲーション固定などをz-indexを指定せずとも自然に実現できているわけです。</p>

<p><img src="http://no1026.com/wordpress/wp-content/uploads/position1.png" alt="" title="position" width="310" height="260" class="aligncenter size-full wp-image-210" /><br /><a href="http://jsdo.it/No_1026/lOMQ" target="_blank">実際のコードとサンプル</a></p>

<h3>z-index: auto; と z-index: 0; の違いとスタックコンテキスト</h3>

<p>z-index: auto; を指定したボックスのスタックレベルは0であり、上記のようにスタックコンテキストを作成したかのように要素を扱いますが、実際に新しいスタックコンテキストを作成しているわけではなく、親スタックコンテキストの一部と考慮されるます。対して、z-index: 0;はスタックコンテキストを生成します。</p>

<p><img src="http://no1026.com/wordpress/wp-content/uploads/z-index.png" alt="" title="z-index" width="400" height="220" class="aligncenter size-full wp-image-211" /><br />どちらも色の薄い方に z-index: -1; を指定しています。<br /><a href="http://jsdo.it/No_1026/w78V" target="_blank">実際のコードとサンプル</a></p>

<p>z-index: 0; を指定した要素はその指定した要素の背景が最下層となりますが、z-index: auto; を指定した要素はそうではありません。<a href="#layer">先ほどのリスト</a>を見ると、スタックコンテキストの最下層はスタックコンテキストが整形する要素の背景であることから、z-index: auto;を指定した要素は実際には新しいスタックコンテキストを作成しているわけではないことがわかります。</p>

<p>尚、これは::before、::afterといった擬似要素にスタックレベルを指定した場合でも同様の動きをします。擬似要素の元になる要素がスタックコンテキストを生成した場合、::before・::afterに関わらずそのスタックコンテキストに属することになります。よって、CSS3によって流行りとなった紙が捲れたような影を付ける場合などは、元の要素にz-indexを指定して新たなスタックコンテキストができてしまうと、幾ら擬似要素にマイナスのスタックレベルを指定しようとも影が元要素の背景より上に出てしまいますので注意が必要です。</p>

<p><img src="http://no1026.com/wordpress/wp-content/uploads/09fa9be9232ae82ad25698965d04c219.png" alt="" title="擬似要素" width="420" height="170" class="aligncenter size-full wp-image-212" /><br /><a href="http://jsdo.it/No_1026/eE2X" target="_blank">実際のコードとサンプル</a></p>

<p>新たなスタックコンテキストが出来る出来ないという結果を見てもう一つわかることは、このスタックコンテキストというものがあることにより、z-indexを指定したからといえ完全に好きな階層に置けるわけではないということです。スタックレベルは同じスタックコンテキスト内での順序を決めるものであるため、そのスタックコンテキスト外では機能しません。</p>

<p><strong>例え先祖要素であってもより近い先祖要素にz-indexを指定した場合、その要素の背景より下層に配置することはできません</strong>し、もちろん、先述した通り<strong>他のスタックコンテキスト内の任意の層に配置することも出来ません</strong>。</p>

<p>逆に言えば、余計なところにスタックコンテキストを生成しなければよいわけですから、不必要にz-indexを指定するのを避ければよいということにもなります。</p>

<p>ちなみに、有名なバグとしてIE7ではz-index: auto; でもスタックコンテキストを生成します。割りと困ります。</p>

<h3>z-index以外のプロパティのスタックコンテキストの導入 〜 opacity</h3>

<p>z-index以外でもスタックコンテキストを導入することが認められており、実際にz-index以外でもスタックコンテキストを生成するプロパティは既に存在します。</p>

<p>例えば、CSS3で加えられた透明度を操作するopacityはスタックコンテキストを生成します。つまり、z-indexを指定しなくとも、opacityで1未満を指定（基準値の 1 ではスタックコンテキストが出来ない）した場合、その要素をスタックレベル0としたスタックコンテキストが生成されてしまうので注意が必要です。</p>

<p><img src="http://no1026.com/wordpress/wp-content/uploads/opacity.png" alt="" title="opacity" width="420" height="210" class="aligncenter size-full wp-image-213" /><br />どちらも色の薄い方に z-index: -1; を指定しています。<br /><a href="http://jsdo.it/No_1026/xlnP" target="_blank">実際のコードとサンプル</a></p>

<h2>z-index以外の重なり</h2>

<p><a href="#layer">先ほどのリスト</a>で示した通りなのですが、一応サンプルを用意しました。</p>

<p><img src="http://no1026.com/wordpress/wp-content/uploads/inline.png" alt="" title="inline" width="200" height="150" class="aligncenter size-full wp-image-214" /><br />span → float → p の順に記述。pのみ color: white;<br /><a href="http://jsdo.it/No_1026/ywqw" target="_blank">実際のコードとサンプル</a></p>

<p>p よりも span floatさせた要素の方が先に記述されていますが、リストの通り、spanやfloatさせた要素の背景の方が後に記述された p の背景より上層にきています。<br />ここで難しいことは、位置（position）指定されていない要素の階層はそれ自体（主に背景とボーダー）のものであり、子孫要素や内部のテキスト等はまた異なるレイヤーに置かれるます。よって、上記の図でもわかるとおり、背景はリストに従い span のものが上層にきていますが、内部のテキストは後から記述された p の内部のものが上層にきています。</p>

<p>正直、この辺の細かい正確なレイヤーは勧告と付録読んでもイマイチ完璧に把握できないところがあります。自分、馬鹿なのかなぁ</p>

<p>このように、後から書いたものだからといって、より上層になるとは限らないのです。（尤も、重なりを意識するのは大抵ブロックレベルの要素なので、ここまで意識する必要があるか微妙ですが。）</p>

<h2>おわりに</h2>

<p>擬似要素のz-indexの効き方に疑問を覚えて調べていたらこんなになってしまいました。z-indexに関しては「使用頻度が低いために曖昧にしか覚えていなかった結果、ちょっとハマる」なんていうことが無きにしもあらずなのではないかと思います。この際、覚えておいて損はないのではないでしょうか。</p>

<p>ちなみに、ここまで偉そうに解説しましたが、勧告を読んで私がこう理解したというもので、実は違うなんてことが無きにしもあらず…</p>]]></content:encoded>
			<wfw:commentRss>http://no1026.com/archives/104/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>::first-letter が最初から生成されてないと :hover::first-letter 効かないっぽい</title>
		<link>http://no1026.com/archives/65</link>
		<comments>http://no1026.com/archives/65#comments</comments>
		<pubDate>Wed, 05 Sep 2012 12:36:07 +0000</pubDate>
		<dc:creator><![CDATA[1026]]></dc:creator>
				<category><![CDATA[技術的な話]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://no1026.com/wordpress/?p=65</guid>
		<description><![CDATA[滅多にそんなことやらないと思うんですが、:hover::first-letterを試したところ効かなかった旨をツイートしたところ、@xl1blue氏が検証してくれました。 ちなみに、IEでは最初に生成しなくても効いている [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>滅多にそんなことやらないと思うんですが、:hover::first-letterを試したところ効かなかった旨をツイートしたところ、@xl1blue氏が検証してくれました。</p>

<p>ちなみに、IEでは最初に生成しなくても効いている気がします。</p>

<blockquote class="twitter-tweet" lang="ja"><p>::first-letter が最初から生成されてないと :hover::first-letter 効かないっぽい？</p>&mdash; xl1blueさん (@xl1blue) <a href="https://twitter.com/xl1blue/status/242116677398040576" data-datetime="2012-09-02T04:28:08+00:00">9月 2, 2012</a></blockquote>
<script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<script type="text/javascript" src="http://jsdo.it/blogparts/ombg/js"></script>

<p>使いたい場合は、::first-letter{ color:inherit; }あたりで見た目は変わらないものの生成だけは最初にしておく感じにすればいいんじゃないでしょうか。</p>]]></content:encoded>
			<wfw:commentRss>http://no1026.com/archives/65/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.789 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2015-11-16 12:54:58 -->
