要素の幅全体にborder-widthを追加せずにcssを使用して任意の要素に境界線を与える方法は?


101

要素の幅全体にborder-widthを追加せずにcssを使用して任意の要素に境界線を与える方法は?

Photoshopのように、ストロークを与えることができます-内側、中央、外側

デフォルトのCSSボーダープロパティはフォトショップのセンターのようなセンターだと思います、そうですか?

外ではなく箱の内側に枠をつけたい。ボックスの幅に境界線の幅を含めたくない。

回答:


221
outline:1px solid white;

これは余分な幅と高さを追加しません。


10
注意:アウトラインは側面を定義しないため、これはすべての側面がスタイル設定されている場合にのみ機能します。
Screenack 2013年

1
片側だけを縁取ることができる回答を追加しました。
mikevoermans 2013年

1
要素上にある可能性のあるボーダー半径の曲線に沿っていないメモなので、四角いボーダーになります。
limitlessloop

2
ただし、radioususはサポートされていません。
スカイ

29

CSSのボックスサイズを確認してください...

box-sizing CSS3プロパティはこれを行うことができます。(content-boxのデフォルトとは対照的に)border-boxの値により、最終的にレンダリングされたボックスが宣言された幅になり、ボックス内のボーダーとパディングがカットされます。これで、ピクセルベースのパディングとボーダーを含め、要素を100%の幅であると安全に宣言でき、目標を完全に達成できます。

  • -webkit-box-sizing:border-box; / * Safari / Chrome、その他のWebKit * /
  • -moz-box-sizing:border-box; / * Firefox、その他のGecko * /
  • ボックスサイズ:ボーダーボックス; / * Opera / IE 8+ * /

これを処理するミックスインを作成することをお勧めします。ボックスサイズの詳細については、W3c http://www.w3schools.com/cssref/css3_pr_box-sizing.aspを参照してください。


1
これが最良の答えですが、実際にはすべての接頭辞が必要だとは思いません。caniuse.com/#feat=css3-boxsizing
Justin

2
^ジャスティンは正しいです、あなたはもはや接頭辞を必要としません。box-sizing十分であろう。
チャド

25

目的のブラウザーサポートに応じて、box-shadowプロパティを使用できます。

ぼかしの値を0に、広がりをこれまでの厚みに設定できます。ボックスシャドウの優れている点は、ボックスの外側(デフォルト)または内側(insetプロパティ。

例:

box-shadow: 0 0 0 1px black; // Outside black border 1px

または

box-shadow: 0 0 0 1px white inset; // Inside white border 1px

ボックスシャドウを使用する大きな利点の1つは、複数のボックスシャドウを使用することで創造性を発揮できることです。

box-shadow: 0 0 0 3px black, 0 0 0 1px white inset;

私が言うことができない唯一のことは、これがレンダリングのパフォーマンスを良くするどのような違いがあるかです。画面上でこの手法を使用して何百もの要素がある場合、問題になる可能性があると思います。


16

同じ問題に遭遇しました。

.right-border {
    position: relative;
}

.right-border:after {
    content: '';
    display: block;
    position: absolute;
        top: 0; right: 0;
    width: 1px;
    height: 100%;
    background: #e0e0e0;
}

この回答では、片側を1つ指定できます。ボックスシャドウを使用するのとは異なり、IE8 +で動作します。

もちろん、特定の面を特定する必要があるため、疑似要素のプロパティを変更します。

* 新しくなり改善された *

&:before {
content: '';
display: block;
position: absolute;
    top: 0; right: 0; bottom: 0; left: 0;
border: 1px solid #b7b7b7;
}

これにより、ボーダーを使用して、ボックスの複数の側面を打つことができます。


8

使用box-sizing: border-box順序では、国境を作成するINSIDE divの幅を変更することなく、DIVを。

div幅を変更せずにdivの外側にoutline境界線を作成するために使用します。

ここに例:https : //jsfiddle.net/4000cae9/1/

注: border-box現在、IEではサポートされていません。

サポート:

http://caniuse.com/#feat=outline

http://caniuse.com/#search=border-box

#test, #test2 {
    width: 100px;
    height:100px;
    background-color:yellow;
}
#test {
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    border: 10px dashed blue;
}
#test2 {
    outline: 10px dashed red;
}


<p>Use box-sizing: border-box to create a border INSIDE a div without modifying div width.</p>
<div id="test">border-box</div>
<p>Use outline to create a border OUTSIDE a div without modifying div width.</p>
<div id="test2">outline</div>

6

アベンソンが言ったように、あなたは輪郭を使うことができますが、一つの落とし穴はOperaが「非長方形の形」を描くかもしれないということです。機能しているように見える別のオプションは、次のcssなどの負のマージンを使用することです。

div {
  float:left;
  width: 50%;
  border:1px solid black;
  margin: -1px;

}

このhtmlで:

<body>
  <div>A block</div>
  <div>Another block</div>
</body>

もう1つのあまりクリーンでないオプションは、HTMLに追加のマークアップを追加することです。たとえば、外側の要素の幅を設定し、内側の要素に境界線を追加します。CSS:

.outer { width: 50%; float: left;}
.inner { border: 1px solid black; }

そして、html:

<body>
  <div class="outer">
    <div class="inner">A block</div>
  </div>
  <div class="outer">
    <div class="inner">Another block</div>
  <div>
</body>

3

境界線がない場合は、パディングを使用します。境界線がある場合は、パディングを削除します。

.myDiv {
    width: 100px;
    height: 100px;
    padding-left: 2px;
    padding-right: 2px;
}

.myDiv:hover {
    padding-left: 0;
    padding-right: 0;
    border-left: 2px solid red;
    border-right: 2px solid red;
}

基本的に、2pxのパディングを2pxのボーダーに置き換えるだけです。Divサイズは変わりません。


2

あなたの場合、パディングからボーダーの半分を引くことでそれをぼんやりさせることができますか?(ボーダーの幅が5pxの場合、パディングから-2.5、負のパディングはできないので、小さくすると、ボックス全体の幅が小さくなります)。余白に2.5pxを追加して、ボックス全体を同じサイズに保つことができます。

私は本当にこの提案が好きではありませんが、これをきれいに処理する方法はないと思います。



0

別のオプション、背景色が無地の場合:

body { background-color: #FFF; }

.myDiv {
    width: 100px;
    height: 100px;
    border: 3px solid #FFF;  // Border is essentially invisible since background is also #FFF;
}

.myDiv:hover {
    border-color: blue;  // Just change the border color
}

#FFF透明に置き換えることができ、2つの値を変更することを覚えておく必要はありません。あなたの提案は、もしあなたが破線のボーダーを必要とするならbox-shadow、これがこの点で欠けているように機能するという利点があります。
limitlessloop

0

アウトライン:3px黒一色|| ボーダー:3px黒一色

div{
height:50px;
width:150px;
text-align:center;

}

div{    /*this is what you need ! */
outline:1px solid black
}
<div>
hello world
</div>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.