Div'e 1 piksel kenarlık eklendiğinde Div boyutu artar, Bunu yapmak istemiyorum


128

Ekliyorum seçeneğine tıklayın, div boyutuna 1px sınır, böylece Div boyutu 2px X 2px artar. Div boyutunu büyütmek istemiyorum. Bunu yapmanın basit bir yolu var mı?

Dağınık Ayrıntılı Açıklama
Aslında, bir container-div'e float: left (aynı boyutta, simgeler gibi) ile DIV'ler ekliyorum, böylece tümü birbiri ardına istiflenir ve (container-div genişliği 300px'dir) genişlik açısından boşluk kalmadığında alt DIV'ler sonraki satırda gelir, dolayısıyla katalog benzer, ancak sınır nedeniyle sadece seçilen DIV boyutu artar, seçilen DIV altındaki DIV sağa gider ve seçilen DIV'nin altında boş alan oluşturur.

DÜZENLEME:
Seçimde Yükseklik / Genişliği azaltma, ancak nasıl yeniden artırılacağı. Bazı üçüncü taraf çerçeveler kullanıldığında, DIV seçimi kaybettiğinde olay olmayın ..


Yanıtlar:


49

Border css özelliği, tablolardaki tds hariç tüm öğelerin "dış" boyutunu artıracaktır. Firebug'da ( üretilmiyor ), html-> layout sekmesinin altında bunun nasıl çalıştığına dair görsel bir fikir edinebilirsiniz.

Örnek olarak, genişliği ve yüksekliği 10 piksel ve kenarlığı 1 piksel olan bir div, 12 piksellik bir dış genişliğe ve yüksekliğe sahip olacaktır.

Sizin durumunuzda, kenarlığın div'in "içinde" görünmesini sağlamak için, seçtiğiniz CSS sınıfında, öğenin genişliğini ve yüksekliğini kenarlık boyutunuzu iki katına düşürebilir veya aynısını aşağıdakiler için yapabilirsiniz: öğeler dolgusu.

Örneğin:

div.navitem
{
    width: 15px;
    height: 15px;
    /* padding: 5px; */
}

div.navitem .selected
{
    border: 1px solid;
    width: 13px;
    height: 13px;
    /* padding: 4px */
}

thnx, .dragdrop seçimli sınıfım vardı, ancak tüm sürüklenebilir nesneler tarafından kullanılıyordu ve 3 farklı boyutta (3 farklı türde) Sürüklenebilir nesneye sahiptim, bu yüzden .dragdrop-seçili tüm 3 VE set dolgusunda aynı dolguyu tuttum. . & işe yaradı. :)
Nachiket

Bu, duyarlı tasarımlar için iyi bir çözüm değildir. outlineArka planla aynı renkte bir kenarlık kullanmak veya kullanmak (ve seçildiğinde rengini başka bir şeye değiştirmek) daha esnektir.
AliBZ

1
Ancak, öğenin akışına izin vermek veya görünüm port genişliğine yanıt vermek için genişliği sabit kodlamadan kaçınmanız gerektiğini varsayalım: cevabımı şunu kullanarak görünborder-color: transparent
Edward Newell

1
Bu hesaplamalara gerek yok, sadece kutu boyutlandırmayı border-box olarak ayarlayın. Aşağıdaki ejfrancis'in cevabına bakın ve bu makaleye bakın .
jbyrd

Tablolardaki td'den emin misiniz? Chrome'da hala boyuta katkıda bulunuyor gibi görünüyor.
Koruyucu 1

105

Bu, bu senaryoda da yararlıdır. div genişliğini değiştirmeden sınırları ayarlamanıza olanak tanır

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+ */
}

Alındığı http://css-tricks.com/box-sizing/


4
kutu boyutlandırma: border-box gerçekten her şeye modern bir en iyi uygulama olarak ayarlanmalıdır. Bkz paulirish.com/2012/box-sizing-border-box-ftw
jbyrd

6
Bu bazı durumlarda işe yaramıyor gibi görünüyor; tam olarak neden emin değilim. Bakınız: codepen.io/anon/pen/QZaBQG
Wilson Biggs

