Adakah yang tahu perbedaan antara properti 'border' dan 'outline' di CSS? Jika tidak ada perbedaan, lalu mengapa ada dua properti untuk hal yang sama?
194
Dari: http://webdesign.about.com/od/advancedcss/a/outline_style.htm
Properti outline CSS adalah properti yang membingungkan. Ketika Anda pertama kali mempelajarinya, sulit untuk memahami bagaimana itu bahkan berbeda dari properti perbatasan. W3C menjelaskannya sebagai memiliki perbedaan berikut:
1.Outlines tidak memakan ruang.
2.Outlines mungkin non-persegi panjang.
Selain beberapa jawaban lain ... berikut adalah beberapa perbedaan lagi yang dapat saya pikirkan:
1) Sudut membulat
border
mendukung sudut bulat denganborder-radius
properti.outline
tidak.Tampilkan cuplikan kode
BIOLA
(NB: Meskipun firefox memiliki
-moz-outline-radius
properti yang memungkinkan sudut bulat pada garis besar ... properti ini tidak didefinisikan dalam standar CSS apa pun, dan tidak didukung oleh peramban lain ( sumber ))2) Hanya menata satu sisi
border memiliki properti untuk setiap sisi gaya
border-top:
,border-left:
dll.garis besar tidak bisa melakukan ini. Tidak ada outline-top: dll. Semuanya atau tidak sama sekali. (lihat posting SO ini )
3) offset
outline mendukung offset dengan properti outline-offset . perbatasan tidak.
Tampilkan cuplikan kode
BIOLA
Catatan: Semua dukungan browser utama
outline-offset
kecuali Internet Explorersumber
outlines
lebih cepat di-render daripada batas?Lebih jauh ke jawaban lain, garis besar biasanya digunakan untuk debugging. Opera memiliki beberapa gaya CSS pengguna yang bagus yang menggunakan properti outline untuk menunjukkan kepada Anda di mana semua elemen dalam dokumen.
Jika Anda mencoba mencari tahu mengapa suatu elemen tidak muncul di tempat yang Anda harapkan atau pada ukuran yang Anda harapkan, tambahkan beberapa garis besar dan lihat di mana elemen-elemen itu berada.
Seperti yang telah disebutkan, garis besar tidak memakan tempat. Saat Anda menambahkan perbatasan, lebar / tinggi total elemen dalam dokumen meningkat, tetapi itu tidak terjadi dengan garis besar. Anda juga tidak dapat menetapkan garis pada sisi tertentu seperti perbatasan; itu semua atau tidak sama sekali.
sumber
tldr;
W3C menjelaskannya sebagai memiliki perbedaan berikut:
Sumber
Garis besar harus digunakan untuk aksesibilitas
Perlu juga dicatat bahwa tujuan utama garis besar adalah aksesibilitas. Mengaturnya menjadi garis besar: tidak ada yang harus dihindari.
Jika Anda harus menghapusnya, mungkin merupakan ide yang lebih baik untuk memberikan gaya alternatif:
Sumber: "Jangan Hapus Outline dari Tautan dan Kontrol Bentuk", 365 Berea Street
Sumber Daya Lebih Banyak
sumber
Penggunaan praktis garis besar berkaitan dengan transparansi. Jika Anda memiliki elemen induk dengan latar belakang, tetapi ingin garis batas elemen anak transparan agar latar belakang induknya terlihat, Anda harus menggunakan "garis besar" daripada "batas". Sementara perbatasan bisa transparan, itu akan menunjukkan latar belakang anak, bukan orang tua.
Dengan kata lain, pengaturan ini menciptakan efek berikut:
sumber
background-clip: padding-box;
gaya Anda .. :)Dari Situs Sekolah W3
Properti perbatasan CSS memungkinkan Anda menentukan gaya dan warna batas elemen.
Sebuah garis adalah garis yang ditarik sekitar elemen (luar perbatasan) untuk membuat elemen "menonjol".
Properti steno garis besar menetapkan semua properti kerangka dalam satu deklarasi.
Properti yang dapat diatur, adalah (berurutan): outline-color, outline-style, outline-width.
Jika salah satu nilai di atas tidak ada, mis. "Outline: solid # ff0000;", nilai default untuk properti yang hilang akan dimasukkan, jika ada.
Periksa di sini untuk informasi lebih lanjut: http://webdesign.about.com/od/advancedcss/a/outline_style.htm
sumber
Sedikit pertanyaan lama, tetapi perlu disebutkan bug rendering Firefox (masih ada pada Januari '13) di mana garis besar akan membuat di luar semua elemen anak bahkan jika mereka melimpahi orang tua mereka (melalui margin negatif, bayangan kotak) , dll.)
Anda dapat memperbaikinya dengan:
Sangat disayangkan bahwa itu masih belum diperbaiki. Saya lebih suka menguraikan dalam banyak kasus karena mereka tidak menambah dimensi elemen, menyelamatkan Anda dari selalu harus mempertimbangkan lebar perbatasan ketika mengatur dimensi elemen.
Lagi pula, mana yang lebih sederhana?
Atau:
sumber
box-sizing
cobalah! tautanPerlu juga dicatat, bahwa garis besar W3C adalah perbatasan IE, karena IE tidak menerapkan model kotak W3C.
Dalam model kotak w3c, batas tidak termasuk lebar dan tinggi elemen. Dalam IE itu inklusif.
sumber
Saya telah membuat sedikit kode css / html hanya untuk melihat perbedaan antara keduanya.
outline
lebih baik untuk memasukkan elemen-elemen anak yang berpotensi meluap, terutama ke dalam wadah sejajar .border
jauh lebih disesuaikan untuk elemen blok- berperilaku.Biola untuk Anda, Tuan!
sumber
Properti outline di CSS menarik garis di luar elemen. Ini mirip dengan perbatasan kecuali:
posisi elemen atau elemen yang berdekatan
Sumber: https://css-tricks.com/almanac/properties/o/outline/
sumber
Sebagai contoh praktis menggunakan "garis besar", batas bertitik samar yang mengikuti fokus sistem pada laman web (mis. Jika Anda membuka tab tautan) dapat dikontrol menggunakan properti kerangka (setidaknya, saya tahu itu bisa di Firefox , belum mencoba peramban lain).
Teknik "penggantian gambar" yang umum digunakan, misalnya:
dengan yang berikut di CSS:
Masalahnya adalah bahwa ketika fokus mencapai tag, outline mengarah 1000em ke kiri. Garis besar dapat memungkinkan Anda mematikan garis fokus pada elemen-elemen tersebut.
Saya percaya bahwa Toolbar Pengembang IE juga menggunakan sesuatu seperti garis besar "di bawah tenda" ketika menyorot elemen untuk diperiksa dalam mode "pilih". Itu menunjukkan fakta bahwa "garis besar" tidak memakan tempat.
sumber
berpikir tentang garis besar sebagai batas yang proyektor gambar di luar sesuatu sebagai batas adalah objek aktual di sekitar benda itu.
sebuah proyeksi dapat dengan mudah tumpang tindih tetapi perbatasan tidak membiarkan Anda lewat.
beberapa kali ketika saya menggunakan
grid+%width
, perbatasan akan mengubah skala pada port tampilan, misalnya div denganwidth:100%
di orangtua denganwidth:100px
mengisi induk sepenuhnya, tetapi ketika saya menambahkanborder:solid 5px
div itu membuat div lebih kecil untuk membuat ruang untuk perbatasan (meskipun jarang dan work-aroundable!)tetapi dengan outline itu tidak memiliki masalah ini karena outline lebih virtual: D itu hanya garis di luar elemen tetapi masalahnya adalah jika Anda tidak melakukan spasi dengan benar itu akan tumpang tindih dengan konten lain.
untuk membuatnya singkat:
garis besar pro:
tidak mengacaukan dengan spasi dan posisi
kontra:
kesempatan tinggi tumpang tindih
sumber
Perbedaan antara batas dan garis besar:
Perbatasan adalah bagian dari model kotak sehingga diperhitungkan terhadap ukuran elemen. Garis besar bukan bagian dari model kotak sehingga tidak mempengaruhi elemen terdekat.
Demo:
Perbedaan lainnya:
Garis besar ditampilkan di luar perbatasan.
Garis tidak boleh memiliki sudut bulat; perbatasan bisa.
sumber
Disalin dari W3Schools:
sumber
outline
yang