Diberikan ini HTML dan CSS:
span {
display:inline-block;
width:100px;
background-color:palevioletred;
}
<p>
<span> Foo </span>
<span> Bar </span>
</p>
Akibatnya, akan ada ruang selebar 4 pixel antara elemen SPAN.
Demo: http://jsfiddle.net/dGHFV/
Saya mengerti mengapa ini terjadi, dan saya juga tahu bahwa saya bisa menghilangkan ruang itu dengan menghapus ruang putih antara elemen SPAN dalam kode sumber HTML, seperti:
<p>
<span> Foo </span><span> Bar </span>
</p>
Namun, saya berharap untuk solusi CSS yang tidak memerlukan kode sumber HTML untuk dirusak.
Saya tahu bagaimana menyelesaikan ini dengan JavaScript - dengan menghapus node teks dari elemen container (paragraf), seperti:
// jQuery
$('p').contents().filter(function() { return this.nodeType === 3; }).remove();
Demo: http://jsfiddle.net/dGHFV/1/
Tetapi bisakah masalah ini diselesaikan dengan CSS saja?
Jawaban:
Karena jawaban ini menjadi agak populer, saya menulis ulang secara signifikan.
Jangan lupa pertanyaan aktual yang ditanyakan:
Hal ini mungkin untuk memecahkan masalah ini dengan CSS saja, tetapi tidak ada benar-benar perbaikan CSS kuat.
Solusi yang saya miliki dalam jawaban awal saya adalah menambahkan
font-size: 0
elemen induk, dan kemudian menyatakan masuk akalfont-size
pada anak-anak.http://jsfiddle.net/thirtydot/dGHFV/1361/
Ini berfungsi di versi terbaru dari semua browser modern. Ia bekerja di IE8. Tidak bekerja di Safari 5, tetapi tidak bekerja di Safari 6. Safari 5 hampir browser mati ( 0,33%, Agustus 2015 ).
Sebagian besar masalah yang mungkin terjadi dengan ukuran font relatif tidak rumit untuk diperbaiki.
Namun, meskipun ini adalah solusi yang masuk akal jika Anda secara khusus memerlukan perbaikan CSS saja, itu bukan yang saya sarankan jika Anda bebas mengubah HTML Anda (seperti kebanyakan dari kita).
Inilah yang saya lakukan, sebagai pengembang web yang cukup berpengalaman, untuk menyelesaikan masalah ini:
Ya itu betul. Saya menghapus spasi putih di HTML antara elemen inline-block.
Mudah. Itu mudah. Ini bekerja di mana-mana. Ini solusi pragmatis.
Terkadang Anda harus mempertimbangkan dengan hati-hati dari mana ruang putih akan datang. Apakah menambahkan elemen lain dengan JavaScript akan menambah spasi? Tidak, tidak jika Anda melakukannya dengan benar.
Mari kita melakukan perjalanan ajaib berbagai cara untuk menghapus spasi putih, dengan beberapa HTML baru:
Anda dapat melakukan ini, seperti yang biasa saya lakukan:
http://jsfiddle.net/thirtydot/dGHFV/1362/
Atau ini:
Atau, gunakan komentar:
Atau, jika Anda menggunakan menggunakan PHP atau yang serupa:
Atau, Anda bahkan dapat melewati tag penutup tertentu sepenuhnya (semua browser tidak masalah dengan ini):
Sekarang setelah saya pergi dan membuat Anda bosan sampai mati dengan "seribu cara berbeda untuk menghapus spasi putih, tiga puluhdot", mudah-mudahan Anda sudah melupakan semuanya
font-size: 0
.Atau, sekarang Anda dapat menggunakan flexbox untuk mencapai banyak tata letak yang sebelumnya mungkin Anda gunakan di-blok inline untuk: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
sumber
:(
font-size:0
trik ini bukan ide yang bagus ...Untuk browser yang menyesuaikan CSS3 ada
white-space-collapsing:discard
lihat: http://www.w3.org/TR/2010/WD-css3-text-20101005/#white-space-collapsing
sumber
trim-inner
daripadadiscard
?text-space-collapse
:
discard
<p>A long text...</p>
, tempat tag pembuka dan penutup berada di baris terpisah daripada konten teks. Itu sesuatu yang saya lakukan sepanjang waktu agar file HTML saya tetap rapi dan mudah dibaca.float
EDIT:
hari ini, kita cukup menggunakan Flexbox .
JAWABAN TUA:
OK, walaupun saya telah
font-size: 0;
mengangkatnot implemented CSS3 feature
jawaban dan jawabannya, setelah mencoba saya menemukan bahwa tidak ada satupun yang merupakan solusi nyata .Sebenarnya, tidak ada satu solusi pun tanpa efek samping yang kuat.
Kemudian saya memutuskan untuk menghapus spasi (jawaban ini tentang argumen ini) antara
inline-block
div dariHTML
sumber saya (JSP
), mengubah ini:untuk ini
itu jelek, tapi berhasil.
Tapi, tunggu dulu ... bagaimana jika aku menghasilkan div di dalam
Taglibs loops
(Struts2
,JSTL
, dll ...)?Sebagai contoh:
Sama sekali tidak masuk akal untuk menyejajarkan semua hal itu, artinya
itu tidak mudah dibaca, sulit untuk dipertahankan dan dipahami, dll ...
Solusi yang saya temukan:
Dengan cara ini Anda akan memiliki kode yang dapat dibaca dan indentasi dengan benar.
Dan, sebagai efek samping positif, the
HTML source
, meskipun dipenuhi oleh komentar kosong, akan menghasilkan indentasi yang benar;mari kita ambil contoh pertama. Menurut pendapat saya yang sederhana, ini:
lebih baik dari ini:
sumber
Tambahkan komentar antara elemen untuk TIDAK memiliki ruang putih. Bagi saya itu lebih mudah daripada mengatur ulang ukuran font menjadi nol dan kemudian mengaturnya kembali.
sumber
Semua teknik eliminasi ruang untuk
display:inline-block
hack jahat ...Gunakan Flexbox
Ini luar biasa, menyelesaikan semua bs tata letak inline-blok ini, dan pada 2017 memiliki 98% dukungan browser (lebih jika Anda tidak peduli dengan IE lama).
sumber
Tambahkan
display: flex;
ke elemen induk. Ini solusinya dengan awalan:Versi sederhana 👇
Perbaiki dengan awalan 👇
sumber
Ini adalah jawaban yang sama dengan yang saya berikan pada yang terkait: Tampilan: Inline block - Ruang apa itu?
Sebenarnya ada cara yang sangat sederhana untuk menghapus spasi dari inline-block yang mudah dan semantik. Ini disebut font khusus dengan spasi nol-lebar, yang memungkinkan Anda untuk mengosongkan spasi putih (ditambahkan oleh browser untuk elemen inline ketika mereka berada di baris terpisah) di tingkat font menggunakan font yang sangat kecil. Setelah Anda mendeklarasikan font, Anda hanya perlu mengganti
font-family
pada wadah dan kembali lagi pada anak-anak, dan voila. Seperti ini:Sesuai selera. Ini adalah unduhan untuk font yang baru saja saya buat di font-forge dan dikonversi dengan generator fontfont WebSquirrel. Butuh saya semua 5 menit.
@font-face
Deklarasi css termasuk: zip spasi font dengan lebar nol . Itu ada di Google Drive sehingga Anda harus mengklik File> Unduh untuk menyimpannya ke komputer Anda. Anda mungkin perlu mengubah jalur font juga jika Anda menyalin deklarasi ke file css utama Anda.sumber
flex-wrap
hingga setidaknya v28 ( srsly? ), Tetapi ini adalah fallback yang sempurna sampai saat itu.Dua opsi lagi berdasarkan Modul Teks CSS Level 3 (bukannya
white-space-collapsing:discard
yang telah dihapus dari draft spesifikasi):word-spacing: -100%;
Secara teori, itu harus melakukan apa yang dibutuhkan - mempersingkat spasi putih antara 'kata' dengan 100% dari lebar karakter spasi, yaitu menjadi nol. Tetapi sepertinya tidak berfungsi di mana saja, sayangnya, dan fitur ini ditandai 'berisiko' (bisa juga dihapus dari spesifikasi).
word-spacing: -1ch;
Ini mempersingkat spasi antar kata dengan lebar digit '0'. Dalam font monospace harus persis sama dengan lebar karakter spasi (dan karakter lain juga). Ini berfungsi di Firefox 10+, Chrome 27+, dan hampir berfungsi di Internet Explorer 9+.
Biola
sumber
' '
dan'0'
. Dalam font non-monospace tidak ada proporsi sulap yang paling cocok antara lebar' '
dan'0'
karakter, jadich
tidak banyak membantu sama sekali.word-spacing
, kita dapat menggunakanletter-spacing
dengan nilai negatif besar yang sewenang-wenang seperti yang ditunjukkan dalam jawaban sayaSayangnya, ini tahun 2019 dan
white-space-collapse
masih belum diimplementasikan.Sementara itu, berikan elemen induk
font-size: 0;
dan aturfont-size
pada anak-anak. Ini harus melakukan triksumber
Gunakan flexbox dan lakukan fallback (dari saran di atas) untuk browser lama:
sumber
Sederhana:
Tidak perlu menyentuh elemen induk.
Hanya syarat di sini: ukuran font item tidak boleh ditentukan (harus sama dengan ukuran font induk).
0.25em
adalah standarnyaword-spacing
W3Schools - properti penspasian kata
sumber
ukuran font: 0; bisa sedikit rumit untuk dikelola ...
Saya pikir garis pasangan berikut ini jauh lebih baik dan lebih dapat digunakan kembali, dan hemat waktu daripada metode lain. Saya pribadi menggunakan ini:
Maka Anda dapat menggunakannya sebagai berikut ...
Sejauh yang saya tahu (saya mungkin salah) tetapi semua browser mendukung metode ini.
PENJELASAN :
Ini berfungsi (mungkin -3px mungkin lebih baik) persis seperti yang Anda perkirakan akan berhasil.
class="items"
pada induk dari setiap inline-block.Anda TIDAK perlu kembali ke css, dan menambahkan aturan css lain, untuk blok inline baru Anda.
Memecahkan dua masalah sekaligus.
Perhatikan juga
>
(lebih besar dari tanda) ini berarti * / semua anak harus inline-block.http://jsfiddle.net/fD5u3/
CATATAN: Saya telah memodifikasi untuk mengakomodasi mewarisi spasi huruf ketika pembungkus memiliki pembungkus anak.
sumber
-4px
untukletter-spacing
yang mungkin tidak cukup untuk besar font-ukuran misalnya: melihat biola ini , kita bisa menggunakan nilai yang lebih besar seperti dalam posting sayaPadahal, secara teknis bukan jawaban untuk pertanyaan: "Bagaimana cara menghapus ruang antara elemen blok inline?"
Anda dapat mencoba solusi flexbox dan menerapkan kode di bawah ini dan ruang akan dihapus.
Anda dapat mempelajari lebih lanjut tentang hal ini di tautan ini: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
sumber
Saya tidak yakin apakah Anda ingin membuat dua bentang biru tanpa celah atau ingin menangani ruang putih lainnya, tetapi jika Anda ingin menghilangkan celah:
Dan selesai.
sumber
Umumnya kami menggunakan elemen seperti ini di baris yang berbeda, tetapi jika
display:inline-block
menggunakan tag di baris yang sama akan menghapus spasi, tetapi di baris yang berbeda tidak akan.Contoh dengan tag di baris yang berbeda:
Contoh dengan tag di baris yang sama
Metode efisien lain adalah pekerjaan CSS yang menggunakan
font-size:0
elemen induk dan memberikanfont-size
elemen anak sebanyak yang Anda inginkan.sumber
Saya memiliki masalah ini sekarang dan dari
font-size:0;
saya telah menemukan bahwa di Internet Explorer 7 masalahnya tetap karena Internet Explorer berpikir "Ukuran Huruf 0?!?! WTF apakah Anda orang gila?" - Jadi, dalam kasus saya saya telah me-reset CSS Eric Meyer dan denganfont-size:0.01em;
saya memiliki perbedaan 1 pixel dari Internet Explorer 7 ke Firefox 9, jadi, saya pikir ini bisa menjadi solusi.sumber
sumber
float
dandisplay:inline-block
untukspan
s dimaksudkan untuk menjadi mundur untuk kasus ini jikaflex
tidak didukung, tetapifloat
akan secara efektif membuang efekinline-block
, sehingga yang terakhir tampaknya berlebihan.Saya telah menangani hal ini baru-baru ini dan alih-alih mengatur induk
font-size:0
lalu mengatur anak kembali ke nilai yang masuk akal, saya telah mendapatkan hasil yang konsisten dengan mengatur wadah indukletter-spacing:-.25em
kemudian anak kembali keletter-spacing:normal
.Dalam utas alternatif saya melihat komentator menyebutkan bahwa
font-size:0
tidak selalu ideal karena orang dapat mengontrol ukuran font minimum di browser mereka, sepenuhnya meniadakan kemungkinan pengaturan ukuran font menjadi nol.Menggunakan ems tampaknya berfungsi terlepas dari apakah ukuran font yang ditentukan adalah 100%, 15pt atau 36px.
http://cdpn.io/dKIjo
sumber
Saya pikir ada metode yang sangat sederhana / lama untuk ini yang didukung oleh semua browser bahkan IE 6/7. Kami cukup menetapkan
letter-spacing
nilai negatif besar di induk dan kemudian mengembalikannya kenormal
elemen child:sumber
letter-spacing:normal
semua elemen anak.letter-spacing
99,99% dari waktu sebagainormal
. ukuran font tidak memiliki nilai tetap dan sangat tergantung pada desain. itu bisa berupa nilai kecil atau nilai besar berdasarkan font-family dan hal-hal lain ... Saya tidak pernah ingat dalam hidup saya untuk melihat / menggunakan nilai khusus (selain 0 / normal) untukletter-spacing
, jadi saya pikir itu lebih aman dan pilihan yang lebih baikJawaban paling sederhana untuk pertanyaan ini adalah menambahkan.
css
tautan codepen: http://jsfiddle.net/dGHFV/3560/
sumber
Dengan kurung PHP:
sumber
Saya akan memperluas jawaban user5609829 sedikit karena saya percaya solusi lain di sini terlalu rumit / terlalu banyak pekerjaan. Menerapkan a
margin-right: -4px
ke elemen blok sebaris akan menghapus spasi dan didukung oleh semua browser. Lihat biola yang diperbarui di sini . Untuk mereka yang peduli dengan menggunakan margin negatif, cobalah memberikan ini read.sumber
Spesifikasi CSS Text Module Level 4 mendefinisikan
text-space-collapse
properti, yang memungkinkan untuk mengontrol bagaimana ruang putih di dalam dan di sekitar elemen diproses.Jadi, mengenai contoh Anda, Anda hanya perlu menulis ini:
Sayangnya, belum ada browser yang mengimplementasikan properti ini (per September 2016) seperti yang disebutkan dalam komentar atas jawaban HBP .
sumber
Saya menemukan solusi CSS murni yang bekerja untuk saya dengan sangat baik di semua browser:
sumber
Tambahkan
white-space: nowrap
ke elemen wadah:CSS:
HTML:
Di sini adalah Plunker .
sumber
Ada banyak solusi seperti
font-size:0
,word-spacing
,margin-left
,letter-spacing
dan sebagainya.Biasanya saya lebih suka menggunakan
letter-spacing
karena-1em
.).word-spacing
danmargin-left
ketika kita menetapkan nilai yang lebih besar suka-1em
.font-size
tidak nyaman ketika kami mencoba menggunakanem
sebagaifont-size
unit.Jadi,
letter-spacing
sepertinya menjadi pilihan terbaik.Namun, saya harus memperingatkan Anda
ketika Anda menggunakan
letter-spacing
Anda sebaiknya menggunakan-0.3em
atau-0.31em
tidak orang lain.Jika Anda menggunakan Chrome (versi uji 66.0.3359.139) atau Opera (versi uji 53.0.2907.99), yang Anda lihat mungkin:
Jika Anda menggunakan Firefox (60.0.2), IE10 atau Edge, apa yang Anda lihat mungkin:
Itu menarik. Jadi, saya memeriksa spasi huruf-mdn dan menemukan ini:
Tampaknya inilah alasannya.
sumber
Tambahkan
letter-spacing:-4px;
padap
css induk dan tambahkanletter-spacing:0px;
kespan
css Anda .sumber
Saya pikir saya akan menambahkan sesuatu yang baru untuk pertanyaan ini karena walaupun banyak jawaban yang diberikan saat ini lebih dari cukup & relevan, ada beberapa properti CSS baru yang dapat mencapai hasil yang sangat bersih, dengan dukungan penuh di semua browser, dan sedikit untuk tidak ada 'peretasan'. Ini memang menjauh dari
inline-block
tetapi memberi Anda hasil yang sama seperti pertanyaan yang diajukan.Properti CSS ini adalah
grid
CSS Grid sangat didukung ( CanIUse ) selain dari IE yang hanya membutuhkan
-ms-
awalan agar bisa berfungsi.CSS Grid juga sangat fleksibel, dan mengambil semua bagian yang baik dari
table
,flex
, daninline-block
elemen dan membawa mereka ke dalam satu tempat.Saat membuat,
grid
Anda dapat menentukan celah antara baris dan kolom. Kesenjangan default sudah diatur ke0px
tetapi Anda dapat mengubah nilai ini ke apa pun yang Anda suka.Singkatnya, inilah contoh kerja yang relevan:
sumber
display:grid
elemen yang diblokir, sehingga tampilannya tidak terlalu banyak: kisi membantu Anda bekerja dengan tata letak blok-inline, melainkan memungkinkan Anda mengganti bekerjainline-block
dengan sesuatu di mana Anda dapat mengontrol 'talang' sebagai pertanyaan ini ingin. Juga, saya benar-benar terkejut belum ada yang merespons dengan solusi Layout Grid CSS sebelum sekarang.inline-block
. Dan ya, saya terkejut juga, kira tidak ada orang dengangrid
pengalaman yang benar-benar datang ke ini sebelumnya. Telah bermain-main dengannya sedikit dan menemukan pertanyaan ini jadi pikirkan mengapa tidak: PSatu cara lain yang saya temukan adalah menerapkan margin-kiri sebagai nilai negatif kecuali elemen pertama dari baris.
sumber
Setiap pertanyaan, yang mencoba untuk menghapus spasi antara
inline-block
s sepertinya<table>
bagiku ...Coba sesuatu seperti ini:
sumber