2009-11-11 16 views
6

Tengo un problema con una tabla que contiene tres celdas en una fila. Dos de estos (izquierdo y derecho) tienen ancho/alto fijo y deben mostrar una imagen (o reducir a 0 cuando no hay imagen presente). La celda del medio toma el espacio restante dentro del total fijo de la tabla.Obteniendo una altura extra de 1px no deseada por elemento de tabla DIV en Safari

El problema: ahora termino con 3px de espacio extra por el cual los 'contenedores de imágenes' parecen expandirse (debajo de las celdas). Puede verlo inspeccionando el elemento 'starredunread' por ejemplo, crece de 20px a 23px de alto. Y no tengo idea de lo que está sucediendo, ya que el margen/relleno ya está desactivado por defecto y borde: 0 y borde-colapso: colapsar no ayuda.

Aquí está el archivo 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; 

} 

Y aquí está el código 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> 

... no se ve muy agradable sin las imágenes, sino que demuestra que mi problema de todos modos.

¿Alguna idea de lo que estoy haciendo mal? ¡Muchas gracias por tu aportación! El código solo necesita funcionar en Safari/Webkit.

Respuesta

10

En modo estricto, las imágenes están en línea por defecto, ya que está utilizando estricto, debe corregirlo manualmente aplicando display:block a sus imágenes.

"En los primeros días, los experimentos con el modo estricto, invariablemente, planteó la comentario de que las imágenes llegaron de repente un margen inferior extraño que no pudieron ser removidos . La causa fue que en modo estricto es un elemento en línea, lo que significa que debe reservarse algo de espacio para posibles caracteres descendentes como g, j o ​​q. Por supuesto, una imagen no tiene caracteres descendentes, por lo que el espacio nunca se usó, pero todavía tenía que reservarse

La solución fue declarar explícitamente elementos de nivel de bloque de imágenes: img {display: block}. "

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

+0

wow - eso fue rápido, simple y: ¡efectivo! muchas gracias, lo arreglé! –

0

que he tenido un problema similar. En general, debe inhibir los márgenes y el relleno en TODOS los elementos CSS con el siguiente marcado (preferiblemente al comienzo de la hoja de estilos): * { márgenes: 0; relleno: 0; }

El '*' inicial es importante. Esto ahorra varias horas de frustración. Después, si tiene una celda de texto, puede parecer que todavía hay media emulación de relleno en la parte superior, pero eso se debe a que la mayoría de los caracteres de texto son más cortos que una em.

Cuestiones relacionadas