IE6 и IE7 проблема с пространством навигации - PullRequest
1 голос
/ 21 декабря 2010

У меня проблема с интервалами меню в IE7 и IE6, из-за которой я не могу выглядеть правильно.

Моя навигация может быть найдена на http://js.philosophydesign.com

http://www.philosophydesign.com/downloads/menuspacing.png

Как вы можете видеть в IE8 и других, он отображается нормально. В IE7 пункты меню частично разделены, но в IE6 они разделены очень сильно.

Навигация HTML:

<a class="float-left" href="http://js.philosophydesign.com"><img src="http://js.philosophydesign.com/wp-content/themes/philosophy/images/logo.gif" alt="Jeremy Stratton - Writing that works" title="Jeremy Stratton - Writing that works" /></a>
<div id="mainnavcont" class="float-right">
  <ul id="mainmenu" class="menu">
    <li id="menu-item-25" class="menu-item menu-item-type-post_type current-menu-item page_item page-item-6 current_page_item menu-item-25"><a href="http://js.philosophydesign.com/">I get to your point</a></li>
    <li id="menu-item-26" class="menu-item menu-item-type-post_type menu-item-26"><a href="http://js.philosophydesign.com/me-and-my-work/">Me and my work</a></li>
    <li id="menu-item-27" class="menu-item menu-item-type-post_type menu-item-27"><a href="http://js.philosophydesign.com/things-ive-written/">Some of the things I’ve written</a></li>
    <li id="menu-item-28" class="menu-item menu-item-type-post_type menu-item-28"><a href="http://js.philosophydesign.com/improve-your-writing/">Improve your writing</a></li>
    <li id="menu-item-29" class="menu-item menu-item-type-post_type menu-item-29"><a href="http://js.philosophydesign.com/what-people-say-about-me/">What people say about me</a></li>
    <li id="menu-item-30" class="menu-item menu-item-type-taxonomy menu-item-30"><a href="http://js.philosophydesign.com/category/my-blog/">My blog</a></li>
    <li id="menu-item-31" class="menu-item menu-item-type-post_type menu-item-31"><a href="http://js.philosophydesign.com/get-in-touch/">Get in touch</a></li>
  </ul>
</div>

CSS для навигации:

/**** Main Navigation ****/
div#mainnavcont {
    float:right;
    width:673px;
}
ul#mainmenu {
    display:block;
    list-style:none;
    margin:0;
    padding:0;
}
ul#mainmenu li a {
    color:#000;
    display:block;
    font-family:"HelveticaNeueLight45", "Trebuchet MS", Arial, Helvetica, sans-serif;
    font-size:12px;
    font-weight:normal;
    padding-left:10px;
    margin-left:-10px;
    text-decoration:none;
}
ul#mainmenu li a:hover, ul#mainmenu li.current-menu-item a, ul#mainmenu li.current-page-ancestor a {
    background:url(images/navbg.png) no-repeat 5px 50%;
}

Кто-нибудь знает, почему это меню работает в IE7 и IE6?

Спасибо

Scott

РЕДАКТИРОВАТЬ: Получил работу с этим CSS:

/**** Main Navigation ****/
div#mainnavcont {
    float:right;
    width:673px;
}
ul#mainmenu {
    display:block;
    list-style:none;
    margin:0;
    padding:0;
    width:200px;
}
ul#mainmenu li {
    display:block;
    float:left;
    width:200px;
}
ul#mainmenu li a {
    color:#000;
    display:block;
    font-family:"HelveticaNeueLight45", "Trebuchet MS", Arial, Helvetica, sans-serif;
    font-size:12px;
    font-weight:normal;
    padding-left:10px;
    margin-left:-10px;
    text-decoration:none;
    width:189px
}
ul#mainmenu li a:hover, ul#mainmenu li.current-menu-item a, ul#mainmenu li.current-page-ancestor a {
    background:url(images/navbg.png) no-repeat 5px 50%;
}

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

Это «таинственное пространство между элементами списка», которое иногда появляется в IE. Часто это происходит, когда элемент списка и ссылка внутри имеют разные типы отображения или hasLayout применяется непоследовательно. Но на весь сценарий влияет комбинация display, line-height и hasLayout. : -)

Это приводит их все к одной и той же отправной точке (или это происходит в IE7, что у меня есть в данный момент.) Я думаю, что большая проблема для вас была в том, что вы установили #mainmenu и #mainmenu a для отображения: block но оставил #mainmenu li по умолчанию.

#mainnavcont {
    float:right;
    width:673px;
}
#mainmenu, #mainmenu li, #mainmenu a {
    display:block;
    margin:0;
    padding:0;
    line-height:1;
    list-style:none;
}
#mainmenu {}
    #mainmenu li {}
        #mainmenu a {
            margin-left:-10px;
            padding-left:10px;
            color:#000;
            font-family:"HelveticaNeueLight45", "Trebuchet MS", Arial, Helvetica, sans-serif;
            font-size:12px;
            font-weight:normal;
            text-decoration:none;
        }
            #mainmenu a:hover, #mainmenu .current-menu-item a, #mainmenu .current-page-ancestor a {
                background:url(images/navbg.png) no-repeat 5px 50%;
            }

Вы можете увидеть некоторые примеры различных ситуаций, когда это происходит, просмотрев http://www.brunildo.org/test/IEWlispace.php в IE. В нижней части этого сайта он упоминает различные исправления для различных причин.

Если это не поможет вам, проверьте также:

http://gtwebdev.com/workshop/gaps/white-space-bug.php

Есть и другие решения, но сейчас я не могу найти свою любимую ссылку. : - (

Подсказка

Если вам в конечном итоге понадобятся дополнительные правила только для IE7 или IE6, воспользуйтесь этим методом http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ для IE.

Несвязанный совет:

Если вам абсолютно не нужно имя тега для повышения специфичности вашего правила, лучше его опустить. Не только потому, что это делает ваши селекторы короче, но из-за того, как браузеры анализируют и применяют CSS. Они начинаются в конце правила, поэтому в

ul#mainmenu li a

В худшем случае браузер: находит все a, проверяет li родителей, проверяет #mainmenu родителей, а затем проверяет, что #mainmenu является ul. Это излишне и неэффективно, особенно если добавить, что селекторы элементов (по мнению поставщиков браузеров) менее эффективны, чем классы и идентификаторы. (Это означает, что если у вас есть класс вроде .menu-item в li, лучше использовать его в селекторе, чем li.)

1 голос
/ 21 декабря 2010

Полагаю, установка line-height:1; для .menu-item решит проблему (возможно, line-height:1 не совсем то, что вам нужно, поиграйте со значениями, возможно, 1.25 лучше)

1 голос
/ 21 декабря 2010

Несколько вещей, которые я бы проверял, основываясь на разделе «Ошибка вертикального интервала или пробелов» в этой статье , в которой есть несколько хороших примеров - обычно это как-то связано с полями, отступами и плавающими / очищаемыми, чтобы получитьвсе красиво и последовательно кросс-браузер.

HTH

...