2013-10-08 44 views

回答

5

雖然你已經接受了一個有效的答案,但它似乎比它更復雜,不得不計算和調整邊距等;我的建議是使邊界本身透明,並使用僞造的「邊界」,使用box-shadow(這不會導致任何運動,因爲它不是「流」這樣的一部分):

.o { 
    /* no changes here */ 
} 

.o.selected { 
    border-color: transparent; /* remove the border's colour */ 
    box-shadow: 0 0 0 2px blue; /* emulate the border */ 
} 

JS Fiddle demo

+0

要清楚,未選中的項目有1px邊框。我應該在那裏做同樣的技巧嗎? – hvgotcodes

+0

對不起,但我不明白你問的問題。在這種方法中,未被選擇的邊界('')有多寬並不重要。o')元素,當我們將'selected'類添加到它時,我們會使它透明(所以它仍然存在,除了它的顏色以外不變)。 –

+0

啊,我明白了。我更喜歡這個解決方案;不過,我會保留第一個答案的複選標記,因爲那是當時幫助我的答案。 – hvgotcodes

5

你需要修改,以考慮邊框寬度變化的位置。用途:

.selected { 
    border: 2px solid blue; 
    position:relative; 
    left:-1px; 
    top:-1px; 
} 

jsFiddle example

+0

danggit,我剛剛完成了編碼的js,甚至沒有考慮只是把它放在CSS中。 facepalm和thanx – hvgotcodes

+0

最好不要使用負左和上。只要保留像素填充應該做的伎倆。 –

+0

@AnthonyClaeys - 真,修改填充是另一種可能性。無論哪種方式,爲了補償邊界寬度的變化,需要改變另一個屬性以進行補償。 – j08691

0

你可以給他們的絕對位置。

.o { 
height: 50px; 
width: 100px; 
border: 1px solid red; 
margin-bottom: 10px; 
font-weight: bold; 
font-size: 16px; 
position: absolute; 
} 

.o1 { 
    top: 10px; 
} 

.o2 { 
    top: 100px; 
} 

.selected { 
    border: 2px solid blue; 
} 
2

未選中時添加填充。 並選擇時刪除填充。 這將取代用於2px邊框的1像素。

.o { 
    height: 50px; 
    width: 100px; 
    border: 1px solid red; 
    margin-bottom: 10px; 
    font-weight: bold; 
    font-size: 16px; 
    padding: 1px; 
} 

.selected { 
    border: 2px solid blue; 
    padding: 0px; 
} 
0

如果你不想與定位工作(會導致混亂,有時,或與當前的風格碰撞),則可以使用負保證金:

.selected { 
    border: 2px solid blue; 
    position:relative; 
    margin: -1px; 
} 
2

其他選項:

box-sizing: border-box;

這將包括作爲總寬度的一部分的邊框寬度,您會注意到內容的移位,雖然

wrap with another div

你可以換的內容,內容的div將有1px的白色邊框的外層div會1px的藍色。選擇兩個div變成紅色。

相關問題