Safari

2009-11-11 52 views
6

için DIV tablo öğesi başına istenmeyen bir 1px ekstra yükseklik elde etme Bir satırda üç hücre içeren bir tablo ile ilgili bir sorunum var. Bunlardan ikisi (sol ve sağ) sabit genişliğe/yüksekliğe sahiptir ve bir görüntü göstermelidir (veya görüntü yokken 0'a küçültülür). Orta hücre, kalan toplam alanı masa ile birlikte alır.Safari

Sorun: Şimdi, görüntü kaplarının (hücrelerin altında) genişlediği göründüğü 3 piksel fazladan boşlukla bitiyorum. Örneğin 'starredunread' elemanını inceleyerek görebilirsiniz, 20px'ten 23px'e kadar büyür. Ve marj/dolgu zaten varsayılan olarak kapalı ve sınır olarak kapalı olduğu için neler olduğunu hiçbir fikrim yok: 0 ve sınır-çöküşü: çöküş yardımcı olmaz.

İşte CSS dosyası var:

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

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; 

} 

Ve burada HTML kod:

<!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> 

... resimler olmadan çok güzel görünmüyor ama yine de benim sorunu gösterir.

Neyi yanlış yaptığımı biliyor musunuz? Girişiniz için çok teşekkürler! Kod sadece Safari/Webkit'te çalışmalıdır.

cevap

10

Sıkı modda görüntüler varsayılan olarak satır içi olduğundan, sıkı kullandığınız için, bu görüntüleri el ile display:block uygulayarak düzeltmeniz gerekir. İlk günlerde

", yüksek düzey moduyla deneyler değişmez, görüntüler aniden. nedenidir katı modda bir satır içi unsurdur olmasıydı kaldırılamadı garip bir alt kenar aldık yorumunu kaldırdı Bu, bir alanın, g, j veya q gibi olası descender karakterleri için ayrılması gerektiği anlamına gelir. Tabii ki bir görüntüde descender karakteri yoktur, bu nedenle alan hiç kullanılmamış, ancak hala 'a aittir.

Çözüm, görüntü bloğu düzeyindeki öğeleri açıkça bildirmek zorundaydı: img {display: block}. "

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

+0

wow - hızlı, basit ve etkili oldu! çok teşekkürler, düzeltin! –

0

Ben benzer bir sorun yaşadım. Genel olarak, aşağıdaki işaretleme ile (tercihen stil sayfanızın başlangıcında) ALL css öğelerinde kenar boşluklarını ve dolguları engellemeniz gerekir: * { marjlar: 0; doldurma: 0; }

Lider '*' önemlidir. Bu, birkaç saat hayal kırıklığını kurtarır. Daha sonra, bir metin hücreniz varsa, üstte hala yarım emülsiyon varmış gibi görünebilir, ancak çoğu metin karakterinin bir em'den daha kısa olması nedeniyle olabilir.