ブロックの内側にボーダーを表示

この記事は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

ページトップへ

© hifi-dev All Rights Reserved.
kenboh
profile
kenboh

follow