2013-05-14 1 views
14

La mia domanda è molto simile a questa domanda: CSS: 100% width or height while keeping aspect ratio?CSS: Mantenere di un div altezza relativa alla sua larghezza

Ho un div la cui posizione è fissa. La larghezza del div deve essere 100% e il suo altezza esattamente 1/6 della sua larghezza. C'è un modo -webkit-calc() per farlo?

Nota: Le soluzioni JS non sono preferite in quanto un cambiamento di zoom/orientamento può influire sulla larghezza/altezza.

+0

Grazie per la soluzione. Personalmente non posso ripeterlo come ho avuto questo problema più di un anno fa e ho perso il contesto. Forse la prossima persona che ha questo problema potrebbe provare la tua soluzione. :) – Akshay

risposta

10

E 'questo quello che cercate? Non sto usando -webkit-calc() affatto. Ho inserito un'immagine 1px per 6px in un esterno div a cui è stato applicato position: fixed e l'immagine per avere un width di 100% e position: relative. Poi ho aggiunto un interno div che è posizionato in modo assoluto per essere alto e largo come il suo antenato.

Ora è possibile modificare la larghezza del esterna div, e le immagini impostazione width: 100% farà in modo che sia l'esterno e l'interno div 's sono garantiti per avere sempre un'altezza pari a 1/6 di loro larghezza (o almeno il più vicino possibile a quello che può ottenere, le altezze saranno arrotondate al numero intero più vicino di pixel). Qualsiasi contenuto potrebbe andare all'interno dello div interno.

HTML

<div> 
    <div></div> 
    <img src="https://dl.dropboxusercontent.com/u/6928212/sixbyone.png" /> 
</div> 

CSS

html, body { 
    margin: 0px; 
    padding: 0px; 
} 
div { 
    position: fixed; 
    width: 100%; 
} 
div > div { 
    position: absolute; 
    top: 0px; 
    right: 0px; 
    bottom: 0px; 
    left: 0px;  
} 
img { 
    width: 100%; 
    display: block;  
    position: relative; 
} 

Ecco un jsFiddle che mostra il comportamento richiesto.

+1

+1 Molto bella, soluzione creativa! – Christoph

+0

Grazie, stupisci :) – Akshay

+0

Soluzione intelligente! –

-1

è sempre possibile impostare la larghezza div in questo modo:

$('#div1').css("width", $('#div1').height()/6); 

EDIT:

o si potrebbe usare qualcosa di simile:

/* Firefox */ 
width: -moz-calc(100%/6); 
/* WebKit */ 
width: -webkit-calc(100%/6); 
/* Opera */ 
width: -o-calc(100%/6); 
/* Standard */ 
width: calc(100%/6); 

Questo è solo un esempio - .. Ma è impossibile ottenere l'altezza di un div in pixel nel file css .. è necessario utilizzare jquery per quello

EDI T:

altezza 1/6 di larghezza

$('#div1').css("height", window.width()/6); 
+0

Grazie per la risposta, ma questo non risolve la mia domanda. larghezza: -webkit-calc (100%/16,66666666667); rende larghezza 1/6 di PARENT LARGHEZZA. Ho bisogno dell'altezza 1/6 della larghezza! :) Grazie comunque – Akshay

+0

@Akshay, ma non è possibile farlo in CSS, si può fare solo con javascript –

+0

leggevo sui calcoli WebKit e chiedevo se potevamo farlo usando questo .. – Akshay

-1

si potrebbe usare jQuery, ad esempio, $('.someclass').css('width', 180); $('.someclass').css('height', $('.someclass').width()/6);

spostato il secondo suggerimento del commento per leggibilità

$('.btnResize').click(function() { $('.div').css('height', $('.div').width()/6);}); 
+0

Grazie. Non risolve il problema. la larghezza deve essere al 100% solo per i problemi di ridimensionamento. Quindi, se aggiusto la mia altezza di JS una volta e zoomo o cambio orientamento, l'altezza non viene riportata a 1/6 della larghezza. – Akshay

+0

scusa, ho frainteso, e forse lo faccio ancora; se si tratta solo di un problema di ridimensionamento, è necessario che ci sia un evento di trigger che si può rilevare con jquery (vedere l'esempio nel post modificato); se non viene ridimensionato tramite il pulsante, ci dovrebbe essere un altro evento appropriato per catturare –

5

È inoltre possibile utilizzare la soluzione descritta in Responsive square columns.

Si basa sul fatto che% padding-top/bottom e margin-top/bottom sono calcolati in base al whidth dell'elemento padre.

adattato alla vostra situazione sarebbe simile a questa:

FIDDLE

HTML:

<div class="wrap"> 
    <div class="content"> 
    </div> 
</div> 

CSS:

.wrap{ 
    position:fixed; 
    width:100%; 
    padding-bottom:16.666%; /* 100x1/6 = 16.666...*/ 
} 
.content{ 
    position:absolute; 
    top:0; 
    bottom:0; 
    left:0; 
    right:0; 
}