2011-10-02 9 views
13

Natknąłem się na problem, którego nie jestem całkowicie pewien, jak rozwiązać.CSS Szerokość stołu - 100% + minus margines

Mam stronę z liczbą elementów div, z których jedna zawiera tabelę, ale ma margines 20 pikseli. Potrzebuję tego stołu, aby "uderzyć" w prawą stronę innego elementu div, który osiągnąłem przy użyciu marginesu -20px - działa tak, jak się spodziewałem. Ponieważ ten element div (który obejmuje całą prawą stronę strony) jest płynny, tabela ma szerokość 100%.

Podczas gdy lewa strona stołu jest tam, gdzie chcę, prawa strona ma teraz 20px mniej niż wszystko inne.

Czy istnieje sposób na utrzymanie ujemnego marginesu po prawej stronie, bez przesunięcia stołu o 20 pikseli od prawej? Próbowałem kilku rzeczy bez powodzenia. Mój CSS tabeli jest wklejony poniżej.

.pricetable { 
    width:100%; 
    margin-left: -20px; 
    padding: 5px; 
} 
+0

możliwe duplikat [Div szerokości 100% minus ustalonej ilości pikseli] (http://stackoverflow.com/questions/651317/div- width-100-minus-fixed-amount-of-pixels) – Gajus

Odpowiedz

2

Można całkowicie ustawić stolik tak, aby był wyrównany po prawej stronie.

position: absolute; 
right: 0; 

Nie ma sposobu, aby dodać lewy margines bez przesuwania stołu, ponieważ tabela przesunięcia jest obliczana w następujący sposób: marża + dopełnienie + width = przesunięcie szerokości.

Po ustawieniu szerokości na 100%, margines i dopełnienie powodują, że element się rozszerza.

  • przekładki (po lewej) X (z prawej) y + szerokość = over 100%
  • over 100% + szerokość ujemny (X + Y) = 100%.

Pierwsza definicja dodaje dopełnienie po każdej stronie stołu. Druga definicja przesuwa tabelę w lewo, ponieważ jest to margines ujemny.

+0

Dzięki Rob - to działało sortowanie z prawej strony, ale wydaje się stwarzać różne problemy po lewej stronie. Podejrzewam, że walczę z przegraną bitwą. Przyszło mi jednak do głowy, że prostszym rozwiązaniem byłoby dodanie marginesu do pozostałych elementów, aby dopasować je do tabeli. – Lee

+0

BTW - dziękuję również za wyjaśnienie, ma pełny sens tak, jak to wyjaśniłeś. – Lee

+0

Dzięki za wskazanie tego Roba - wcześniej nie zauważyłem funkcji Accept. – Lee

3

spróbuj dając table-layout: fixed i zobaczyć

7

Można również ustawić szerokość do mniej niż 100% i ustawić margines auto:

.pricetable { 
    width:90%; 
    margin: auto; 
} 

Nadzieję, że to pomaga.

+0

Nie mogę uwierzyć, że nie ma lepszego rozwiązania, ale przynajmniej ten ma równy margines po obu stronach. – ColinM

13

Moim rozwiązaniem było zawinięcie tabeli wewnątrz elementu div z marginesem ujemnym.

<div style="margin-right:-20px"> 
    <table style="width:100%"> 
    ... 
    </table> 
</div> 
+0

Porzuciłem używanie div, aby automatycznie zmienić rozmiar i położenie elementów mojej strony. Wykonanie tabeli o szerokości 100%, a następnie posiadanie komórek zajmujących wysokość i szerokość marginesów, będzie dobrze pasowało do mojego elementu div dziecka. – Jonats

5

jest teraz możliwe CSS calc:

.pricetable { 
    width: calc(100% - 20px); 
    margin-left: -20px; 
    padding: 5px; 
} 
Powiązane problemy