2014-09-30 27 views
8

Ho un div in un altro div. Il div interno ha margini di 0, auto per centralizzarlo. Tuttavia, non riesco a farlo fluttuare verso il basso senza renderlo assoluto. Esiste comunque la possibilità di fare un div relativo flottante sul fondo di un div normale?Posiziona div a fondo di un div diverso, senza usare Assoluto

+2

Alcuni codice ci darebbe una migliore comprensione del problema –

+1

Cosa c'è di sbagliato con l'utilizzo di 'posizione: absolute'? –

+0

ho un testo all'interno dello stesso dive per la reattività l'immagine si sovrappone al testo quando lo schermo è piccolo. – user3506938

risposta

13

Senza usare position: absolute, dovresti allinearlo verticalmente.

È possibile utilizzare vertical-align: bottom che, secondo the docs:

La proprietà CSS vertical-align specifica l'allineamento verticale di una linea o casella table-cell.

Quindi, o impostare il div esterno come un elemento inline, o come table-cell:

#outer { 
 
    height: 200px; 
 
    width: 200px; 
 
    border: 1px solid red; 
 
    display: table-cell; 
 
    vertical-align: bottom; 
 
} 
 

 
#inner { 
 
    border: 1px solid green; 
 
    height: 50px; 
 
}
<div id="outer"> 
 
    <div id="inner"> 
 
    </div> 
 
</div>

+0

come avrei fatto anche la parte centrale interna, allineata al centro? – user3506938

+0

'text-align: center' sul lato esterno, o' margin: 0 auto' sul lato interno. – LcSalazar

+1

@ user3506938 - Se stai parlando di centro verticale, è 'vertical-align: middle;' – LcSalazar

-1

È possibile farlo impostando al valore superiore al 100%.

Html

<div class="outer"> 
<div class="inner"></div> 
</div> 

CSS

.outer {height:400px;width:400px;background:#eaeaea;} 
.inner {position:relative;top:100%;height:50px; width:50px; background:#fad400;} 

check-out questo violino qui: http://jsfiddle.net/62wqufgk/

+1

questo non sembra funzionare. l'immagine è troppo bassa e fuori dal div – user3506938

+0

L'utente desidera che il div interno sia allineato al fondo del div esterno. Il violino fornito (guardalo) mette "l'interno" (che non è più "interno") * sotto * quello "esterno". – Pere

-1

Aggiungi questo stile al div interiore.

position: relative; 
top: 100%; 
transform: translateY(-100%); 
0

L'unico modo che ho trovato, a meno che il contenuto è una statica altezza, è stato quello di farlo con jQuery in questo modo:

$(document).ready(function(){ 
    inner_height = $('#inner-div').height(); 
    outer_height = $('#outer-div').height(); 
    margin_calc = (outer_height - inner_height) 
    $('#inner-div').css('margin-top', (margin_calc+'px')); 
}); 

Questo funziona per una colonna-div all'interno di un containing- div, se l'altezza di un'altra colonna è maggiore.

E 'incredibile questa cosa semplice non e 'costruito in' tramite un css-proprietà (ad esempio "float: basso"), che non si rompe tutto il resto con assoluti, ecc

+0

"float" non avrebbe senso. L'intento del float è quello di spostare gli elementi a sinistra o a destra di altri elementi sulla stessa riga. Il suo uso era molto abusato, in cui i CSS non avevano metodi alternativi. – Rob

0

Al giorno d'oggi si può semplicemente utilizzare display: flex per tutti questi problemi di allineamento.

Nel tuo caso puoi semplicemente rendere il genitore flessibile, direzione flessibile column (il valore predefinito è riga) e justify-content: flex-end. Il vantaggio di questo approccio è che funziona anche se si hanno più elementi nel genitore.

Se si dispone di quelle multiple e vogliono avere tutti allineati a partire dall'inizio del genitore fino alla fine, è possibile modificare justify-content ad un'altra proprietà, come space-between o space-evenly.

#outer { 
 
    height: 200px; 
 
    width: 200px; 
 
    border: 1px solid red; 
 
    display: flex; 
 
    justify-content: flex-end; 
 
    flex-direction: column; 
 
} 
 

 
#inner { 
 
    border: 1px solid green; 
 
    height: 50px; 
 
}
<div id="outer"> 
 
    <div id="inner"> 
 
    </div> 
 
</div>