<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>CSSの練習</title> <link rel="stylesheet" href="styles.css"> </head> <body> <!-- <h1>見出し</h1> --> <h1 class="info title">見出し</h1> <p class="info">こんにちは。こんにちは。こんにちは。こんにちは。</p> <h2>見出し</h2> <p>こんにちは。こんにちは。こんにちは。こんにちは。</p> </body> </html>
/* h1 { */ .info { color: skyblue; } .title { font-weight: normal; }
#title { color: pink; } * { font-size: 12px; }
<body> <ul> <li><a href="https://dotinstall.com" target="_blank">dotinstall</a></li> <li><a href="https://twitter.com/dotinstall" target="_blank">Twitter</a></li> <li><a href="https://facebook.com/dotinstall">Facebook</a></li> <li><a href="#top">TOP</a></li> </ul> </body>
[target] { color: red; } [href="#top"] { font-size: 24px; } [href^="https"] { background-color: aqua; } [href$="dotinstall"] { color: yellow; } [href*="com"] { font-weight: bold; font-size: 12px; }
p + p
は先頭のp
には適用されないことを利用してよく使われる
.info, p
h1.info
main > h1
main h1
p + p pの 直後のpから適用
li + li { background-color: red; }
カスタムデータ属性併用
<body> <h1 data-subtitle=" - Main Title">見出し</h1> <p>こんにちは。こんにちは。こんにちは。こんにちは。</p> <h2 data-subtitle=" - Sub Title">見出し</h2> <p>こんにちは。こんにちは。こんにちは。こんにちは。</p> </body>
h1::before, h2::before { content: '---'; } h1::after, h2::after { content: attr(data-subtitle); }
<body> <h1>見出し</h1> <p>こんにちは。こんにちは。こんにちは。こんにちは。</p> <h2>見出し</h2> <p>こんにちは。こんにちは。こんにちは。こんにちは。</p> <div class="btn">OK</div> </body>
.btn { width: 100px; background: skyblue; text-align: center; padding: 4px; color: white; cursor: pointer; } .btn:hover { opacity: 0.8; }
<body> <main> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> </main> </body>
main > :nth-child(2) { color: red; } main > :nth-child(3n) { color: blue; } main > :nth-child(odd) { background-color: pink; } main > :nth-child(even) { background-color: skyblue; } main > :first-child { font-size: 24px; } main > :last-child { color: white; }
同じ要素の中で種類を考慮しながら順番を指定できる
<body> <main> <h1>見出し</h1> <p>こんにちは。</p> <p>こんにちは。</p> <h2>見出し</h2> <p>こんにちは。</p> <p>こんにちは。</p> <h2>見出し</h2> <p>こんにちは。</p> <h2>見出し</h2> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <p>こんにちは。</p> <h2>見出し</h2> <p>こんにちは。</p> </main> </body>
main > h2:nth-of-type(3) { color: pink; } main > h2:nth-of-type(even) { background: rgb(192, 255, 212); } main > h2:first-of-type { color: yellow; } main > h2:last-of-type { color: skyblue; }
注意点として、半角スペースや改行などもempty
判定はされないことに注意
<body> <ul> <li>項目</li> <li></li> <li> </li> <li> </li> <li><!-- コメント --></li> <li>項目</li> </ul> </body>
li:empty { color: red; } li:not(:empty) { background: skyblue; }
id
class
疑似要素
id * n > class * n > 疑似要素 * n
importantはそれよりも優先される
<style>
タグはさらに優先される
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>CSSの練習</title> <link rel="stylesheet" href="styles.css"> </head> <body> <section id="about"> <h1 id="main" class="title box" style="color: skyblue;">Main Title</h1> </section> </body> </html>
#about > #main { color: gray; } h1 { color: red !important; } h1#main.box { color: yellow !important; } section > #main.title { color: blue; } section#about > h1 { color: pink; }