2009-08-23 9 views
2

私はCSSメニューを開発しました。テスト(純粋なhtml/css)ではすべてのブラウザでうまく機能しています。 cakePHP上で実行されている開発環境にコードを持ってきたときに、Firefox(3.5.2)でメニューのバグが表示されることがありました。それは他のブラウザでは起こりません。 (その下に他のliブロックは、見えるようになっている方法です)バグが発生したとき、私はソースをチェックし、これは次のようになります。Firefoxのレンダリング時にはHTMLが正しくない

<div class="nav1"> 
<ul id="dropnav"> 
    <li id="dashboard"> 
     <a href="/businesses/dashboard"/> 
     <div> 
      <span class="white caps"> 
       <a href="/businesses/dashboard">Dashboard</a> 
      </span> 
      <a href="/businesses/dashboard"> 
       <br/> 
       <small>At-a-glance view of all your stuff</small> 
      </a> 
     </div> 
    </li> 
    <li id="listing" class="active"> 
     <a href="/businesses/edit_profile"> 
     <div> 
      <span class="white caps">Listing</span> 
      <br/> 
      <small>View and edit your listing</small> 
     </div> 
     </a> 
    </li> 
</ul></div> 

ここでは、関連するCSSだ:


span.caps { text-transform:uppercase; } 
.white{color:#fff;} 
.nav1 { background: url('../images/gradients/nav1.gif') repeat-x; height:50px; } 
.nav1 #dropnav { list-style-type:none; margin:0; height:50px;float:left;line-height:1; } 
.nav1 #dropnav li { padding:8px 10px 7px 10px; border-left: 1px solid #3ba2da; border-right: 1px solid #1f74a3;float:left;position:relative; } 
.nav1 #dropnav li div { position:relative; float:left; padding-top:5px; } 
.nav1 #dropnav li a { padding:0 0 6px 40px; float:left; text-decoration:none;} 
.nav1 #dropnav li:hover, .nav1 #dropnav li.active { background: #3b3b3b; } 
.nav1 #dropnav li#first:hover, .nav1 ul li#last:hover {background:none;} 
.nav1 #dropnav li:hover small, .nav1 #dropnav li.active small{ color:#fff; } 
.nav1 small { line-height:1.2em; color:#111; } 
.nav1 span { font-weight:bold; } 
.nav1 #dashboard a{ background: url('../images/icons/nav134.png') no-repeat 0 -102px; } 
.nav1 #listing a{ background: url('../images/icons/nav134.png') no-repeat 0 -68px; } 
.nav1 #messages a{ background: url('../images/icons/nav134.png') no-repeat 0 -34px; } 
.nav1 #tools a{ background: url('../images/icons/nav134.png') no-repeat 0 0; } 

私はいくつかの問題があるかもしれないことを知っていますが、私はそれを絞ろうとしています。

+0

は正確に構成されています。 – chaos

+1

w3標準によれば、リンク(a)内にブロックレベルの要素(div)を持つことは許されません。 – mpen

+0

ええ、W3Cバリデーターはそれを突き詰めます。 – chaos

答えて

4

リンク内にdivを持つことはできません。 Firefoxは、あなたがそれを意味すると自動的にこれを修正します。もちろん、マシンはあなたが試したものを実際に推測することはできないので、バグが出ています。

実際には、明らかにFireFoxが間違いを犯したと見える唯一のブラウザです。他のブラウザはあなたの不適切なHTMLを無視します。

divを削除して、の>にスタイルシートのdisplay:ブロックプロパティを付けてみてください。

+0

ありがとうございます! –

4

さて、何を私に出て飛躍することはまず<li>で、あなたの外側<a href="/businesses/dashboard"/>は何を囲んでいないし、それはあなたが望むものになりそうだように見えるしていません/>を、使用して閉じていることです。おそらくFirefox 3.5.2は何らかの理由で他のブラウザよりも敏感ですが、問題はHTMLを生成しているものであるようです。

+0

はい、それは正しくレンダリングされない場合、HTMLは次のようになります。

  • \t \t
    \t \t Dashboard \t \t
    \t \t At-a-glance view of all your stuff \t
    \t
  • +0

    右。あなたは '正しい'(HTML標準ではなく、現時点では気にしない)HTMLがFirefox 3.5.2以外のすべてのブラウザで生成されると言っていますか?そうであれば、それはFirefoxではなく、HTMLを作り出しているところで問題になるからです。ブラウザはあなたのHTMLを書き換えません。 – chaos

    +0

    はい。あなたの問題は、Firefoxではなく、CakePHPにあります。 –

    2

    コメントに記載されているとおり、マークアップは厳密には有効ではありません(aの中の空のaまたはdiv)。私にとって、これは、ほとんどのブラウザであなたが望むようにレンダリングするかもしれませんが、ここで正しくレンダリングされていると言っても意味がありません。

    私のアドバイスは、最初に検証するようにマークアップを修正することです。有効なマークアップがあれば、最近のFirefoxのような素晴らしいブラウザが正しく表示され、残っているブラウザ固有の問題のトラブルシューティングを行うことができます。

    W3Cのバリデータ:http://validator.w3.org/

    関連する問題