Bagaimana memberi border ke elemen apapun menggunakan css tanpa menambahkan border-width ke seluruh lebar elemen?
Seperti di Photoshop kita bisa memberikan stroke- Inside, center dan outside
Saya pikir properti default css border adalah center seperti center di photoshop, benar kan?
Saya ingin memberi border di dalam kotak bukan di luar. dan tidak ingin menyertakan lebar batas dalam lebar kotak.
Lihat ukuran kotak CSS ...
Properti CSS3 ukuran kotak dapat melakukan ini. Nilai border-box (sebagai lawan dari content-box default) membuat kotak yang dirender akhir menjadi lebar yang dinyatakan, dan setiap border dan padding dipotong di dalam kotak. Sekarang Anda dapat dengan aman mendeklarasikan elemen Anda dengan lebar 100%, termasuk padding dan border berbasis piksel, dan mencapai tujuan Anda dengan sempurna.
Saya sarankan membuat mixin untuk menangani ini untuk Anda. Anda dapat menemukan informasi lebih lanjut tentang ukuran kotak di W3c http://www.w3schools.com/cssref/css3_pr_box-sizing.asp
sumber
box-sizing
sudah cukup.Bergantung pada dukungan browser yang Anda inginkan, Anda dapat menggunakan
box-shadow
properti.Anda dapat mengatur nilai blur ke 0 dan penyebaran ke ketebalan apa pun yang Anda cari. Hal yang hebat tentang bayangan kotak adalah Anda dapat mengontrol apakah itu digambar di luar (secara default) atau di dalam (menggunakan
inset
properti).Contoh:
atau
Satu keuntungan besar menggunakan bayangan kotak adalah Anda bisa berkreasi dengan menggunakan beberapa bayangan kotak:
Satu-satunya hal yang tidak dapat saya katakan adalah perbedaan apa yang akan membuat performa rendering menjadi bijaksana. Saya akan berasumsi itu mungkin menjadi masalah jika Anda memiliki ratusan elemen yang menggunakan teknik ini di layar sekaligus.
sumber
Saya mengalami masalah yang sama.
Jawaban ini memungkinkan Anda menentukan satu sisi. Dan akan bekerja di IE8 + - tidak seperti menggunakan box-shadow.
Tentu saja ubah properti elemen pseudo Anda karena Anda perlu memilih sisi tertentu.
* Baru dan ditingkatkan *
Ini memungkinkan kemampuan untuk menggunakan border dan mengenai beberapa sisi kotak.
sumber
Gunakan
box-sizing: border-box
untuk membuat perbatasan DI DALAM div tanpa mengubah lebar div.Gunakan
outline
untuk membuat perbatasan DI LUAR div tanpa mengubah lebar div.Berikut contohnya: https://jsfiddle.net/4000cae9/1/
Catatan:
border-box
saat ini tidak didukung oleh IEDukung:
http://caniuse.com/#feat=outline
http://caniuse.com/#search=border-box
sumber
Seperti yang dikatakan abenson, Anda dapat menggunakan garis besar tetapi satu gotcha adalah bahwa Opera mungkin menggambar "bentuk non-persegi panjang". Opsi lain yang tampaknya berhasil adalah menggunakan margin negatif, seperti css ini:
Dengan html ini:
Satu opsi kurang bersih lainnya adalah menambahkan markup ekstra ke html. Misalnya, Anda mengatur lebar elemen luar dan menambahkan batas ke bagian dalam. CSS:
Dan html:
sumber
Gunakan bantalan jika tidak ada pembatas. Hapus padding jika ada pembatas.
Pada dasarnya, ganti saja padding 2px dengan batas 2px. Ukuran Div tetap sama.
sumber
Dalam kasus Anda, dapatkah Anda memalsukannya dengan mengurangi setengah batas dari padding? (-2,5 dari padding jika border Anda lebarnya 5px, Anda tidak boleh memiliki padding negatif jadi untuk mengecilkannya kurangi lebar keseluruhan kotak). Anda dapat menambahkan 2.5px ekstra ke margin untuk menjaga ukuran keseluruhan kotak tetap sama.
Saya benar-benar tidak menyukai saran ini, tetapi saya rasa tidak ada cara untuk menangani ini dengan bersih.
sumber
Jadi, Anda mencoba untuk mencapai yang sama seperti bug model kotak IE terkenal ? Itu tidak mungkin. Atau Anda ingin mendukung klien dengan IE hanya di Windows dan memilih doctype yang memaksa IE ke dalam mode quirks .
sumber
Pilihan lain, jika warna latar Anda solid:
sumber
#FFF
transparan dan kemudian Anda tidak perlu ingat untuk mengubah dua nilai. Saran Anda memiliki manfaat bahwa jika Anda membutuhkan garis putus-putus ini akan berfungsi sebagaimanabox-shadow
kekurangan dalam hal ini.garis besar: 3px hitam pekat || border: 3px hitam pekat
sumber