Ketika batas 1 px ditambahkan ke div, ukuran Div meningkat, Tidak ingin melakukan itu


128

Pada klik Saya menambahkan, 1px berbatasan dengan div, jadi ukuran Div bertambah 2px X 2px. Saya tidak ingin ukuran div bertambah. Apakah ada cara sederhana untuk melakukannya?

Penjelasan Terperinci Berantakan
Sebenarnya saya menambahkan DIV dengan float: left (ukuran yang sama, seperti ikon) ke container-div, jadi semua menumpuk satu demi satu, dan ketika (lebar container-div adalah 300px) tidak ada spasi yang tersisa Anak DIV datang di baris berikutnya, jadi seperti katalog, tetapi karena perbatasan hanya ukuran DIV yang dipilih yang bertambah, DIV di bawah DIV yang dipilih pergi ke kanan dan menciptakan ruang kosong di bawah DIV yang dipilih.

EDIT:
Mengurangi Tinggi / Lebar pada seleksi, tetapi bagaimana meningkatkannya kembali. Menggunakan beberapa kerangka pihak ke-3, jadi tidak ada acara ketika DIV kehilangan pilihan ..


Jawaban:


49

Properti border css akan meningkatkan semua elemen ukuran "luar", kecuali tds dalam tabel. Anda bisa mendapatkan gambaran visual tentang cara kerjanya di Firebug ( dihentikan ), di bawah tab tata letak html->.

Seperti contoh, div dengan lebar dan tinggi 10px dan border 1px, akan memiliki lebar dan tinggi 12px.

Untuk kasus Anda, untuk membuatnya tampak seperti bingkai berada di "dalam" div, di kelas CSS yang Anda pilih, Anda dapat mengurangi lebar dan tinggi elemen dengan menggandakan ukuran bingkai Anda, atau Anda dapat melakukan hal yang sama untuk elemen bantalan.

Misalnya:

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

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

thnx, saya memiliki kelas .dragdrop-selected tetapi itu digunakan oleh semua objek yang dapat diseret dan saya memiliki 3 ukuran yang berbeda (3 jenis yang berbeda) dari objek yang dapat diseret, jadi saya tetap mengisi padding yang sama di semua 3 DAN mengatur padding di .dragdrop-selected. . & berhasil. :)
Nachiket

Ini bukan solusi yang baik untuk desain responsif. Menggunakan outlineatau perbatasan dengan warna yang sama dengan latar belakang (dan mengubah warnanya ke warna lain saat dipilih) lebih fleksibel.
AliBZ

1
Tapi misalkan Anda perlu menghindari hard-coding lebar, untuk membiarkan elemen mengalir atau merespons lebar view-port: lihat jawaban saya menggunakanborder-color: transparent
Edward Newell

Tidak perlu untuk perhitungan ini, cukup setel ukuran kotak ke kotak batas. Lihat jawaban ejfrancis di bawah , dan lihat artikel ini .
jbyrd

Apakah Anda yakin tentang td dalam tabel? Di Chrome sepertinya masih menambah ukuran.
Pelindung satu

105

Ini juga membantu dalam skenario ini. ini memungkinkan Anda untuk mengatur batas tanpa mengubah lebar 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+ */
}

Diambil dari http://css-tricks.com/box-sizing/


4
box-sizing: border-box harus benar-benar diatur dalam segala hal sebagai praktik terbaik modern. Lihat paulirish.com/2012/box-sizing-border-box-ftw
jbyrd

6
Ini tampaknya tidak berhasil dalam beberapa kasus; tidak begitu yakin mengapa. Lihat: codepen.io/anon/pen/QZaBQG
Wilson Biggs

51

atur batas di atasnya sebelum Anda mengklik agar warnanya sama dengan latar belakang.

Kemudian ketika Anda mengklik ubah saja warna latar belakang dan lebarnya tidak akan berubah.


3
Berbakat! Seandainya aku memikirkannya sendiri.
Rijul Gupta

9
Ya, tetapi jika Anda tidak memiliki latar belakang berwarna solid? Lihat jawaban saya menggunakanborder-color: transparent
Edward Newell

44

Solusi lain yang baik adalah dengan menggunakan outlinebukan border. Ini menambahkan batas tanpa mempengaruhi model kotak. Ini berfungsi di IE8 +, Chrome, Firefox, Opera, Safari.

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


Ini bagus, tapi dibandingkan dengan border, tidak ada "outline-left, ...", tidak untuk kasus saya.
Imskull

2
Maka saya sarankan menggunakan box-shadowper jawaban saya yang lain pada pertanyaan serupa. Itu tidak memiliki dukungan browser yang sama, tetapi itu bukan masalah hari ini.
chowey

Terima kasih #chowey, baru sadar box-shadowbisa mendukung perbatasan satu sisi juga, solusi prefek.
Imskull

border-color: transparentmemiliki dukungan lintas-browser yang lebih baik --- lihat jawaban saya ...
Edward Newell

1
Komentar ini diremehkan. Ini cara yang bagus untuk membuat perbatasan di sekitar elemen tanpa mengubah ukurannya!
Sebastian Nemeth


28

Setelah menggunakan banyak dari solusi ini, menurut saya menggunakan trik pengaturan border-color: transparentmenjadi yang paling fleksibel dan didukung secara luas:

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

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

