2009-11-26 13 views
32

Używam tego css do formatowania dwóch kolumn, ale nadal otrzymuję margines między dwoma. Mogę go wyeliminować za pomocą margin-left: -4px; lub niektórych takich. Czy istnieje bardziej elegancki sposób na to, czy coś jest nie tak z kodem CSS?Jak usunąć dodatkowe marginesy wygenerowane przez wstawione bloki?

div.col1{ 
    display: inline-block; 
    min-height: 900px; 
    height: 100%; 
    width 300px; 
    margin: 0px; 
    background-color: #272727; 
    overflow: hidden; 
    border: 1px dotted red; 
} 

div.col2{ 
    display: inline-block; 
    min-height: 900px; 
    height: 100%; 

    width: 620px; 
    margin: 0px; 

    vertical-align: top; 
    border: 1px dotted red; 
    overflow: hidden; 
} 
+1

@Pavel: Ta strona działa trochę inaczej na innych forach. Po znalezieniu przydatnej odpowiedzi należy ją zatwierdzić, klikając strzałkę w górę obok niej. Jeśli to pytanie rozwiązało Twój problem, kliknij symbol zaznaczenia bagna obok niego, a pytanie zostanie oznaczone jako rozwiązane. Nie trzeba dodawać słowa [Resolved] do tytułu pytania. Witaj na http://stackoverflow.com/ – voyager

+0

heh, dziękuję, nie mam karmy, która mogłaby to zrobić jeszcze raz :) –

+0

@Pavel: ale możesz wybrać zaakceptowaną odpowiedź, klikając zielony znacznik wyboru. – voyager

Odpowiedz

46

Być może masz:

<div class="col1"> 
    Stuff 1 
</div> 
<div class="col2"> 
    Stuff 2 
</div> 

? Jeśli tak, to prawdopodobnie jest to biały problem (okazuje się, że białe spacje mają znaczenie w html). Powinno to naprawić:

<div class="col1"> 
    Stuff 1 
</div><div class="col2"> 
    Stuff 2 
</div> 
+0

To jest takie głupie, dzięki temu zadziałało! –

+9

Aby być bardziej precyzyjnym - ma to znaczenie, ponieważ bloki są traktowane jako wbudowane (ze względu na wbudowany blok) –

+0

Przyjemny połów! Niełatwo go znaleźć. –

-5

Należy również określić:

padding: 0; 
+0

tak, mam kropkowane czerwone obramowanie pokazujące lokalizacje elementu. Próbowałem firebug, ale nie przypisuje odstępów do żadnego stylu elementu. –

0

zastosuj spławik: lewy i spowoduje to usunięcie spacji, aby tekst nie musiał znajdować się na 1 linii.

+2

Jeśli tylko 'float: left' nie miał zupełnie innej semantyki .. –

7

Alternatywnie, aby rozwiązać ten problem bez zmiany formatowania kodu źródłowego, można utworzyć dodatkowy element.

Jeśli robisz to na liście to będzie wyglądać:

<ul > 
    <li> 
     <a href="#">Solutions Overview</a> 
    </li>  
</ul> 


<style type="text/css">    
    ul {word-spacing:-1em;} 
    ul li a{word-spacing:0;} 
</style> 
7

Elementy z atrybutem inline-block będzie zachowują się tak, jakby były inline (stąd nazwa), dlatego wszelkie napotkane spacje będą traktowane jak spacja. Na przykład:

<div></div><div></div> 

zostanie wygenerowana inaczej

<div></div> 
<div></div> 

See a live example here

Można rozwiązać ten problem przy użyciu języka HTML w następujący sposób:

Albo umieścić wszystkie elementy na ta sama linia, tj.

<div> 
    // CONTENT 
</div><div> 
    // CONTENT 
</div><div> 
    // CONTENT 
</div> 

lub używać HTML komentarze do zlikwidowania przestrzenie

<div> 
    //CONTENT 
</div><!-- 
--><div> 
    //CONTENT 
</div> 

można rozwiązać ten problem przy użyciu CSS następująco:

Ustaw atrybut font-size: 0 na rodzica, czyli

parent { 
    display: inline-block; 
    font-size: 0 
} 
parent * { 
    font-size: 12px 
} 

lub ustaw atrybut zoom: 1 na rodzica, tj.

parent { 
    display: inline-block; 
    zoom: 1 
} 
18

Prosty font-size:0 do elementu nadrzędnego będzie działać.

+0

to ma błąd na Androidzie –

+0

działa rozmiar czcionki 0 na elemencie nadrzędnym, a następnie na podelementie ustawionym na 1.5rem na przykład – Prozi

-1

Rozwiązanie problemu spowoduje także usunięcie elementu nadrzędnego.

<div class="col-set"> 
    <div class="col1"> 
     Stuff 1 
    </div> 
    <div class="col2"> 
     Stuff 2 
    </div> 
</div> 
.col-set { font-size: 0; }  
.col-set > div { font-size: 12px; } 
Powiązane problemy