Come allineare correttamente gli elementi div?


351

Il corpo del mio documento html è composto da 3 elementi, un pulsante, un modulo e una tela. Voglio che il pulsante e il modulo siano allineati a destra e la tela rimanga allineata a sinistra. Il problema è quando provo ad allineare i primi due elementi, non si susseguono più e invece si trovano uno accanto all'altro in senso orizzontale? Ecco il codice che ho finora, voglio che il modulo segua direttamente dopo il pulsante a destra senza spazio nel mezzo.

#cTask {
  background-color: lightgreen;
}

#button {
  position: relative;
  float: right;
}

#addEventForm {
  position: relative;
  float: right;
  border: 2px solid #003B62;
  font-family: verdana;
  background-color: #B5CFE0;
  padding-left: 10px;
}
<!DOCTYPE html>
<html lang="en">
<head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
  <script type="text/javascript" src="timeline.js"></script>
  <link rel="stylesheet" href="master.css" type="text/css" media="screen" />
</head>

<body bgcolor="000" TEXT="FFFFFF">
  <div id="button">
    <button onclick="showForm()" type="button" id="cTask">
        Create Task
    </button>
  </div>
  <div id="addEventForm">
    <form>
      <p><label>Customer name: <input></label></p>
      <p><label>Telephone: <input type=tel></label></p>
      <p><label>E-mail address: <input type=email></label></p>
    </form>
  </div>
  <div>
    <canvas id="myBoard" width="1000" height="600">
      <p>Your browser doesn't support canvas.</p>
    </canvas>
  </div>
</body>
</html>

Risposte:


338

Puoi creare un div che contenga sia il modulo sia il pulsante, quindi imposta il div fluttuando verso destra impostando float: right;.


Non avrei mai pensato di usare float. Ci ho provato margin-left: auto;ma non ha funzionato, il che mi ha sorpreso perché l'elemento che sto cercando di allineare a destra è relativo.
DFSFOT

461

i float sono ok, ma problematici con ie6 e 7.

preferirei usare margin-left:auto; margin-right:0;sul div interno.


6
@ShellNinja perché? so che 0è valido, tuttavia lo è anche 0px ... discuti il ​​tuo punto così impariamo qualcosa.
Pstanton,

29
Lasciare l'unità consente al browser di saltare determinati calcoli per rendere questo miglioramento delle prestazioni. Se è zero, perché sprecare le risorse calcolando il layout in base a un'unità? Lo zero è zero indipendentemente dall'unità ... Si potrebbe pensare che questa logica sia già integrata nei browser. link
ShellNinja

7
non posso essere in disaccordo ma dubito che influisca molto sulle prestazioni. modificare.
Pstanton,

24
Non riesco a farlo funzionare, il div si allinea ancora a sinistra. Potresti fornire un violino o alcune (più) righe di html / css?
Griddo,

21
Assicurati che il tuo elemento abbiadisplay: block;
derek_duncan il

202

Vecchie risposte. Un aggiornamento: usa flexbox, funziona praticamente in tutti i browser ora.

<div style="display: flex; justify-content: flex-end">
  <div>I'm on the right</div>
</div>

E puoi diventare ancora più fantasioso, semplicemente:

<div style="display: flex; justify-content: space-around">
  <div>Left</div>
  <div>Right</div>
</div>

E più elaborato:

<div style="display: flex; justify-content: space-around">
   <div>Left</div>
   <div>Middle</div>
  <div>Right</div>
</div>


4
funziona, ma quando lo schermo diventa piccolo invece di impilarsi si restringono molto
jean d'arme

6
È necessario aggiungere una query multimediale per modificare la direzione flessibile da riga a colonna nel punto di interruzione definito. Probabilmente vorrai cambiare o rimuovere il tuo contenuto giustificato in questo esempio, altrimenti le cose si allungheranno su e giù invece di sinistra e destra.
Michael Bushe,

Questo ha funzionato per me. Le risposte precedenti no. Usando "lucido".
Roger,

30

