2012-06-19 12 views
219

Czy można uzyskać wartość 100px mniejszą niż 100% w czystym CSS? Chcę, aby model <div> był tylko 50px mniejszy niż 100%. Nie chcę żadnego JavaScript.Czy w CSS3 można utworzyć 50px mniej niż 100%?

+1

@hakre - link jest w CSS, a to jest w CSS3. –

+2

jak to jest CSS nie CSS3 a nie CSS a nie CSS3, czy CSS nie ...?Jeśli zapytasz wprost o funkcję CSS, która została sformułowana tylko w wersji 3, poproś o nią (nie CSS ogólnie - tak, twoje ciało pytania różni się od tego tytułu tutaj, więc nie obwiniaj mnie;)) – hakre

+0

Cóż, popatrz w treści poniżej tytułu pytania. Powinieneś użyć ciała, aby zadać pytanie CSS3 jednoznacznie (a gdy mówimy, powiedzmy, jeśli CSS3 lub CSS3 +) – hakre

Odpowiedz

274

Tak, można. Bez użycia IE expression(), możesz to zrobić w CSS3 przy użyciu 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/

To uczyni Twoje życie o wiele łatwiejsze. To jest obecnie obsługiwana w 3 głównych przeglądarek: Firefox, Google Chrome (WebKit) oraz IE9: http://caniuse.com/calc

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

+40

Problemy są a) pytanie nie było jasne co do szerokości a wysokości i b) samo-odpowiedź nie jest najlepszą odpowiedzią. Dla szerokości, sandeep jest lepszy, na wysokość, gilly3. Odpowiedź OP nie jest dziś obsługiwana w przypadku niektórych statystyk statystycznych dotyczących przeglądarek. (IE7/8) – shannon

+16

BTW: Nieprefiksowana wersja powinna iść po przedrostkowej wersji, a nie wcześniej. Zobacz https://developer.mozilla.org/Writing_Forward_Compatible_Websites Ponadto, z mojego doświadczenia, wiele sytuacji calc() można zastąpić przez 'box-sizing'. – luiscubal

+1

"Wyrażenie()" powoduje problemy, ponieważ przeglądarka przelicza funkcje (wewnątrz wyrażeń) na każdy piksel myszy, co wpływa na wykorzystanie procesora. I w tym przypadku (z calc) tak się dzieje? – 19WAS85

159

DIV automatycznie przyjmuje szerokość jego rodzica. Nie ma więc potrzeby definiowania żadnego width. Zwykle po prostu napisać to tak:

div{ 
    margin-right:50px; 
} 

Sprawdź to fiddle

+11

Co powiesz na [this] (http://jsfiddle.net/Nw3yd/3/) vs [this] (http://jsfiddle.net/Nw3yd/4/)? – Chango

+4

@Chango - [That] (http://jsfiddle.net/Nw3yd/4/) jest całkowicie niesamowite po zmianie rozmiaru okna. –

+1

@Chango może być to chcesz osiągnąć http://jsfiddle.net/Nw3yd/6/ – sandeep

37

Inną alternatywą jest pozycjonowanie bezwzględne.

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

fiddle

Ale rozwiązanie Sandeep jest jeden należy zazwyczaj użyć. Po prostu unikaj nadużywania float. Zapobiega to naturalnemu napełnianiu pojemnika.

-4

Tak, możemy to zrobić poprzez

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

Dzięki

+4

dlaczego definiujesz width: auto; – sandeep

+9

To jest ta sama odpowiedź co "sandeep", oprócz 'width: auto;', która nie ma żadnego efektu. Twoja odpowiedź nie dodaje żadnej wartości. Zamiast zamieszczać własną wersję odpowiedzi Sandeep, powinieneś mieć wziętą odpowiedź sandeep. –

7

Moje rozwiązanie działa i bez 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

Kompatybilność:
Firefox 3.6, Safari 5, Chrome 6, Opera 10, IE 9

+2

Divy w twojej metodzie wciąż zajmują całą szerokość ekranu, więc jeśli umieścisz dwa z nich, nie będziesz mógł ich unieść w stosunku do drugiego. – Chango

4

jsFiddle

Korzystanie z wyświetlacza block i margin. display:block, gdy nie jest połączony ze zdefiniowanym height/width, spróbuje wypełnić obiekt nadrzędny.

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> 
Powiązane problemy