2012-06-19 6 views
219

E 'possibile creare uno div 50px inferiore al 100% in puro CSS? Voglio che lo <div> sia solo 50px in meno del 100%. Non voglio alcun JavaScript.È possibile fare un div 50px inferiore al 100% in CSS3?

+1

@hakre - Il tuo collegamento è in CSS, e questo è in CSS3. –

+2

come è CSS non CSS3 non CSS non CSS3 non CSS non ...?Se chiedi esplicitamente una funzione CSS che è stata formulata solo nella versione 3, ti preghiamo di richiederla (non CSS in generale - sì la tua domanda corpo è diversa dal suo titolo qui, quindi non incolpare me;)) – hakre

+0

Dai un'occhiata al corpo sotto il titolo della domanda. Dovresti usare il corpo per rendere esplicita la domanda CSS3 (e mentre stiamo parlando per favore dì se CSS3 o CSS3 +) – hakre

risposta

274

Sì, è possibile. Senza utilizzare IE expression(), è possibile farlo in CSS3 utilizzando calc().

div { 
    width: 100%; 
    width: -webkit-calc(100% - 50px); 
    width: -moz-calc(100% - 50px); 
    width: calc(100% - 50px); 
} 

Demo: http://jsfiddle.net/thirtydot/Nw3yd/66/

Questo renderà la vostra vita molto più facile. Esso è attualmente supportato nelle 3 principali browser: Firefox, Google Chrome (WebKit), e IE9: http://caniuse.com/calc

MDN: https://developer.mozilla.org/en/CSS/-moz-calc

+40

I problemi sono a) la domanda non era chiara su larghezza vs. altezza eb) l'auto-risposta non è la migliore risposta. Per la larghezza, sandeep's è migliore, per altezza, gilly3's. La risposta dell'OP non è supportata su alcune statistiche importanti del browser oggi. (IE7/8) – shannon

+16

BTW: La versione non prefissata dovrebbe andare dopo la versione prefissata, non prima. Vedi https://developer.mozilla.org/Writing_Forward_Compatible_Websites Inoltre, secondo la mia esperienza, molte situazioni calc() possono essere sostituite da "dimensionamento della scatola". – luiscubal

+1

"expression()" causa problemi, poiché il browser ricalcola le funzioni (all'interno delle espressioni) su ciascun pixel del movimento del mouse, impatta negli usi del processore. E in questo caso (con calc) questo succede? – 19WAS85

159

Un DIV prende automaticamente la larghezza del suo genitore. Quindi non è necessario definire alcun width. Normalmente sarebbe sufficiente scrivere in questo modo:

div{ 
    margin-right:50px; 
} 

Verifica questo fiddle

+11

Cosa ne pensi di [this] (http://jsfiddle.net/Nw3yd/3/) rispetto a [this] (http://jsfiddle.net/Nw3yd/4/)? – Chango

+4

@Chango - [That] (http://jsfiddle.net/Nw3yd/4/) è semplicemente fantastico quando ridimensionate la finestra. –

+1

@Chango potrebbe essere quello che vuoi ottenere http://jsfiddle.net/Nw3yd/6/ – sandeep

37

Un'altra alternativa è il posizionamento assoluto.

div { 
    position: absolute; 
    left: 0; 
    right: 50px; 
} 

fiddle

Ma, la soluzione di Sandeep è quello che si dovrebbe normalmente usare. Basta evitare l'uso eccessivo di float. Ciò impedisce agli elementi di riempire naturalmente il loro contenitore.

-4

Sì possiamo farlo facendo

#custom_div{ 
width:100%; 
margin-right:50px; 
} 

Grazie

+4

perché si definisce la larghezza: auto; – sandeep

+9

Questa è la stessa risposta di sandeep, oltre a 'width: auto;', che non ha alcun effetto. La tua risposta non aggiunge alcun valore. Invece di postare la tua versione della risposta di sandeep, dovresti aver aumentato la risposta di sandeep. –

7

La mia soluzione funziona con e senza float: left.

HTML:

<div></div> 

css:

div { 
    height: 20px; 
    background: black; 
    float: left; 
    width: 100%; 
    padding-right: 50px; 
    box-sizing: border-box; 
    background-clip: content-box; 
}​ 

Demo

Compatibilità:
Firefox 3.6, Safari 5, Chrome 6, Opera 10, IE 9

+2

I div nel tuo metodo occupano ancora tutta la larghezza dello schermo, quindi se ne metti due non puoi renderli mobili l'uno accanto all'altro. – Chango

4

jsFiddle

Utilizzo del display block e margin. display:block quando non combinato con un numero definito height/width proverà a riempire il suo genitore.

header { 
    width:100%; 
    background:#d0d0d0; 
    height:100%; 
} 
h1 { 
    display:block; 
    border:#000 solid 1px; 
    margin:0 50px 0 0; 
    height:100px; 
} 
<header> 
    <h1></h1> 
</header> 
Problemi correlati