【Labs】親要素にCSSを適用させるこんな方法
こんにちは(・∀・)
親要素から特定する子要素にCSSを適用させる場合、「p > img」みたいな感じでセレクターを利用してCSSを適用させることができます。
その逆で子要素から親要素にCSSを適用させる場合、上記のようにセレクターを使ってCSSを適用させることはできません。
CSS4のセレクターで「:has()」というのがあり、上記のことが実現できますが、まだどのブラウザも対応しておりません。
CSSで完結したいところですが、こんな時はjQueryで解決できます。
Contents
1. メソッド.parentで親要素にCSSを適用
メソッド.parentで親要素にCSSを設定する。
サンプル
Google Hosted LibrariesからjQuery 1.x snippetを<head>
内に読み込みます。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
HTML
<p><img src="bg6.jpg" alt="横浜赤レンガ倉庫の画像" class="c-img-2"></p>
CSS
img.c-img-2 {
width: 100%;
}
JavaScript
$(function() {
$('img.c-img-2').parent('p').css({background:'lightgray','max-width':'600px',margin:'0 auto',padding:'10px'});
});
Result
2. セレクター:has()で親要素にCSSを適用
CSSでは未だ使えませんがjQueryではセレクター:has()は以前から使えます。
セレクター:has()で親要素にCSSを適用させます。
サンプル
HTML
<p><img src="bg6.jpg" alt="横浜赤レンガ倉庫の画像" class="c-img-2"></p>
CSS
.c-img-2 {
width: 100%;
}
JavaScript
$(function() {
$('p:has(img.c-img-2)').css({background:'lightgray','max-width':'600px',margin:'0 auto',padding:'10px'});
});
Result
3. メソッド.has()で親要素にClassを追加
セレクターの:has()よりもメソッド.has()の方が推奨されているようです。
直接メソッド.css()で指定しないで.addClass()メソッドで親要素にclassを追加してみました。
サンプル
HTML
<p><img src="bg1.jpg" alt="HOTEL NEW GRANDの画像" class="c-img-2"></p>
CSS
.c-img-2 {
width: 100%;
}
p.hoge {
border: 5px solid pink;
background: lightgray;
max-width: 600px;
margin: 0 auto;
padding: 10px;
}
JavaScript
$(function() {
$('p').has('img.c-img-2').addClass('hoge');
});
Result
関連リンク
CSSで親要素にstyleを適用する
【意外と便利!】特定の子要素を持つ親要素にcssを適用する方法