2009-11-11 12 views
6

Mam problem z tabelą zawierającą trzy komórki w jednym wierszu. Dwa z nich (lewy i prawy) mają ustaloną szerokość/wysokość i powinny wyświetlać obraz (lub zmniejszać do 0, gdy nie ma obrazu). Środkowa komórka zajmuje pozostałą przestrzeń z ustaloną sumą z tabelą.Uzyskiwanie niechcianej 1px dodatkowej wysokości na element tabeli DIV w Safari

Problem: teraz mam 3px dodatkowej przestrzeni, przez którą "pojemniki obrazu" wydają się rozszerzać (pod komórkami). Możesz to zobaczyć, sprawdzając na przykład element "starredunread", który rośnie od 20 do 23 pikseli. I nie mam pojęcia, co się dzieje, ponieważ margines/dopełnienie jest już domyślnie wyłączone i obramowanie: 0 i obcinanie obramowania: zwinięcie nie pomaga.

Oto plik CSS:

/*------------------------------------------ 

Reset (from the Yahoo UI Library) 

------------------------------------------*/ 



body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td {margin:0;padding:0;} 

table{border-collapse:collapse;} 

fieldset,img{border:0;} 

address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;} 

ol,ul{list-style:none;} 

caption,th{text-align:left;} 

h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;} 

q:before,q:after{content:'';} 

abbr,acronym{border:0} 

a{outline: none;} 



/*------------------------------------------ 

Interface 

------------------------------------------*/ 

body { 

top: 0px; 

left: 0px; 

width: 320px; 

height: 480px; 

background-color: #f00; 

color: #000; 

font-family: helvetica, arial, sans-serif; 

font-size: 12px; 

} 

.header { 

display: table; 

top: 0px; 

left: 0px; 

width: 320px; 

height: 44px; 

background-color: #738ba3; 

color: #fff; 

table-layout: fixed; 

border: 0; 

border-spacing: 0; 

} 

.headerrow { 

display: table-row; 

} 


.text { 

display: table-cell; 

overflow: hidden; 

text-overflow: ellipsis; 

white-space: nowrap; 

padding-left: 2px; 

vertical-align: middle; 

} 

.text b { 

font-weight: 700; 

font-size: 11pt; 

} 

.date { 

display: table-cell; 

width: 50px; 

vertical-align: middle; 

text-align: right; 

font-size: 8pt; 

padding-top: 3px; 

padding-right: 5px; 

} 

.date b { 

font-weight: 700; 

line-height: 11pt; 

} 


.starredunread { 

display: table-cell; 

top: 0px; 

left: 0px; 

width: 20px; 

height: 44px; 

vertical-align: middle; 

} 

.icon { 

display: table-cell; 

top: 0px; 

right: 0px; 

width: 44px; 

height: 44px; 

} 


.content { 

display: table; 

width: 320px; 

background-color: #fff; 

color: #000; 

font-size: 12pt; 

text-align: left; 

padding: 15px; 

} 

.sectionheader { 

height: 20px; 

} 

.sectionheaderrow { 

} 

.sectionunread { 

height: 20px; 

} 

.sectiontext { 

font-weight: 700; 

font-size: 9pt; 

padding-top: 1px; 

} 

.smallicon { 

width: 20px; 

height: 20px; 

} 

A oto kod HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

<head> 

<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 

<title>testHTML</title> 

<link rel="stylesheet" href="test.css" type="text/css" media="screen" /> 

</head> 

<body> 

<div class="header"> 

    <div class="headerrow"> 

     <div class="starredunread"> 
      <img src="images/testimg_small.png"> 
     </div><!-- end starredunread --> 

     <div class="text"> 
       <b>Testheader</b><br> 
       Text for testing - this should overflow with an ellipsis if the text exceeds the size of the container... 
     </div><!-- end text --> 

     <div class="date"> 
       <b>11.11.09</b><br> 
       18:54 
     </div><!-- end date --> 

     <div class="icon"> 
      <img src="images/testimg_44x44.png"> 
     </div><!-- end icon --> 

    </div><!-- end headerrow --> 

</div> <!-- end header --> 

<div class="content"> 
    More text for testing purposes.<br><br>Not really relevant.<br><br> So don't waste your time reading this. :o) 
</div><!-- end content --> 

<div class="header sectionheader"> 

    <div class="headerrow sectionheaderrow"> 

     <div class="starredunread sectionunread"> 
      <img src="images/testheader.png"> 
     </div><!-- end sectionunread --> 

     <div class="text sectiontext"> 
      Another Header 
     </div><!-- end sectiontext" --> 

     <div class="icon smallicon"> 
      <img src="images/testimg_20x20.png"> 
     </div><!-- end smallicon --> 

    </div><!-- end sectionheaderrow --> 

</div><!-- end sectionheader --> 

</body> 

</html> 

... nie wygląda zbyt miły, bez obrazy, ale to pokazuje mój problem tak.

Każdy pomysł, co robię źle? Wielkie dzięki za twój wkład! Kod działa tylko w Safari/Webkit.

Odpowiedz

10

W trybie ścisłym obrazy są domyślnie wstawiane, ponieważ używasz ścisłego, musisz to naprawić ręcznie, stosując display:block do swoich zdjęć.

„W pierwszych dniach, eksperymenty z trybie ścisłym niezmiennie podniósł komentarz że obrazy nagle dostaje dziwne dolny margines, który nie mógł być usunięta. Przyczyną było to, że w trybie ścisłym jest inline elementem, co oznacza, że ​​niektóre spacje powinny być zarezerwowane dla możliwych znaków potomnych, takich jak g, j lub q. Oczywiście obraz nie ma znaków descidera , więc przestrzeń nigdy nie była używana, ale nadal musiała być zarezerwowana .

Rozwiązaniem było jawne zadeklarowanie elementów bloków obrazów: img {display: block}. "

http://www.quirksmode.org/css/quirksmode.html

+0

Wow - to było szybkie, proste i: skuteczne! wielkie dzięki, naprawiłem to! –

0

miałem podobny problem. Ogólnie rzecz biorąc, musisz zahamować marginesy i dopełnienie WSZYSTKICH elementów css za pomocą następującego znacznika (najlepiej na początku arkusza stylów): * { marginesy: 0; wypełnienie: 0; }

Najważniejsze jest hasło "*". To oszczędza kilka godzin frustracji. Później, jeśli masz komórkę tekstową, może się wydawać, że na górze jest jeszcze połowa wypełnienia, ale to dlatego, że większość znaków tekstowych jest krótsza niż em.

Powiązane problemy