CSSで複数の条件を満たした要素を絞り込む

既存のPCサイトを外部CSSだけでスマホ対応させた案件で
CSSだけでどこまでマニアックな指定ができるか限界に挑んだので、覚書的に。

複数のidやclassで要素を絞り込む

複数のidやclassをずべて併せ持った要素だけにスタイルを適用させたい場合は、
スペースを開けずに続けて指定する書式で指定できます。

<br />
.typeA.typeB {<br />
	border-color: 3px solid #f00;<br />
}<br />

例えばトップページだけ1カラム構成にしたいとき

</p>
<div id="container" class="toppage">
<div id="mainColumn">
		メインカラム
	</div>
<div id="mainColumn">
		サブカラム
	</div>
</div>
<p>

<br />
#container {<br />
	width: 80em;<br />
}<br />
#container:after {<br />
	content: '';<br />
	display: bolck;<br />
	clear: both;<br />
	width: 0;<br />
	height: 0;<br />
}<br />
	#mainColumn {<br />
		float: left;<br />
		width: 58em;<br />
	}<br />
	#subColumn {<br />
		float: right;<br />
		width: 20em;<br />
	}<br />
#container.toppage #mainColumn {<br />
	float: none;<br />
	width: 80em;<br />
}<br />
#container.toppage #subColumn {<br />
	diplay: none;<br />
}<br />

複数の擬似クラス、擬似要素で条件を絞り込む

CSS3の:not()セレクタを重ねがけの延長になりますが
擬似系の条件を複数指定する場合も、スペースを開けずに続けて指定する書式で指定できます。

<br />
li {<br />
	background: #fff;<br />
}<br />
li:hover {<br />
	background: #ffc;<br />
}<br />
li:nth-child(even) {<br />
	background: #eee;<br />
}<br />
li:nth-child(even):hover {<br />
	background: #eec;<br />
}<br />

class、ID、擬似クラスをフル活用したら、静的な1点ものHTMLだったらほぼ思いどおりにできました!
CMS系の動的生成されるページは、擬似クラスが使用できる範囲が限られてしまうぶんだけ自由度がへるので、何箇所かテンプレートに手を入れざるをえない所がでてきました。無念。

関連記事