51

arka planla aynı renkte olması için tıklamadan önce üzerine bir kenarlık ayarlayın.

Sonra tıkladığınızda sadece arka plan rengini değiştirin ve genişlik değişmeyecektir.


3
Hünerli! keşke kendim düşünseydim.
Rijul Gupta

9
Evet, ama düz renkli bir arka planınız yoksa? Cevabımı kullanarak görünborder-color: transparent
Edward Newell

44

outlineBunun yerine başka bir iyi çözüm kullanmaktır border. Kutu modelini etkilemeden bir sınır ekler. Bu, IE8 +, Chrome, Firefox, Opera, Safari'de çalışır.

( https://stackoverflow.com/a/8319190/2105930 )


Harika, ama sınırla karşılaştırıldığında, benim durumum için "sol dış çizgi ..." yok.
Imskull

2
Sonra kullanmanızı tavsiye box-shadowbaşına benim diğer yanıt da benzer bir soru üzerine. Aynı tarayıcı desteğine sahip değil, ancak bu bugünlerde daha az sorun değil.
chowey

Teşekkürler #chowey, yeni farkettim ki box-shadowtek taraflı sınırı da destekleyebilir, kaymakam çözümü.
Imskull

border-color: transparentdaha iyi tarayıcılar arası desteği var --- cevabımı görün ...
Edward Newell

1
Bu yorum az derecelendirilmiş. Bir öğeyi yeniden boyutlandırmadan etrafına sınır çizmenin harika bir yolu!
Sebastian Nemeth

42

Değiştirmeyi deneyin borderiçin outline:

outline: 1px solid black;

8
Sınır yarıçapınız olmadığı sürece çalışır.
Jean-Marie Dalmasso

28

Bu çözümlerin çoğunu kullandıktan sonra border-color: transparent, en esnek ve en yaygın şekilde desteklenen ayar hilesi olduğunu görüyorum :

.some-element {
    border: solid 1px transparent;
}

.some-element-selected {
    border: solid 1px black;
}

Neden daha iyi:

  • Öğenin genişliğini sabit kodlamaya gerek yok
  • Harika tarayıcılar arası destek (yalnızca IE6 kaçırıldı)
  • İle aksine outline, örneğin üst ve alt kenarlıkları ayrı ayrı belirtebilirsiniz.
  • Arka plan rengini ayarlamaktan farklı olarak, arka planı değiştirirseniz bunu güncellemenize gerek yoktur ve düz olmayan renkli arka planlarla uyumludur.

1
Bunu, UX'imdeki dinamik olarak boyutlandırılmış öğelerle en iyi şekilde çalıştığını buldum. MouseOver'da boyut değiştirmeyi tamamen durdurdu! Teşekkürler Bay Newell!
d3r3kk

Genial. Teşekkürler!
Harald Hoerwick

İşte o!
ederken gerçek

transparentbu bir ihtiyaç!
dimpiax

İhtiyacım olan bu (Y)
HaxxanRaxa

20

Bunu dene

box-sizing: border-box;

4
Cevap bu olmalı, çok basit.
Spets

Bu neden her yerde çalışmıyor? Örneğin codepen.io/anon/pen/QZaBQG
Tom

merhaba @ Tom, henüz neden çalışmadığından emin değilim. Ancak sizin durumunuzda lütfen kaptaki yüksekliği kaldırmayı ve bunun yerine dolgu kullanmayı düşünün. Sorununuzu çözebilir.
Hoang Trung

18

Bu sorunu çözmek için genellikle dolgu kullanıyorum. Kenarlık kaybolduğunda dolgu eklenecek ve kenarlık göründüğünde kaldırılacaktır. Basit kod:

.good-border {
  padding: 1px;
}

.good-border:hover {
  padding: 0px;
  border: 1px solid blue;
}

görüntü açıklamasını buraya girin

Örnek kodumun tamamını JSFiddle'da görüntüleyin: https://jsfiddle.net/3t7vyebt/4/


1
Bana gerçekte ne olduğunu söyleyebilir misin, kafam karıştı, neden kötü sınırda buraya geldiğinizde üzerine geldiğinizde aşağı doğru kayıyor?
Suraj Jain

@SurajJain Çünkü üzerine geldiğinizde "bozuk kenarlık" div boyutu değişecek (1 piksel kenarlık ekleyin).
Tho

6

Sadece genişliği ve yüksekliği kenarlık genişliğinin iki katı kadar azaltın


3

Ek gölgelerle bazı süslü şeyler yapabilirsiniz. Boyutunu değiştirmeden bir öğenin altına kenarlık koyma örneği:

.bottom-border {
  box-shadow:inset 0px -3px 0px #000;
}

3

Bazen, açık bir şekilde ayarlanmadan yükseklik veya genişliğin etkilenmesini istemezsiniz. Bu durumda, sözde öğeleri kullanmayı yararlı buluyorum.

.border-me {
    position: relative;
}

.border-me::after {
    content: "";
    position: absolute;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    border: solid 1px black;
}

Ayrıca sözde unsurla çok daha fazlasını yapabilirsiniz, bu yüzden bu oldukça güçlü bir modeldir.


1
Ben 2px geçmek istediğini 1 piksellik sınır vardı ve ben yapmak bulabildiğim tek yolu kaldırarak oldu widthve heightbir ekleme bottomve leftek olarak mülkiyet topve leftbunların hepsi ters genişliğine ayarlanması gerekir, orijinal kenarlık (benim durumumda -1px). Büyük hack
Chase Sandmann

2

Kenarlığı artırdığınızda kenar boşluğu boyutunu azaltmayı deneyin


2

Bir sınıf ekleyerek herhangi bir öğeyi "sınırlayabilmem" ve boyutlarını etkilememem gerekiyordu. Benim için iyi bir çözüm, kutu gölgesi kullanmaktı. Ancak bazı durumlarda, diğer kardeşler nedeniyle etki görülmedi. Bu yüzden hem tipik kutu gölgesini hem de ekli kutu gölgesini birleştirdim. Sonuç, herhangi bir boyutu değiştirmeden bir kenarlık görünümüdür.

Virgülle ayrılmış değerler. İşte basit bir örnek:

.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);
}

