Come allineare questo intervallo a destra del div?


152

Ho il seguente HTML:

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

con questo 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;
}

Se controlli questo jsFiddle: http://jsfiddle.net/8JwhZ/

puoi vedere che Nome e Data sono uniti. C'è un modo per ottenere la data per allinearla a destra? Ho provato float: right;il secondo <span>ma rovina lo stile e spinge la data fuori dal div racchiuso


2
Sei in grado di modificare l'HTML?
Phrogz,

3
Se vuoi che qualcosa fluttui in relazione a un altro oggetto, il galleggiante deve trovarsi prima del non-galleggiante. La data dovrebbe essere prima del titolo e mobile a destra.
Josh Kovach,

Risposte:


246

Se puoi modificare l'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 }

CSS è semplificato e pulito in modo appropriato: entrambi dovrebbero essere aggiunti. Anche il violino contiene una soluzione molto fragile: jsfiddle.net/8JwhZ/2090
Risord

9
O se lo vuoi in linea (l'ho fatto)<span style="float: right">
Mark

52

Lavorare con i float è un po 'disordinato:

Questo come molti altri trucchi di layout "banali" possono essere fatti con flexbox.

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

Nel 2017 penso che questa sia la soluzione preferita (rispetto al float) se non devi supportare i browser legacy: https://caniuse.com/#feat=flexbox

Controlla il modo in cui i diversi utilizzi del float si confrontano con il flexbox ("possono includere alcune risposte concorrenti"): https://jsfiddle.net/b244s19k/25/ . Se hai ancora bisogno di rimanere con float, ho raccomandato ovviamente la terza versione.


Questo è quello che ho scelto di usare, tieni presente anche di impostare float: left;e float: right;negli span contenenti gli elementi che vuoi spaziare.
Ran Lottem,

1
Il messaggio principale di questa risposta è che "i float sono considerati dannosi" e non dovresti mai usarli (ok certo che ci sono alcune rare eccezioni). Quindi puoi chiarire perché pensi che sia una buona idea?
Risord,

1
Pensavo floatfosse richiesto negli elementi interni perché pensavo che fosse definito nell'esempio del violino per loro, ma perché #testDnon è definito. Colpa mia!
Ran Lottem,

25

Una soluzione alternativa ai galleggianti è utilizzare il posizionamento assoluto:

.title {
  position: relative;
}

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

Vedi anche il violino .


5

Puoi farlo senza modificare l'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 }

4

La soluzione che utilizza flexbox senza 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;
}

Quando utilizziamo flex:1il primo <span>, occupa l'intero spazio rimanente e sposta il secondo <span>verso destra. Il violino con questa soluzione: https://jsfiddle.net/2k1vryn7/

Qui https://jsfiddle.net/7wvx2uLp/3/ puoi vedere la differenza tra due approcci flexbox: flexbox con justify-content: space-betweene flexbox con flex:1il primo <span>.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.