Altre risposte a questa domanda non sono così buone in quanto float:rightpossono andare al di fuori di un div parent (overflow: nascosto per un genitore a volte potrebbe aiutare) emargin-left: auto, margin-right: 0 per me non ha funzionato in div nidificati complessi (non ho studiato il perché).

Ho capito che per alcuni elementi text-align: rightfunziona, supponendo che funzioni quando l'elemento e il genitore sono entrambi inlineo inline-block.

Nota: la text-alignproprietà CSS descrive come il contenuto incorporato come il testo è allineato nel suo elemento di blocco principale. text-alignnon controlla l'allineamento degli elementi del blocco stesso, ma solo il loro contenuto incorporato.

Un esempio:

<div style="display: block; width: 80%; min-width: 400px; background-color: #caa;">
    <div style="display: block; width: 100%">
        I'm parent
    </div>
    <div style="display: inline-block; text-align: right; width: 100%">
        Caption for parent
    </div>
</div>

Ecco un violino JS .



15

Se hai più div che desideri allineati fianco a fianco all'estremità destra del div parent, imposta text-align: right;sul div parent.


15

Puoi usare flexboxcon flex-growper spingere l'ultimo elemento verso destra.

<div style="display: flex;">
  <div style="flex-grow: 1;">Left</div>
  <div>Right</div>
</div>

1
Personalmente ritengo che questa sia la risposta corretta per il 2020: P
Mike Kellogg,

2

Se non devi supportare IE9 e sotto puoi usare flexbox per risolvere questo: codepen

Ci sono anche alcuni bug con IE10 e 11 ( supporto flexbox ), ma non sono presenti in questo esempio

È possibile allineare verticalmente la <button>e <form>l'avvolgendoli in un contenitore con flex-direction: column. L'ordine di origine degli elementi sarà l'ordine in cui sono visualizzati dall'alto verso il basso, quindi li ho riordinati.

È quindi possibile allineare orizzontalmente il contenitore di moduli e pulsanti con l'area di disegno avvolgendoli in un contenitore con flex-direction: row. Ancora una volta l'ordine di origine degli elementi sarà l'ordine in cui sono visualizzati da sinistra a destra, quindi li ho riordinati.

Inoltre, ciò richiederebbe di rimuovere tutte positione floatregole di stile dal codice collegato in questione.

Ecco una versione ridotta dell'HTML nel codice collegato sopra.

<div id="mainContainer">
  <div>
    <canvas></canvas>
  </div>
  <div id="formContainer">
    <div id="addEventForm"> 
      <form></form>
    </div>
    <div id="button">
      <button></button>
    </div>
  </div>
</div>

Ed ecco il CSS pertinente

#mainContainer {
  display: flex;
  flex-direction: row;
} 

#formContainer {
  display: flex;
  flex-direction: column;
}

1

La semplice risposta è qui:

<div style="text-align: right;">
    anything:
    <select id="locality-dropdown" name="locality" class="cls" style="width: 200px; height: 28px; overflow:auto;">
    </select>
</div>

0

Puoi semplicemente usare padding-left: 60% (per esempio) per allineare il contenuto a destra e avvolgere contemporaneamente il contenuto in un contenitore reattivo (nel mio caso ho richiesto la barra di navigazione) per assicurarmi che funzioni in tutti gli esempi.


0

Se si utilizza bootstrap, quindi:

<div class="pull-right"></div>

Penso che volevi dire <div class="text-right"></div>.
Alex Barker,

1
anil non è sbagliato, la classe "pull-right" si traduce in "float: right;" (testato con Bootstrap 3.4.1)
Fabian Horlacher

-13

So che questo è un vecchio post, ma non potevi semplicemente usarlo <div id=xyz align="right"> per il bene.

Puoi semplicemente sostituire destra con sinistra, centrale e giustificare.

Ha funzionato sul mio sito :)


21
Non utilizzare gli attributi HTML per formattare la tua pagina. Ecco per cosa è stato creato CSS. In effetti, l' alignattributo è ora obsoleto .
Hanna,

4
... e quindi la ragione di una domanda come questa e la necessità di una risposta, poiché i vecchi metodi non funzionano più.
vapcguy,

ohohoh, molto negativo))
Nessi
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.