Mengapa lebih baik:

  • Tidak perlu melakukan hard-code untuk lebar elemen
  • Dukungan lintas-browser yang hebat (hanya IE6 yang terlewat)
  • Berbeda dengan outline, Anda masih dapat menentukan, misalnya, batas atas dan bawah secara terpisah
  • Tidak seperti mengatur warna perbatasan menjadi latar belakang, Anda tidak perlu memperbarui ini jika Anda mengubah latar belakang, dan itu kompatibel dengan latar belakang berwarna non-solid.

1
Saya menemukan ini untuk bekerja paling baik dengan item berukuran dinamis di UX saya. Menghentikan sepenuhnya perubahan ukuran yang terjadi onMouseOver! Terima kasih Tuan Newell!
d3r3kk

Ramah. Terimakasih!
Harald Hoerwick

Itu dia!
sementara benar

transparentinilah yang dibutuhkan!
dimpiax

Inilah yang saya butuhkan (Y)
HaxxanRaxa

20

Coba ini

box-sizing: border-box;

4
Ini harus menjadi jawabannya, sangat sederhana.
Spesialis

Mengapa ini tidak berhasil di semua tempat? Misalnya codepen.io/anon/pen/QZaBQG
Tom

hai @ Tom, saya tidak yakin mengapa ini belum berhasil. Tetapi dalam kasus Anda, harap pertimbangkan untuk menghapus ketinggian dalam wadah dan menggunakan bantalan sebagai gantinya. Dapat memecahkan masalah Anda.
Hoang Trung

17

Saya biasanya menggunakan padding untuk mengatasi masalah ini. Padding akan ditambahkan saat pembatas menghilang dan dihapus saat pembatas muncul. Kode sampel:

.good-border {
  padding: 1px;
}

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

masukkan deskripsi gambar di sini

Lihat kode sampel lengkap saya di JSFiddle: https://jsfiddle.net/3t7vyebt/4/


1
Bisakah Anda ceritakan apa yang sebenarnya terjadi, saya bingung, mengapa di perbatasan yang buruk hover di sini bergeser ke bawah saat Anda mengarahkan kursor ke atasnya?
Suraj Jain

@SurajJain Karena ukuran div "perbatasan buruk" akan berubah (tambahkan batas 1px) saat Anda mengarahkan kursor ke atasnya.
Tho

6

Kurangi saja lebar dan tinggi dua kali lipat dari lebar bingkai


3

Anda dapat melakukan beberapa hal mewah dengan bayangan inset. Contoh untuk meletakkan perbatasan di bagian bawah elemen tanpa mengubah ukurannya:

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

3

Terkadang Anda tidak ingin tinggi atau lebar terpengaruh tanpa menyetelnya secara eksplisit. Dalam hal ini, saya merasa terbantu dengan menggunakan elemen pseudo.

.border-me {
    position: relative;
}

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

Anda juga dapat melakukan lebih banyak hal dengan elemen pseudo sehingga ini adalah pola yang cukup kuat.


1
Saya memiliki batas 1px yang ingin saya ubah menjadi 2px, dan satu-satunya cara yang dapat saya lakukan untuk melakukannya adalah dengan menghapus widthdan heightdan menambahkan properti bottomdan leftselain topdan left, yang semuanya harus disetel dengan lebar yang berlawanan dari perbatasan asli (dalam kasus saya -1px). Peretasan hebat
Chase Sandmann

2

Coba kurangi ukuran margin saat Anda menambah batas


2

Saya harus dapat "membatasi" elemen apa pun dengan menambahkan kelas dan tidak memengaruhi dimensinya. Solusi yang baik bagi saya adalah menggunakan box-shadow. Tetapi dalam beberapa kasus, efeknya tidak terlihat karena saudara kandung lainnya. Jadi saya menggabungkan kedua bayangan kotak khas serta bayangan kotak sisipan. Hasilnya adalah tampilan tepi tanpa mengubah dimensi apa pun.

Nilai dipisahkan dengan koma. Berikut contoh sederhananya:

.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.dll

Sesuaikan dengan tampilan pilihan Anda dan Anda siap berangkat!


2

Kita juga bisa menggunakan fungsi css calc ()

width: calc(100% - 2px);

mengurangi 2px untuk perbatasan


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

1
Saya pikir akan lebih membantu bagi OP dan pengunjung selanjutnya, bila Anda menambahkan beberapa penjelasan untuk maksud Anda.
Reporter

1

Anda bisa membuat elemen dengan border dengan warna yang sama dengan background Anda, lalu saat ingin menampilkan border, ubah saja warnanya.


1
Ya, tapi misalkan latar belakang Anda bukan warna solid ... lihat tanggapan saya berdasarkan penggunaanborder-color: transparent
Edward Newell

Atau bersama-sama sepertiul li a{border-bottom:2px solid transparent;} ul li a:hover{border-bottom:2px solid red;}
stackunderflow

0

Jika konten Anda divdirender secara dinamis dan Anda ingin menyetel tingginya, Anda dapat menggunakan trik sederhana dengan outline:

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

button:hover {
    outline-color: transparent;
}

Contoh di sini: https://codepen.io/Happysk/pen/zeQzaZ


Sayangnya, garis besar tidak memiliki sudut membulat :(
M3RS

0

Anda dapat mencoba inset box-shadow

sesuatu seperti ini: box-shadow: inset 0px -5px 0px 0px #fff

menambahkan batas 5px putih ke bagian bawah elemen tanpa menambah ukuran

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.