Menempatkan perbatasan dalam div dan tidak di tepi
Aku punya <div>
elemen dan saya ingin menempatkan perbatasan di atasnya. Aku tahu aku bisa menulis style="border: 1px solid black"
, tapi ini menambah 2px untuk kedua sisi div, yang tidak apa yang saya inginkan.
Saya lebih suka memiliki perbatasan ini sama -1px dari tepi div. Div itu sendiri adalah 100px x 100px, dan jika saya menambahkan perbatasan, maka saya harus melakukan beberapa matematika untuk membuat perbatasan muncul.
Apakah ada cara bahwa saya dapat membuat perbatasan muncul, dan memastikan kotak masih akan 100px (termasuk perbatasan)?
461
12
Set
box-sizing
propertiborder-box
:Ia bekerja pada IE8 & di atas.
Anda juga dapat menggunakan box-shadow seperti ini:
Contoh berikut ini: http://jsfiddle.net/nVyXS/ (hover untuk melihat perbatasan)
Ini bekerja di browser modern saja. Misalnya: No IE 8 dukungan. Lihat caniuse.com (box-shadow fitur) untuk info lebih lanjut.
Mungkin itu adalah terlambat menjawab, tapi saya ingin berbagi dengan temuan saya. Saya menemukan 2 pendekatan baru untuk masalah ini saya belum menemukan berikut ini jawaban:
Batin perbatasan melalui
box-shadow
css propertiYa, box-shadow digunakan untuk menambahkan kotak-bayangan untuk unsur-unsur. Tapi anda dapat menentukan
inset
bayangan, yang akan terlihat seperti dalam perbatasan bukan seperti bayangan. Anda hanya perlu mengatur horizontal dan vertikal bayangan0px
, dan "menyebar
" milikbox-shadow
dengan lebar border yang anda ingin memiliki. Jadi untuk 'dalam' perbatasan 10px anda akan menulis sebagai berikut:Berikut ini adalah [jsFiddle][1] contoh yang menggambarkan perbedaan antara
box-shadow
perbatasan dan 'normal' perbatasan. Dengan cara ini anda perbatasan dan kotak lebar dari total 100px termasuk perbatasan.Lebih lanjut tentang box-shadow:di sini
Perbatasan melalui outline css properti
Berikut ini adalah pendekatan lain, tapi cara ini perbatasan akan menjadi luar kotak. Berikut ini adalah [contoh][3]. Sebagai berikut dari contoh, anda dapat menggunakan css
outline
properti, untuk mengatur perbatasan yang tidak mempengaruhi lebar dan tinggi dari elemen. Dengan cara ini, lebar perbatasan tidak ditambahkan dengan lebar dari suatu elemen.Lebih lanjut tentang outline: di sini
Yahoo! Ini benar-benar mungkin. Aku menemukannya.
Untuk Batas Bawah:
Untuk Perbatasan Atas:
Gunakan pseudo element:
Menggunakan
::setelah
anda styling virtual last child dari elemen yang dipilih.konten
properti menciptakan anonim diganti elemen.Kami adalah yang mengandung elemen semu menggunakan mutlak posisi relatif terhadap orang tua. Maka anda memiliki kebebasan untuk memiliki apapun latar belakang kustom dan/atau perbatasan di latar belakang dan elemen utama.
Pendekatan ini tidak mempengaruhi penempatan isi elemen utama, yang berbeda dari menggunakan
box-sizing: border-box;
.Pertimbangkan contoh ini:
Di sini
.tombol
lebar dibatasi menggunakan elemen induk. Pengaturanborder-left-width
menyesuaikan konten-ukuran box dan dengan demikian posisi teks.Menggunakan pseudo-elemen pendekatan yang tidak mempengaruhi isi kotak size.
Tergantung pada aplikasi, dengan menggunakan pendekatan pseudo-elemen yang mungkin atau mungkin tidak diinginkan mendatang.
Meskipun pertanyaan ini sudah cukup dijawab dengan solusi menggunakan
box-shadow
dangaris
properties, saya ingin sedikit memperluas ini untuk semua orang yang telah mendarat di sini (seperti saya) mencari solusi untuk batin perbatasan dengan offsetJadi let's mengatakan anda memiliki hitam 100px x 100px
div
dan anda perlu untuk inset dengan perbatasan putih - yang memiliki batin offset dari 5px (katakanlah) - ini masih bisa dilakukan dengan sifat di atas.box-shadow
Kuncinya di sini adalah untuk mengetahui bahwa beberapa kotak-bayangan diperbolehkan, di mana yang pertama bayangan dan selanjutnya bayangan lebih rendah z-order.
Dengan pengetahuan itu, box-shadow deklarasi akan:
Pada dasarnya, apa yang deklarasi katakan adalah: render terakhir (10px putih) bayangan pertama, kemudian render sebelumnya 5px bayangan hitam di atas itu.
outline dengan garis-offset
Untuk efek yang sama seperti di atas garis deklarasi akan sama:
NB:
garis-offset
isn't didukung oleh IE jika yang's penting untuk anda.[Codepen demo][5] --
Anda dapat menggunakan properti
outline
dangaris-offset
dengan nilai negatif daripada menggunakan regularperbatasan
, bekerja untuk saya:Saya tahu ini agak tua, tapi karena kata kunci "perbatasan dalam" mendarat saya langsung di sini, saya ingin berbagi beberapa temuan yang mungkin layak disebut di sini. Ketika saya menambahkan perbatasan di negara melayang-layang, aku punya efek yang OP berbicara tentang. Perbatasan iklan piksel dengan dimensi kotak yang membuatnya gelisah. Ada dua cara yang bisa menangani hal ini yang juga bekerja untuk IE7.
2 ) Memberikan kompensasi perbatasan dengan marjin negatif. Ini masih akan menambah ekstra piksel, tetapi posisi dari elemen tidak akan gelisah di
untuk konsisten sesuaian antara yang baru dan yang lebih tua browser, tambahkan double container, luar dengan lebar, batin dengan perbatasan.
ini jelas hanya jika anda tepat lebar lebih penting daripada memiliki markup tambahan!
Terbaik cross browser solusi (sebagian besar untuk dukungan IE) seperti @Steve mengatakan adalah untuk membuat sebuah div 98px lebar dan tinggi dari menambahkan border 1px sekitar, atau anda dapat membuat gambar latar belakang untuk div 100x100 px dan menggambar perbatasan di atasnya.
Anda dapat melihat garis dengan offset tapi ini membutuhkan beberapa padding ada pada div. Atau anda bisa benar-benar posisi perbatasan div dalam, sesuatu seperti
Anda mungkin perlu untuk bermain-main dengan margin palsu perbatasan div sesuai yang anda inginkan.