Allinea <div> elementi fianco a fianco


127

So che questa è una domanda piuttosto semplice, ma non riesco a capirlo per la mia vita. Ho due collegamenti a cui ho applicato un'immagine di sfondo. Ecco come appare (scuse per l'ombra, solo uno schizzo approssimativo di un pulsante):

inserisci qui la descrizione dell'immagine

Tuttavia, voglio che questi due pulsanti siano fianco a fianco. Non riesco davvero a capire cosa debba essere fatto con l'allineamento.

Ecco l'HTML

<div id="dB"}>
    <a href="http://notareallink.com" title="Download" id="buyButton">Download</a> 
</div>
<div id="gB">
    <a href="#" title="Gallery" onclick="$j('#galleryDiv').toggle('slow');return false;" id="galleryButton">Gallery</a>     
</div>

Ecco il CSS

#buyButton {
    background: url("assets/buy.png") 0 0 no-repeat;
    display:block;
    height:80px;
    width:232px;
     text-indent:-9999px;
}
#buyButton:hover{
width: 232px;
height: 80px;
background-position: -232px 0;
}
#buyButton:active {
width: 232px;
height: 80px;
background-position: -464px 0;
}

#galleryButton {
    background: url("images/galleryButton.png") 0 0 no-repeat;
    display:block;
    height:80px;
    width:230px;
     text-indent:-9999px;
}
#galleryButton:hover{
width: 230px;
height: 80px;
background-position: -230px 0;
}
#galleryButton:active {
width: 230px;
height: 80px;
background-position: -460px 0;
}

5
Il primo che mi viene in mente semplicemente leggendo il titolo èfloat:left;
JCOC611,

2
@ JCOC611: l'applicazione float:left;ad entrambi divha funzionato perfettamente. Puoi pubblicare il tuo commento come risposta? Grazie!
sudo rm -rf,

1
E il secondo è, display: inline-block;ma è meno ben supportato ...
JV

1
float: lasciato all'interno di un contenitore funzionerebbe, ma proverei a usare due tag <span> invece di <div> s per i pulsanti.
shiftycow,

Come già accennato, aggiungendo float: left; a #buyButton e #galleryButton, quindi aggiungi un altro elemento con clear: both; per cancellare il galleggiante. Perché usare div (elementi a blocchi) per avvolgere <a>?
ludesign,

Risposte:


154

Applicare float:left;su entrambi i div dovrebbe farli stare fianco a fianco.


Sbaglio o devo clear:both;andare lì da qualche parte? Non sono mai stato un esperto di CSS ma sembra tipico quando vedo float per vedere anche i clear.
Brad Christie,

4
clear:bothfarà esattamente il contrario. "Gli elementi dopo l'elemento fluttuante scorreranno attorno ad esso. Per evitare ciò, utilizzare la proprietà clear."
JCOC611,

@ JCOC611: Ah, di solito è chiaro quando vuoi un'abilità fluttuante momentanea? Ha senso. Grazie per la lezione ;-)
Brad Christie,

7
Per essere "chiari" (orribile, lo so), dovresti usarlo <br style="clear: both;" />se avessi un terzo div che volevi sotto i due che erano allineati.
Tass

3
@Tass devi solo avere il tuo terzo div in questo modo: <div style="clear: both;">...</div>(non richiesto)
intrepidis

136

Attenzione float: left... 🤔

... ci sono molti modi per allineare gli elementi fianco a fianco.

Di seguito sono riportati i modi più comuni per ottenere due elementi fianco a fianco ...

Demo: visualizza / modifica tutti gli esempi seguenti su Codepen


Stili di base per tutti gli esempi seguenti ...

Alcuni stili CSS di base per parented childelementi in questi esempi:

.parent {
  background: mediumpurple;
  padding: 1rem;
}
.child {
  border: 1px solid indigo;
  padding: 1rem;
}

float: sinistra

Usando la floatsoluzione ho un effetto indesiderato su altri elementi. (Suggerimento: potrebbe essere necessario utilizzare un clearfix .)

html

<div class='parent'>
  <div class='child float-left-child'>A</div>
  <div class='child float-left-child'>B</div>
</div>

css

.float-left-child {
  float: left;
}

display: inline-block

html

<div class='parent'>
  <div class='child inline-block-child'>A</div>
  <div class='child inline-block-child'>B</div>
</div>

css

.inline-block-child {
  display: inline-block;
}

Nota : lo spazio tra questi due elementi figlio può essere rimosso, rimuovendo lo spazio tra i tag div:

display: blocco in linea (nessuno spazio)

html

<div class='parent'>
  <div class='child inline-block-child'>A</div><div class='child inline-block-child'>B</div>
</div>

css

.inline-block-child {
  display: inline-block;
}

Display: flex

html

<div class='parent flex-parent'>
  <div class='child flex-child'>A</div>
  <div class='child flex-child'>B</div>
</div>

css

.flex-parent {
  display: flex;
}
.flex-child {
  flex: 1;
}

display: inline-flex

html

<div class='parent inline-flex-parent'>
  <div class='child'>A</div>
  <div class='child'>B</div>
</div>

css

.inline-flex-parent {
  display: inline-flex;
}

visualizzazione: griglia

html

<div class='parent grid-parent'>
  <div class='child'>A</div>
  <div class='child'>B</div>
</div>

css

.grid-parent {
  display: grid;
  grid-template-columns: 1fr 1fr
}


2
Sì, ma ho sentito che l'utilizzo inline-blockha alcuni problemi di compatibilità. Inoltre, qualche vantaggio nell'usarlo float?
sudo rm -rf

1
Sì, inline-blockè più recente, quindi i tuoi browser di grandi dimensioni potrebbero non supportarlo (anche se ci sono molte proprietà specifiche del browser e soluzioni alternative per questo). Il vantaggio è che l'elemento contenitore avvolgerà gli elementi; con floatdovrai aggiungere css all'elemento genitore.
Beau Smith,

12

mantienilo semplice

<div align="center">
<div style="display: inline-block"> <img src="img1.png"> </div>
<div style="display: inline-block"> <img src="img2.png"> </div>
</div>
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.