Kenapa kita tidak punya box-sizing: margin-box;
? Biasanya ketika kita memasukkan box-sizing: border-box;
style sheet kita benar-benar berarti yang pertama.
Contoh:
Katakanlah saya memiliki tata letak halaman 2 kolom. Kedua kolom memiliki lebar 50%, tetapi terlihat agak jelek karena tidak ada selokan (celah di tengah); Di bawah ini adalah CSS:
.col2 {
width: 50%;
float: left;
}
Untuk menerapkan selokan, Anda mungkin berpikir kami bisa menetapkan margin kanan pada kolom pertama dari 2; sesuatu seperti ini:
.col2:first-child {
margin-right: 24px;
}
Tetapi ini akan membuat kolom kedua membungkus ke baris baru, karena yang berikut ini benar:
50% + 50% + 24px > 100%
box-sizing: margin-box;
akan menyelesaikan masalah ini dengan memasukkan margin dalam lebar elemen yang dihitung. Saya akan menemukan ini sangat berguna jika tidak lebih bermanfaat daripada box-sizing: border-box;
.
box-sizing: margin-box;
?" Karena sementara margin horizontal tidak runtuh, proposisi seperti itu akan secara serius mengganggu keruntuhan margin vertikal. Bagaimanapun, jika Anda ingin mengusulkan sesuatu untuk standardisasi, Stack Overflow bukanlah tempat yang tepat. Coba milis.border: xxx solid transparent;
, karena perbatasan disertakanborder-box
. Ini akan merusak beberapa hal lain, sepertibox-shadow
.box-sizing: margin-box
karena tidak akan berfungsi dengan margin-collapse.Jawaban:
Tidak bisakah kamu gunakan
width: calc(50% - 24px);
untuk cols kamu? Kemudian atur margin Anda.sumber
Saya pikir kita bisa memiliki
box-sizing: margin-box
. Model kotak css menunjukkan dengan tepat, apa posisi margin dari frame.Ada masalah kecil - misalnya, kotak margin bisa tumpang tindih - tetapi mereka tidak sulit untuk dipecahkan.
Saya pikir, situasinya sama, seperti yang bisa kita lihat dengan
overflow-x
&overflow-y
kombinasi, dengan divs posisi absolut dalam sel tabel, dengan kombinasi min | max-width | tinggi dengan ukuran kotak, dan sebagainya.Ada fitur, fitur yang sangat sederhana, yang tidak dikembangkan oleh pengembang browser.
IMHO,
box-sizing: margin-box
adalah fitur yang sangat berguna. Fitur lain yang bermanfaat adalahbox-sizing: padding-box
, itu ada setidaknya dalam standar, tetapi tidak diterapkan di salah satu browser utama. Bahkan di chrome terbaru!Catatan: Komentar @Oriol: Firefox menerapkan kotak-ukuran: kotak-padding. Tetapi yang lain tidak, dan itu dihapus dari spec. Firefox akan menghapusnya di versi 50. Sedih.
sumber
box-sizing: padding-box
. Tetapi yang lain tidak, dan itu dihapus dari spec. Firefox akan menghapusnya di versi 50. Sedih.Pria di atas bertanya tentang menambahkan margin ke lebar keseluruhan, termasuk padding dan border. Masalahnya, margin diterapkan di luar kotak dan padding dan border tidak, saat digunakan
border-box
.Saya sudah mencoba mencapai
border-margin
ide itu. Apa yang saya temukan adalah bahwa jika menggunakan margin Anda dapat menambahkan kelas.last
ke item terakhir (dengan margin, lalu menerapkan margin nol, atau menggunakan:last-child/:last-of-type
). Atau tambahkan margin yang sama sepanjang jalan (mirip dengan versi padding di atas).Lihat contoh di sini: http://codepen.io/mofeenster/pen/Anidc
border-box
menghitung lebar elemen + paddingnya + batasnya sebagai total lebar. Jadi jika Anda memiliki 2div
s yang lebar 50%, mereka akan berdekatan. Jika Anda menambahkan8px
padding ke mereka, maka Anda akan memiliki selokan16px
. Kombinasikan itu dengan elemen pembungkus - yang juga memiliki bantalan8px
- Anda akan memiliki grid yang ditata dengan baik dengan talang yang sama sepanjang jalan.Lihat contoh ini di sini: http://codepen.io/mofeenster/pen/vGgje
Yang terakhir adalah metode favorit saya.
sumber
Saya yakin semua ini sudah jelas, tetapi saya tetap akan mengetiknya karena ... yah, saya perlu latihan. Apakah hasil berikut tidak akan seefisien
box-sizing: margin-box;
:http://jsfiddle.net/Fg3hg/
box-sizing
digunakan untuk mengontrol dari titik mana padding dan border dinilai ke ukuran keseluruhan elemen. Jadi walaupun tidak halal untuk memasukkanpx
margin dengan%
lebar (seperti biasanya selalu terjadi), lebih mudah untuk menghitung berapa jumlah persentase relatif seharusnya karena Anda tidak harus memasukkan padding dan berbatasan dengan lebar yang ditentukan.sumber
margin-box
menangani perhitungan margin multidimensi?@media
breakpoints,max-width
danmin-width
bekerja dengan baik. Saya kiramargin-box
mungkin mengurangi beberapa mengasapi, tetapi saya juga mendapatkan alasan mengapa itu dapat dianggap berlebihan.Ini karena atribut ukuran kotak mengacu pada ukuran elemen setelah menghitung nilai dimensi spesifik tertentu (padding, batas). "box-sizing: border-box" mengatur tinggi / lebar elemen dan mempertimbangkan padding serta lebar perbatasan. Lingkup margin elemen lebih besar dari elemen itu sendiri, yang berarti ia memodifikasi aliran halaman dan elemen-elemen di sekitarnya, oleh karena itu secara langsung mengubah cara elemen tersebut cocok di dalam induknya relatif terhadap elemen-elemen saudaranya. Pada akhirnya nilai atribut "margin-box" akan menyebabkan masalah besar dan pada dasarnya sama dengan mengatur tinggi / lebar elemen secara langsung.
sumber
Pada Codrops ada beberapa artikel bagus tentang masalah efek margin dan baris yang dipaksa meluap. Mereka menyarankan menggunakan unit rem atau em dengan normalizer css mengatur ukuran font hingga 100% untuk semua browser, maka ketika Anda mengatur lebar dan margin, mudah untuk melacak efek pada lebar baris hanya dengan membuat catatan di komentar untuk total lebar. Konversi 16px ke 1 em adalah cara untuk menghitung total viewports yang ditargetkan dengan witdh.
Bekerja seperti itu untuk tahap dev setidaknya dan kemudian jika Anda ingin template 'responsif' Anda dapat mengkonversi lebar menjadi% termasuk lebar margin.
Cara lain dan seringkali lebih sederhana yang mereka sarankan untuk menangani talang adalah dengan menggunakan pseudo after dan
content: '';
pada masing-masing kolom Anda yang saya temukan berfungsi dengan sangat baik. Jika Anda menetapkan kelas div yang merupakan kolom terakhir yang ditentukan seperti akhir, maka Anda dapat menargetkan kelas tersebut untuk tidak memiliki pseudo setelah, atau memiliki yang lebih luas; mana yang paling cocok dengan tata letak Anda.Bonus tambahan menggunakan metode elemen semu ini adalah juga memberi Anda target untuk bayangan yang dapat memberikan efek lebih 3d dan kedalaman yang lebih besar ke gambar datar pada monitor pembaca juga. Saya sedang bereksperimen dengan efek ini saat ini dengan meningkatkan efek yang digunakan pada tombol, 'mengubah' gradien, dan indeks-z.
sumber
Dimensi elemen tingkat blok, yang tidak diganti dalam aliran normal harus memuaskan
Ketika terlalu dibatasi, browser harus menyesuaikan margin kiri atau kanan. Saya pikir itu berarti lebar kotak margin harus sama dengan lebar blok yang berisi (yaitu 100%).
Untuk kasus Anda, batas transparan dengan
box-sizing: border-box
dapat berfungsi seperti margin .sumber
Mungkin mengatur batas ke 0% opacity menggunakan RGBA dan menggunakan perbatasan sebagai margin.
sumber
1px
terpisah, masing-masing mengambil50%
ruang yang tersedia? Itulah tepatnya yangmargin-box
akan dilakukan. Atau lupakan kotak margin dan pikirkan ruang yang tersedia. Bukan 50% dari wadah induk, tetapi 50% dari yang tersisa. Tidak ada "calc", tidak ada "5% margin", tidak berantakan seperti ...Ada situasi yang menarik ketika menggunakan ukuran isi kotak di dalam tubuh
tidak ada konten tidak ada kotak batas tidak memberikan nilai pada margin kiri-kanan% recount dari dua algoritma recount box ini
Jadi margin-box bahkan tidak direncanakan ...
sumber