jsfiddle

Tercih ettiğiniz görünüme göre ayarlayın ve gitmeniz iyi olur!


2

Css calc () fonksiyonunu da kullanabiliriz

width: calc(100% - 2px);

kenarlıklar için 2 piksel çıkarılıyor


1
.filter_list_button_remove {
    border: 1px solid transparent; 
    background-color: transparent;
}
.filter_list_button_remove:hover {
    border: 1px solid; 
}

1
Niyetiniz için bazı açıklamalar eklediğinizde, OP ve diğer ziyaretçiler için daha yararlı olacağını düşünüyorum.
Reporter

1

Arka planınızla aynı renkte kenarlıklı öğe oluşturabilirsiniz, ardından kenarlığın görünmesini istediğinizde rengini değiştirmeniz yeterlidir.


1
Evet, ama arka planınızın tek renk olmadığını varsayalım ... kullanmaya dayalı cevabımı görünborder-color: transparent
Edward Newell

Veya hep birlikteul li a{border-bottom:2px solid transparent;} ul li a:hover{border-bottom:2px solid red;}
stackunderflow

0

İçeriğiniz divdinamik olarak işleniyorsa ve yüksekliğini ayarlamak istiyorsanız, basit bir hile kullanabilirsiniz outline:

button {
    padding: 10px;
    border: 4px solid blue;
    border-radius: 4px;
    outline: 2px solid white;
    outline-offset: -4px;
}

button:hover {
    outline-color: transparent;
}

Örnek burada: https://codepen.io/Happysk/pen/zeQzaZ



0

Bir kutu gölge ekini deneyebilirsiniz

bunun gibi bir şey: kutu-gölge: inset 0px -5px 0px 0px #fff

boyutu artırmadan öğenin altına 5 piksellik beyaz bir kenarlık ekler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.