Comment aligner cette étendue à droite du div?

152

J'ai le code HTML suivant:

<div class="title">
    <span>Cumulative performance</span>
    <span>20/02/2011</span>
</div>

avec ce CSS:

.title
{
    display: block;
    border-top: 4px solid #a7a59b;
    background-color: #f6e9d9;
    height: 22px;
    line-height: 22px;
    padding: 4px 6px;
    font-size: 14px;
    color: #000;
    margin-bottom: 13px;
    clear:both;
}

Si vous vérifiez ce jsFiddle: http://jsfiddle.net/8JwhZ/

vous pouvez voir que le nom et la date sont collés ensemble. Y a-t-il un moyen pour que je puisse aligner la date à droite? J'ai essayé float: right;le second <span>mais ça fout le style et pousse la date en dehors de la div englobante

DaveDev
la source
2
Pouvez-vous modifier le HTML?
Phrogz
3
Si vous voulez que quelque chose flotte par rapport à un autre objet, le flotteur doit être avant le non flottant. La date doit être avant le titre et flottante à droite.
Josh Kovach

Réponses:

246

Si vous pouvez modifier le HTML: http://jsfiddle.net/8JwhZ/3/

<div class="title">
  <span class="name">Cumulative performance</span>
  <span class="date">20/02/2011</span>
</div>

.title .date { float:right }
.title .name { float:left }
Phrogz
la source
CSS est simplifié et propre: les deux doivent être ajoutés. Le violon contient également une solution très fragile: jsfiddle.net/8JwhZ/2090
Risord
9
Ou si vous le voulez en ligne (je l'ai fait)<span style="float: right">
Mark
52

Travailler avec des flotteurs est un peu compliqué:

Ceci comme beaucoup d'autres astuces de mise en page «triviales» peuvent être faites avec flexbox.

   div.container {
     display: flex;
     justify-content: space-between;
   }

En 2017, je pense que c'est la solution préférée (par rapport au float) si vous n'avez pas à prendre en charge les navigateurs hérités: https://caniuse.com/#feat=flexbox

Vérifiez fiddle comment les différentes utilisations de float se comparent à flexbox ("peut inclure des réponses concurrentes"): https://jsfiddle.net/b244s19k/25/ . Si vous devez toujours vous en tenir à float, j'ai bien sûr recommandé la troisième version.

Risord
la source
C'est celui que j'ai choisi d'utiliser, gardez à l'esprit de définir également float: left;et float: right;dans les travées contenant les éléments que vous souhaitez espacer.
Ran Lottem
1
Le message principal de cette réponse est que "les flottants sont considérés comme dangereux" et vous ne devriez jamais les utiliser (d'accord, il y a quelques rares exceptions). Alors, pouvez-vous expliquer pourquoi vous pensez que c'est une bonne idée?
Risord
1
Je pensais que floatc'était nécessaire dans les éléments intérieurs parce que je pensais que c'était défini dans l'exemple du violon pour eux, mais pour #testDcela, il n'est pas défini. Ma faute!
Ran Lottem
25

Une solution alternative aux flotteurs est d'utiliser le positionnement absolu:

.title {
  position: relative;
}

.title span:last-child {
  position: absolute;
  right: 6px;   /* must be equal to parent's right padding */
}

Voir aussi le violon .

Philipp
la source
5

Vous pouvez le faire sans modifier le code html. http://jsfiddle.net/8JwhZ/1085/

<div class="title">
<span>Cumulative performance</span>
<span>20/02/2011</span>
</div>

.title span:nth-of-type(1) { float:right }
.title span:nth-of-type(2) { float:left }
Kerel
la source
4

La solution utilisant flexbox sans justify-content: space-between.

<div class="title">
  <span>Cumulative performance</span>
  <span>20/02/2011</span>
</div>

.title {
  display: flex;
}

span:first-of-type {
  flex: 1;
}

Lorsque nous utilisons flex:1sur le premier <span>, il occupe tout l'espace restant et déplace le second <span>vers la droite. Le violon avec cette solution: https://jsfiddle.net/2k1vryn7/

Ici https://jsfiddle.net/7wvx2uLp/3/ vous pouvez voir la différence entre deux approches flexbox: flexbox avec justify-content: space-betweenet flexbox avec flex:1sur la première <span>.

hydro17
la source