1

私はCSSのみのメニューをIEのすべてのバージョンで機能させることに取り組んできましたが、IE7を除いて、ほとんど機能しなくなったと思います。

問題のサイトでは、次のCSSを使用しています。

.header-bar {
  position:fixed;
  top: 0;
  left: 0;
  right: 0;
  padding: 0;
  background: #333;
  font-size: 1.2em;
  font-weight: bold;
  z-index: 1000;
}
.header-bar a:hover {
  text-decoration: none;
}
.header-bar a {
  display: inline-block;
  padding: 7px 10px 7px 10px;
  color: #2C8FAA;
  font-size:1.1em;
}
.header-bar ul {
  list-style-type: none;
  display: inline-block;
  position: relative;
  height: auto;
}
.header-bar ul li {
  background: #333;
}
.header-bar ul li:hover {
  background: #444;
  color: #34AACB;
}
.header-bar ul.nav > li {
  display: inline-block;
}
.header-bar ul ul {
  display: none;
}
.header-bar ul ul li {
  border-top: 1px solid black;
}
.header-bar ul li:hover > ul {
  margin: 0;
  display: block;
  position: absolute; /* overrides other settings */
  /* top: 28px; */
  height: 28px;
  min-width: 200px;
}
.header-bar ul ul li:hover ul {
  top: 0; /* match position of parent, which should be position: relative; */
  position: absolute;
  margin-left: 199px; /* 150px min-width -1 px border */
  border-left: 1px solid black;
}
.header-bar ul li a { 
  display: block;
}
.header-bar ul li ul li {
  position: relative;
}
.header-bar ul ul li:hover ul ul {
  position: absolute;
  top: -48px; /* 28 + 1 for border */
  margin-left: 199px; /* 150px min-width -1 px border */
  border-left: 1px solid black;
}
.header-bar ul ul li:hover ul ul {
  top: 0;
}

次のようなHTMLのスタイルを設定するには:

<div class="header-bar">
  <div class="container">
    <ul class="nav">
      <li>
        <a href="#">Menu Item 1</a>
        <ul>
          <li>
            <a href="#">Menu Item 1, Submenu 1</a>
            <ul>
              <li><a href="#">Menu Item 1, Submenu 1, Sub-submenu 1</a></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</div>

これは子メニューでは機能するように見えますが、親メニュー項目はブロックレイアウトを採用しているように見えますinline-block。私はこの時点でIEと戦おうとしているので、もう少し目を光らせていただければ幸いです。

4

2 に答える 2

2

liタグを適切に閉じてみてください。

<div id="header-bar">
  <div class="container">
    <ul class="nav">
      <li><a href="#">Menu Item 1</a></li>
        <ul>
          <li><a href="#">Menu Item 1, Submenu 1</a></li>
            <ul>
              <li><a href="#">Menu Item 1, Submenu 1, Sub-submenu 1</a></li>
            </ul>
        </ul>
    </ul>
  </div>
</div>

- 編集 -

あなたのcssでこれを使用してください:

.header-bar ul.nav > li {
      display: inline-block;
      *float:left
}

それはトリックになるはずです。

于 2013-03-05T10:22:25.563 に答える
1

いくつかのこと。

  1. <LI>タグが正しく閉じられていません。
  2. display: inline-block;はサポートされていません。

行うには:

  1. <li>すべてのタグを正しく閉じます。
  2. このCSSを使用します。

    .header-bar ul.nav > li {
        display: inline-block;
        *display: inline;
        *zoom: 1;
    }
    

検証の問題

それでもハックがないことを本当に心配している場合は、これを行うことができます。PaulIrishの条件付きHTMLクラスを次のように使用します。

<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->

そしてCSSでは、これを与えることができます:

.ie6 .header-bar ul.nav > li,
.ie7 .header-bar ul.nav > li {
    display: inline;
    zoom: 1;
}

これで、HTMLとCSSの両方が有効になります。

于 2013-03-05T11:09:07.617 に答える