navbarを作成する を演習としてしようとしています。
a:hover
を使用して、ホバーされているボタンの周囲に実線の境界線を含めています。ただし、これにより、他のすべてのボタンが境界線のサイズだけ移動します。
この問題の適切な修正方法は何ですか?私は他の人がいることを知っています(議論された ここ )、私は特に境界線を「見えないが、ホバリングされていなくてもスペースを取ります」ようにしました。私はborder:transparent
を設定しますが、それが私が望むことをするかもしれないが、それはまったくスペースを取りませんでした。
私は手で境界線の色を選択して背景と同じ色にし、それを塗りつぶすことができますが、これは私が望むものではありません。この問題を解決する正しい方法はありますか?
border: 10px solid transparent
?
最適なオプションは、ボーダーと同じサイズの要素にパディングまたはマージンを追加し、ボーダーの幅をゼロにしてから、a:hover
セレクターでボーダーを表示してパディングを削除することです。
これがサンプルです。多くの場合、余白を使用してこれを行うこともできます。
a {
display: inline-block;
height: 2em; width: 100px;
padding: 2px;
background: #0ff;
}
a:hover {
padding: 0;
border :2px solid #000;
}
<a href="#">Hello World</a>
これが期待どおりに機能しない理由の1つは、display:block
オン :hover
、: hoverセレクタなしで要素に適用する必要があります。そうしないと、「シフト」ディメンションが取得されます。どのディスプレイタイプを使用するかは問題ではありません。それらが同じであることを確認する必要があり、デフォルトでは<a>
はインラインです。
もう1つの理由は、簡単な境界線と関係があるため、solid
の代わりにnone
のような透過バージョンの境界線タイプを追加する必要があります。
使用している手法は完全に合法であり、パディングハックやアウトライン(ディメンションを追加しない)は必要ありません。
http://jsfiddle.net/Madmartigan/kwdDB/
これを試して:
#wd-navbar li a {
border: medium solid transparent;
display: block;
margin: 1px;
}
#wd-navbar li a:hover {
background-color: #F5DEB3;
border: medium solid;
}
境界線の代わりに outline
CSSプロパティを使用できます。CSSプロパティは境界線のように機能しますが、サイズ計算では考慮されません。
ただし、これにはいくつかの問題があります IE 7以前ではサポートされていません 。
border:transparent
手段 border: transparent 0 none
簡略構文を使用するときにプロパティを指定しない場合、すべてのプロパティをデフォルトにリセットします。
ボーダースタイルとボーダー幅を指定する必要があります。
Border-colorの設定:透明;仕事をします。
a {
border-color : transparent ;
}
a:hover {
border-color : black;
}
疑似要素::after
および::before
を使用して、目に見えない境界を作成します。