J'essaie de construire une mise en page fluide en utilisant des pourcentages en tant que largeurs. Faites donc j'ai essayé ceci:
<div style="width:50%; display:inline-table;">A</div>
<div style="width:50%; display:inline-table;">B</div>
Dans ce cas, ils ne resteront pas dans une ligne, mais si je supprime le saut de ligne entre eux, comme ceci:
<div style="width:50%; display:inline-table;">A</div><div style="width:50%; display:inline-table;">B</div>
alors cela fonctionne bien. Où est le problème? Comment puis-je faire quelque chose comme ça mais sans utiliser la position absolue et float.
p.s. désolé pour l'anglais . p.s.s. j'espère que je vais bien expliquer mon problème
Le problème est que quand quelque chose est en ligne, chaque whitepsace est un espace réel. Donc, cela va influencer la largeur des éléments. Je recommande d'utiliser float ou display: inline-block. (Il suffit de ne laisser aucun espace entre les divs).
Démo: http://jsfiddle.net/N9mzE/1/
<div style="width:50%; display: inline-block">A
</div><div style="width:50%; display: inline-block;">B
</div>
Le problème est que si vous avez une nouvelle ligne entre eux dans le code HTML, vous obtenez un espace entre eux lorsque vous utilisez inline-table
ou inline-block
50% + 50% + cet espace> 100% et c'est pourquoi le second se termine en dessous du premier
Solutions:
<div></div><div></div>
ou
<div>
</div><div>
</div>
ou
<div></div><!--
--><div></div>
L'idée est de ne pas laisser d'espace entre la première balise div de fermeture et la deuxième balise d'ouverture dans votre code HTML.
PS - Je voudrais aussi utiliser inline-block
au lieu de inline-table
pour cela
Donnez à cette parent
DIV font-size: 0 . Écrivez comme ceci:
<div style="font-size:0">
<div style="width:50%; display:inline-table;font-size:15px">A</div>
<div style="width:50%; display:inline-table;font-size:15px">B</div>
</div>
Enroulez-les autour d'une div avec le CSS suivant
.div_wrapper{
white-space: nowrap;
}
Comment puis-je faire quelque chose comme ça mais sans utiliser la position absolue et flotter?
Outre l'utilisation de l'approche inline-block
(comme indiqué dans d'autres réponses), voici d'autres approches:
.container {
display: table;
width: 100%;
}
.container div {
display: table-cell;
}
<div class="container">
<div>A</div>
<div>B</div>
</div>
.container {
display: flex;
}
.container div {
flex: 1;
}
<div class="container">
<div>A</div>
<div>B</div>
</div>
Pour référence, ce post CSS-astuces semble résumer les différentes approches pour y parvenir.
<div id="wrapper" style="width: 400px">
<div id="left" style="float: left; width: 200px;">Left</div>
<div id="right" style="float: right; width: 200px;">Left</div>
<div style="clear: both;"></div>
</div>
Je sais que cette question concernait le blocage en ligne, mais essayez de consulter http://jsfiddle.net/N9mzE/1/ in IE 7 (le navigateur le plus ancien pris en charge sur lequel je travaille). Les divs ne sont pas côte à côte.
OP a déclaré qu'il ne voulait pas utiliser de flotteurs parce qu'il ne les aimait pas. Eh bien ... à mon avis, faire de bonnes pages Web qui ne paraissent pas étranges dans tous les navigateurs devrait être le maingoal, et vous le faites en utilisant des flottants.
Honnêtement, je peux voir le problème. Les flotteurs sont fantastiques.
inline-table
est essentiellement pour la table des éléments, je suppose que ce dont vous avez vraiment besoin ici est inline-block
, si vous devez utiliser inline-table
de toute façon, essayez-le de cette façon:
<div style="width:50%; display:inline-table;">A</div><!--
--><div style="width:50%; display:inline-table;">B</div>
Désolé, mais toutes les réponses que je vois ici sont soit un hacky, soit un échec si vous éternuez un peu plus fort.
Si vous utilisez une table, vous pouvez (si vous le souhaitez) ajouter un espace entre les div, définir des bordures, remplir ...
<table width="100%" cellspacing="0">
<tr>
<td style="width:50%;">A</td>
<td style="width:50%;">B</td>
</tr>
</table>
Vérifiez un exemple plus complet ici: http://jsfiddle.net/qPduw/5/