before,after擬似要素
css3から今まで擬似クラスと同じ:(シングルコロン)での表記だったが、擬似要素については::(ダブルコロン)を使うように修正された。とはいえ、擬似要素にシングルコロンを使うことはできる(IEが対応してないから)。
li:before、li:afterの基本
li:before {content:"before";}とli:after {content:"after";}を指定すると
- あいうえお
- かきくけこ
- さしすせそ
吹き出しの作成方法
ボーダーをつけるためafterとbefore両方指定
/*css*/
.m1 {
position:relative;
display:inline-block;
padding:15px 40px;
background-color:#fee;
border:1px solid #ccc;
text-align:center;
border-radius:10px;
}
.m1:before,
.m1:after {
content:'';
position:absolute;
left:50%;
margin-left:-8px;
border-right:8px solid transparent;
border-left:8px solid transparent;
}
.m1:before {
bottom:-20px;
border-top:20px solid #ccc;
}
.m1:after {
bottom:-18px;
border-top:20px solid #fee;
}
ボーダーがなければどちらか片方指定だけでいける。
/*css*/
.m2 {
position:relative;
display:inline-block;
padding:15px 40px;
background-color:#fee;
text-align:center;
border-radius:10px;
}
.m2:after {
content:'';
position:absolute;
left:50%;
margin-left:-8px;
border-right:8px solid transparent;
border-left:8px solid transparent;
bottom:-18px;
border-top:20px solid #fee;
}
空文字の上下左右にボーダー
/*css*/
.m4 {
position:relative;
}
.m4:after {
content:'';
position:absolute;
left:50%;
margin-left:-8px;
border-right:20px solid #888;
border-left:20px solid #888;
bottom:-18px;
border-top:20px solid #f00;
border-bottom:20px solid #00f;
}
空要素にボーダーを引くと上のような絵になる。
hoverと組み合わせる
.button {
display:block;
width:320px;
line-height:80px;
text-align: center;
text-decoration:none;
outline:none;
background-color:red;
border:2px solid red;
color:#fff;
position:relative;
z-index:0;
}
.button:hover {
background-color:#fff;
border-color:blue;
color:blue;
}
.button:before,
.button:after {
display:block;
content:'';
top:0;
width:30%;
height:100%;
background-color:purple;
position:absolute;
z-index:1;
}
.button,
.button:before,
.button:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-transition:all .3s;
transition:all .3s;
}
.button::before {
right:0;
}
.button::after {
left:0;
}
.button:hover:before,
.button:hover:after {
width:0;
background-color:green;
}
hoverした後の挙動が問題。
重なり順は、擬似要素が最前面、親要素がその下に配置。
擬似要素のbeforeとafterは共に、widthが30%で、親を基点(relative)として、beforeはright:0で絶対配置、afterはleft:0で絶対配置される。互いの合計幅は60%なので、中央に40%分だけ空きができる。
こいつら擬似要素はあとでtransitionプロパティを使ってwidth:0にしたいので、all .3sを指定。allはwidthでもよいし、.3sは0.3sでもよい。
hoverされると、再背面の親要素の背景は白くなり、枠線と文字が青くなるが、その前にその全面にある擬似要素のhoverが起こる。擬似要素はtransitionを指定しているので、width:30%→0までアニメーションで移動していく。
ちなみに、親のz-indexをautoにすると親が後が前に来てしまう。
コメントor補足情報orご指摘あればをお願いします。
- << 前のページ
- 次のページ >>
