ブロックの内側にボーダーを表示
この記事は2014年12月20日に書かれたもので、内容が古い可能性がありますのでご注意ください。
大枠のブロックの内側にボーダーを表示する必要があったので備忘録。
そもそも大枠に擬似要素position: absoluteをかけてボーダーを表示させていたが、
ブロック内のaタグが押せなくなるため内側に表示させるようにしました。
まずはその失敗版です。
html
<div class="block"> <p><img src="http://placehold.jp/150x150.png" alt="" width="150" height="150"></p> <div class="info"> <p><a href="dummy.html">テキストテキストテキストテキストテキスト</a></p> <!-- /.info --></div> <!-- /.block --></div>
続いてcss。
css
p {
margin: 0;
}
.block {
position: relative;
width: 150px;
}
.block:hover::before {
content: "";
box-sizing: border-box;
position: absolute;
width: 100%;
height: 100%;
border: 4px solid rgba(255,0,0,.5);
}
失敗版のサンプルは以下です。
上記の失敗があったのでblockにボーダーを付けます。
ただそのままだと外側についてサイズがおかしくなるのでボーダー分だけネガティブマージンを内側の要素に指定します。
htmlは上記と同じです。
css
p {
margin: 0;
}
.block {
overflow: hidden;
width: 150px;
}
.block:hover {
width: 142px;
border: 4px solid rgba(255,0,0,.5);
}
.block:hover img {
margin: -4px -4px 0 -4px;
}
.block:hover .info {
margin: 0 -4px -4px -4px;
}
blockにoverflow: hiddenを付けるのがキモです。
そして内側のイメージとinfoにネガティブマージンを付けます。
サンプルは以下。
ads
