Podczas korzystania z inline-block
elementów zawsze będzie istniał whitespace
problem między tymi elementami (szerokość ta wynosi około ~ 4 piksele).
Więc twoje dwa divs
, z których oba mają 50% szerokości, plus ten whitespace
(~ 4px) ma ponad 100% szerokości, więc pęka. Przykład twojego problemu:
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div>
<div class="right">bar</div>
Jest kilka sposobów, aby to naprawić:
1. Brak odstępu między tymi elementami
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div><div class="right">bar</div>
2. Korzystanie z komentarzy HTML
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div><div class="right">bar</div>
3. Ustaw rodziców font-size
na 0
, a następnie dodaj wartość do inline-block
elementów
body{
margin: 0;
}
.parent{
font-size: 0;
}
.parent > div{
display: inline-block;
width: 50%;
font-size: 16px;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="parent">
<div class="left">foo</div>
<div class="right">bar</div>
</div>
4. Stosowanie między nimi ujemnego marginesu ( nie zalecane )
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
margin-right: -4px;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div>
<div class="right">bar</div>
5. Opadający kąt zamknięcia
body{
margin: 0;
}
div{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<div class="left">foo</div
><div class="right">bar</div>
<hr>
<div class="left">foo</div><div class="right">
bar</div>
6. Pomijanie niektórych tagów zamykających HTML (dzięki @thirtydot za odniesienie )
body{
margin: 0;
}
ul{
margin: 0;
padding: 0;
}
li{
display: inline-block;
width: 50%;
}
.left{
background-color: aqua;
}
.right{
background-color: gold;
}
<ul>
<li class="left">foo
<li class="right">bar
</ul>
Bibliografia:
- Walka z przestrzenią między wbudowanymi elementami blokowymi w sztuczkach CSS
- Usuń odstępy między elementami wbudowanymi w blok autorstwa Davida Walsha
- Jak usunąć odstępy między elementami inline-block?
Jak @ MarcosPérezGude powiedział The najlepszym sposobem jest użycie rem
i dodać jakąś wartość domyślną font-size
na html
znaczniku (jak w HTML5Boilerplate ). Przykład:
html{
font-size: 1em;
}
.ib-parent{
font-size: 0;
}
.ib-child{
display: inline-block;
font-size: 1rem;
}
Aktualizacja : ponieważ jest prawie 2018 r., Użyj flexboksa lub jeszcze lepiej - układu siatki CSS .
flexbox
,table/table-row/table-cell
lub używaniefloat
.parent { font-size:0; } child {font-size: 1rem; }
. Z remami teraz jest najłatwiejborder
jest wyłączony. Może to zwiększyć przestrzeń, jeśli pływasz w elementach div.dobra odpowiedź w css3 to:
white-space: nowrap;
w węźle nadrzędnym i:
white-space: normal; vertical-align: top;
w div (lub innym) przy 50%
przykład: http://jsfiddle.net/YpTMh/19/
EDYTOWAĆ:
jest inny sposób:
font-size: 0;
dla węzła nadrzędnego i nadpisz go w węźle podrzędnym
źródło
Dzieje się tak, ponieważ biały znak między dwoma elementami div jest interpretowany jako spacja. Jeśli umieścisz
<div>
tagi w jednej linii, jak pokazano poniżej, problem zostanie rozwiązany :<div id="left"></div><div id="right"></div>
źródło
Ponieważ między elementami jest przestrzeń. Jeśli usuniesz wszystkie spacje, będą pasować .
<div id="left">Left</div><div id="right">Right</div>
źródło
Albo spraw, by blokowały zamiast inline-block. Spowoduje to, że elementy div będą ignorować spacje między nimi.
display:block;
lub usuń odstępy między tagami
<div id='left'></div><div id='right'></div>
lub dodaj
margin: -1en;
do jednego z elementów div, aby złagodzić miejsce zajmowane przez pojedynczą renderowaną przestrzeń.
źródło
Sprawdź poniższy kod:
body { margin: 0; } #left { width: 50%; background: lightblue; display: inline-block; float:left; } #right { width: 50%; background: orange; display: inline-block; float:left; }
<div id="left">Left</div> <div id="right">Right</div>
źródło
Przykład Flexbox - zostanie użyty dla klasy nadrzędnej trzymającej dwa obok siebie elementy.
.parentclass { display: flex; justify-content: center; align-items: center; }
Zaczerpnięte ze środkowania elementu div w pionie wewnątrz innego elementu div
źródło
Można to zrobić, dodając display: inline do elementu div, który zawiera elementy inline.
Podczas usuwania spacji za pomocą marginesu o wartości ujemnej konieczne staje się dodanie go do tego konkretnego elementu. Dodanie go do klasy wpłynie na miejsca, w których ta klasa była używana.
Więc bezpieczniej byłoby użyć display: inline;
źródło
dodaj float: left; do obu znaczników DIV.
div { float: left; }
źródło