クリックするとdivに1pxの境界線が追加されるため、divサイズが2px X 2px増加します。divサイズを増加させたくありません。簡単な方法はありますか?
乱雑な詳細説明
実際には、float:left(アイコンと同じサイズ)を使用してDIVをcontainer-divに追加しているため、すべてが次々にスタックし、いつ(container-divの幅は300px)左スペースなし賢いので子DIVが次の行に来るので、カタログのようになりますが、選択されたDIVサイズだけが境界線のために増加するため、選択されたDIVの下のDIVは右に移動し、選択されたDIVの下に空のスペースを作成します。
編集:
選択時に高さ/幅を減らしますが、元に戻す方法。サードパーティのフレームワークを使用しているため、DIVが選択を失ったときにイベントを発生させないでください。
Border cssプロパティは、テーブルのtdsを除くすべての要素の「外側」サイズを増やします。 Firebugでこれがどのように機能するかを視覚的に理解することができます( 廃止 )、html-> layoutタブで。
例として、幅と高さが10ピクセルで境界が1ピクセルのdivの外側の幅と高さは12ピクセルになります。
あなたの場合、境界線がdivの「内側」にあるように見えるようにするには、選択したCSSクラスで、境界線サイズを2倍にすることで要素の幅と高さを減らすか、同じことをすることができます要素のパディング。
例えば:
div.navitem
{
width: 15px;
height: 15px;
/* padding: 5px; */
}
div.navitem .selected
{
border: 1px solid;
width: 13px;
height: 13px;
/* padding: 4px */
}
これは、このシナリオでも役立ちます。 divの幅を変更せずに境界線を設定できます
textarea {
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
-moz-box-sizing: border-box; /* Firefox, other Gecko */
box-sizing: border-box; /* Opera/IE 8+ */
}
クリックして背景と同じ色にする前に、境界線を設定します。
その後、クリックすると背景色が変更されるだけで、幅は変更されません。
別の良い解決策は、outline
の代わりにborder
を使用することです。ボックスモデルに影響を与えずに境界線を追加します。これはIE8 +、Chrome、Firefox、Opera、Safariで動作します。
border
をoutline
に変更してみてください:
outline: 1px solid black;
これらのソリューションの多くを使用して、border-color: transparent
を最も柔軟で広くサポートされるように設定するトリックを使用していることがわかりました。
.some-element {
border: solid 1px transparent;
}
.some-element-selected {
border: solid 1px black;
}
より良い理由:
outline
とは異なり、たとえば上と下の境界線を別々に指定できますこれを試して
box-sizing: border-box;
私は通常、この問題を解決するためにパディングを使用します。境界線が消えるとパディングが追加され、境界線が表示されると削除されます。サンプルコード:
.good-border {
padding: 1px;
}
.good-border:hover {
padding: 0px;
border: 1px solid blue;
}
JSFiddleで完全なサンプルコードを表示: https://jsfiddle.net/3t7vyebt/4/
幅と高さをborder-widthの2倍だけ減らす
境界線を大きくするときは、マージンサイズを小さくしてください
クラスを追加することで、その要素のサイズに影響を与えずに、要素を「境界付け」できるようにする必要がありました。私にとって良い解決策は、box-shadowを使用することでした。しかし、場合によっては、他の兄弟のために効果が見えませんでした。そこで、典型的なボックスシャドウとインセットボックスシャドウの両方を組み合わせました。結果は、寸法を変更せずに境界線の外観になります。
コンマで区切られた値。以下に簡単な例を示します。
.add_border {
box-shadow:-1px 0 1px 1px rgba(0, 0, 0, 0.75), inset -1px 0 0 1px rgba(0, 0, 0, 0.75);
}
好みの外観に調整すれば、準備完了です!
明示的に設定せずに高さや幅に影響を与えたくない場合があります。その場合、疑似要素を使用すると便利です。
.border-me {
position: relative;
}
.border-me::after {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
border: solid 1px black;
}
また、擬似要素を使用してさらに多くのことを実行できるため、これは非常に強力なパターンです。
インセットシャドウを使用して、いくつかのおしゃれなことを行うことができます。サイズを変更せずに要素の下部に境界線を配置する例:
.bottom-border {
box-shadow:inset 0px -3px 0px #000;
}
背景と同じ色の境界線を持つ要素を作成し、境界線を表示したい場合は、色を変更するだけです。
.filter_list_button_remove {
border: 1px solid transparent;
background-color: transparent;
}
.filter_list_button_remove:hover {
border: 1px solid;
}
Css calc()関数も使用できます
width: calc(100% - 2px);
境界線の2pxを引く
div
のコンテンツが動的にレンダリングされ、その高さを設定する場合、outline
を使用して簡単なトリックを使用できます。
button {
padding: 10px;
border: 4px solid blue;
border-radius: 4px;
outline: 2px solid white;
outline-offset: -4px;
}
button:hover {
outline-color: transparent;
}