Saya memiliki <div>
elemen dan saya ingin meletakkan perbatasan di atasnya. Saya tahu saya bisa menulis style="border: 1px solid black"
, tetapi ini menambahkan 2px ke kedua sisi div, yang bukan yang saya inginkan.
Saya lebih suka memiliki perbatasan ini menjadi -1px dari tepi div. Div itu sendiri 100px x 100px, dan jika saya menambahkan perbatasan, maka saya harus melakukan beberapa matematika untuk membuat perbatasan muncul.
Apakah ada cara agar saya dapat membuat perbatasan muncul, dan memastikan kotak itu masih 100px (termasuk perbatasan)?
Jawaban:
Setel
box-sizing
properti keborder-box
:Ini bekerja pada IE8 & di atas .
sumber
outline
.box-sizing
caniuse.com/#search=box-sizingAnda juga dapat menggunakan bayangan kotak seperti ini:
Contoh di sini: http://jsfiddle.net/nVyXS/ (arahkan kursor ke perbatasan)
Ini hanya berfungsi di browser modern. Misalnya: Tidak ada dukungan IE 8. Lihat caniuse.com (fitur bayangan kotak) untuk info lebih lanjut.
sumber
Mungkin ini jawaban yang terlambat, tetapi saya ingin berbagi dengan temuan saya. Saya menemukan 2 pendekatan baru untuk masalah ini yang belum saya temukan di sini dalam jawabannya:
Perbatasan dalam melalui
box-shadow
properti cssYa, bayangan kotak digunakan untuk menambahkan bayangan kotak ke elemen. Tapi Anda bisa menentukan
inset
bayangan, yang akan terlihat seperti perbatasan bagian dalam, bukan seperti bayangan. Anda hanya perlu mengatur bayangan horizontal dan vertikal0px
, danspread
properti " " daribox-shadow
dengan lebar perbatasan yang Anda inginkan. Jadi untuk batas 'batin' 10px Anda akan menulis yang berikut ini:Berikut adalah contoh jsFiddle yang menggambarkan perbedaan antara
box-shadow
perbatasan dan perbatasan 'normal'. Dengan cara ini, batas Anda dan lebar kotak adalah total 100px termasuk batas.Lebih lanjut tentang bayangan kotak: di sini
Perbatasan melalui garis besar properti css
Berikut adalah pendekatan lain, tetapi dengan cara ini perbatasan akan berada di luar kotak. Berikut ini sebuah contoh . Sebagai berikut dari contoh, Anda dapat menggunakan
outline
properti css , untuk mengatur batas yang tidak mempengaruhi lebar dan tinggi elemen. Dengan cara ini, lebar perbatasan tidak ditambahkan ke lebar elemen.Lebih lanjut tentang garis besar: di sini
sumber
Yahoo! Ini sangat mungkin. Aku menemukannya.
Untuk Batas Bawah:
Untuk Batas Atas:
sumber
Gunakan elemen pseudo :
Menggunakan
::after
Anda menata anak terakhir virtual dari elemen yang dipilih.content
properti menciptakan elemen yang diganti anonim .Kami mengandung elemen pseudo menggunakan posisi absolut relatif terhadap induknya. Kemudian Anda memiliki kebebasan untuk memiliki latar belakang dan / atau perbatasan khusus apa pun di latar belakang elemen utama Anda.
Pendekatan ini tidak mempengaruhi penempatan konten elemen utama, yang berbeda dari penggunaan
box-sizing: border-box;
.Pertimbangkan contoh ini:
Di sini
.button
lebar dibatasi menggunakan elemen induk. Pengaturanborder-left-width
menyesuaikan ukuran kotak konten dan dengan demikian posisi teks.Menggunakan pendekatan elemen semu tidak mempengaruhi ukuran kotak konten.
Bergantung pada aplikasinya, pendekatan yang menggunakan elemen pseudo mungkin atau mungkin bukan perilaku yang diinginkan.
sumber
:Before
.Meskipun pertanyaan ini sudah dijawab secara memadai dengan solusi menggunakan
box-shadow
danoutline
properti, saya ingin sedikit memperluas ini untuk semua orang yang telah mendarat di sini (seperti saya) mencari solusi untuk perbatasan dalam dengan offsetJadi katakanlah Anda memiliki 100px x 100px hitam
div
dan Anda harus memasukkannya dengan batas putih - yang memiliki offset bagian dalam 5px (katakanlah) - ini masih dapat dilakukan dengan properti di atas.bayangan kotak
Kuncinya di sini adalah untuk mengetahui bahwa banyak bayangan kotak diperbolehkan, di mana bayangan pertama berada di atas dan bayangan berikutnya memiliki urutan z yang lebih rendah.
Dengan pengetahuan itu, deklarasi bayangan kotak akan:
Tampilkan cuplikan kode
Pada dasarnya, apa yang dikatakan deklarasi itu adalah: render bayangan terakhir (putih 10px) terlebih dahulu, lalu render bayangan hitam 5px sebelumnya di atasnya.
outline dengan outline-offset
Untuk efek yang sama seperti di atas, deklarasi garis besar akan menjadi:
Tampilkan cuplikan kode
NB:
outline-offset
tidak didukung oleh IE jika itu penting bagi Anda.Demo codepen
sumber
Anda dapat menggunakan properti
outline
danoutline-offset
dengan nilai negatif alih-alih menggunakan biasaborder
, berfungsi untuk saya:sumber
Saya tahu ini agak lebih tua, tetapi karena kata kunci "border inside" langsung mendarat di sini, saya ingin berbagi beberapa temuan yang mungkin layak disebutkan di sini. Ketika saya menambahkan perbatasan pada status hover, saya mendapat efek yang dibicarakan OP. Perbatasan iklan piksel ke dimensi kotak yang membuatnya gelisah. Ada dua cara lagi yang bisa dilakukan untuk mengatasi hal ini yang juga berfungsi untuk IE7.
1) Memiliki perbatasan sudah terpasang ke elemen dan cukup ubah warna. Dengan cara ini matematika sudah termasuk.
2) Kompensasi perbatasan Anda dengan margin negatif. Ini masih akan menambah piksel tambahan, tetapi penentuan posisi elemen tidak akan gelisah
sumber
untuk rendering yang konsisten antara browser baru dan lama, tambahkan wadah ganda, bagian luar dengan lebar, bagian dalam dengan perbatasan.
ini jelas hanya jika lebar Anda yang tepat lebih penting daripada memiliki markup ekstra!
sumber
sumber
Solusi cross browser terbaik (kebanyakan untuk dukungan IE) seperti @Steve katakan adalah membuat div 98px lebar dan tinggi daripada menambahkan perbatasan 1px di sekitarnya, atau Anda bisa membuat gambar latar belakang untuk div 100x100 px dan menggambar perbatasan di atasnya.
sumber
Anda dapat melihat garis besar dengan offset tetapi ini membutuhkan beberapa lapisan agar ada pada div Anda. Atau Anda benar-benar dapat memposisikan div perbatasan di dalam, sesuatu seperti
Anda mungkin perlu bermain-main dengan margin di perbatasan palsu agar sesuai dengan keinginan Anda.
sumber
Solusi yang lebih modern mungkin menggunakan css
variables
dancalc
.calc
didukung secara luas tetapivariables
belum dalam IE11 (polyfill tersedia).Meskipun ini memang menggunakan beberapa perhitungan, yang ingin dihindari oleh pertanyaan awal. Saya pikir ini adalah waktu yang tepat untuk menggunakan perhitungan karena mereka dikendalikan oleh css itu sendiri. Itu juga tidak perlu markup tambahan atau penyalahgunaan properti css lain yang mungkin diperlukan nanti.
Solusi ini hanya sangat berguna jika ketinggian tetap tidak diperlukan .
sumber
Salah satu solusi yang saya tidak lihat disebutkan di atas adalah kasus di mana Anda memiliki padding pada input Anda, yang saya lakukan 99% dari waktu. Anda dapat melakukan sesuatu di sepanjang ...
Yang saya sukai dari ini adalah saya memiliki menu lengkap properti border + padding + transisi untuk setiap sisi.
sumber