Неправильный внешний вид в Internet Explorer - PullRequest
0 голосов
/ 29 февраля 2012

Я неправильно вижу в Internet Explorer 7,6 и т. Д. Это началось, когда я добавил float: right; в тег #social-share div.Я попытался установить display: inline-block; на него и clear: both;, но у меня ничего не получалось.

Вы можете посмотреть проблему вживую .Вот мой код:

HTML

<header>
    <div id="inner-border">
            <div id="header-wrapper">
                <a href="index.php" alt="Bryuvers Majas Lapa" id="logo"></a>
                <div id="social-share">
                    <!-- AddThis Button BEGIN -->
                    <div class="addthis_toolbox addthis_default_style addthis_32x32_style">
                    <a class="addthis_button_preferred_1"></a>
                    <a class="addthis_button_preferred_2"></a>
                    <a class="addthis_button_preferred_3"></a>
                    <a class="addthis_button_preferred_4"></a>
                    <a class="addthis_button_preferred_5"></a>
                    <a class="addthis_button_compact"></a>
                    <a class="addthis_counter addthis_bubble_style"></a>
                    </div>
                    <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4db8643a1c09a1ff"></script>
                    <!-- AddThis Button END -->
                </div>
            </div>
    </div>
</header>

CSS

header {
    width: 100%;
    height: 115px;
    background: #120c09;
    margin: 50px 0 0 0;
    border-top: 1px solid #100b07;
    border-bottom: 1px solid #100b07;
}

#inner-border {
    width: 100%;
    height: 103px;
    margin: 5px 0 0 0;
    border-top: 1px dashed #291a10;
    border-bottom: 1px dashed #291a10;
}

#header-wrapper {
    width: 900px;
    height: 103px;
    margin: 0 auto;
}

#logo {
    height: 230px;
    width: 205px;
    position: absolute;
    z-index: 99;
    margin: -57px 0 0 0;
    background: url("../images/logo.png") no-repeat;

    -webkit-transition: 0.2s;
    -moz-transition: 0.2s;
    -o-transition: 0.2s;
    -ms-transition: 0.2s;
    transition: 0.2s;
}

#logo:hover {
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
    filter: alpha(opacity=70);
    opacity: 0.7;
}

#logo:active {
    margin: -55px 0 0 0;
}

#social-share {
    width: 280px;
    float: right;
    margin: -47px 0 0 0;
    color: #fff;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
    filter: alpha(opacity=20);
    opacity: 0.2;

    -webkit-transition: 0.2s;
    -moz-transition: 0.2s;
    -o-transition: 0.2s;
    -ms-transition: 0.2s;
    transition: 0.2s;
}

#social-share:hover {
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
    filter: alpha(opacity=80);
    opacity: 0.8;
}

Это правильный вид:

enter image description here

Это неправильный вид (т.е. 7, 6)

enter image description here

Игнорировать связанные с css3 вещи, проблема в том, что вто есть 7,6 все выдавливается наверх и строка поиска появляется посередине, а не справа.

Ответы [ 4 ]

2 голосов
/ 04 марта 2012

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

Добавьте position:relative к вашему #header-wrapper правилу CSS, чтобы мы могли правильно разместить ваш логотип в его границах:

#header-wrapper {
  position:relative;
}

Далее, мы должны изменить ваш логотип, чтобы он находился посередине вашего #header-wrapper div. Раньше вы использовали margin: -57px auto 0 auto; для выравнивания вашего логотипа, но, поскольку вы уже позиционировали его абсолютно, маржа вообще не нужна (чудо, что он вообще работал), поэтому давайте сделаем некоторую математику, чтобы абсолютно позиционировать ваш логотип в середина вашего заголовка оболочки div:

Сначала мы исключаем эту декларацию и заменяем ее следующим текстом:

#logo {
    left: 50%;
    top:-57px;
    margin-left: -102.5px;
}

Теперь, что мы здесь сделали? Сначала мы отодвинули ваш логотип на 50% слева, а затем отодвинули его назад с отрицательным полем на -102,5 пикселей. Почему мы это сделали? Поскольку объявление left выдвигает ваш элемент с шириной, добавленной к вычислению, поэтому push фактически означает «50% влево + ширина вашего элемента», поэтому мы используем отрицательное поле для компенсации ширины, 50% - width/2 , Здесь - лучшее объяснение процесса.

После завершения двух перечисленных мной изменений вы увидите, что логотип находится за областью слайд-шоу, это связано с ошибкой ie7 z-index и исправление на самом деле очень простое:

header {
    position:relative;
    z-index:999; /* ie7 z-index bug fix */
}

Мы исправляем это, определяя раздел заголовка как position:relative и даем ему z-index больше, чем область слайд-шоу, таким образом, ваш логотип будет поверх слайд-шоу.

Теперь, чтобы исправить положение панели поиска влево, а не вправо, мы должны определить ваш #social-share раздел как position:absolute, а затем сдвинуть его вправо с помощью right:0, почему? Потому что IE7 позиционирует вашу строку поиска прямо рядом с #social-share, который выдвигается наверх с помощью отрицательного поля, и, следовательно, не удаляется из потока, как ожидалось (был удивлен, что на самом деле он работал в современных браузерах). Итак, определите ваш #social-share раздел как абсолютный, и проблема решена:

#social-share {
   position:absolute;
   right:0;
}

И последнее исправление - это условный класс, который мы собираемся использовать для нацеливания вашего тега #_atssh <div>, чтобы расположить его относительно вашего документа. IE7 не принимает это во внимание, потому что он абсолютно позиционирован и поэтому длинный пробел удаляется.

Мы можем воспользоваться вашими условными классами, добавленными к вашему тегу <html> по шаблону и нацеливаясь только на IE7, с исправлением:

.ie7 #_atssh {
    position:relative;
}

Примечание. Вероятно, существует миллиард опечаток и грамматических ошибок, я написал их во время обеда, поэтому в будущем я вернусь к этому и исправлю их.

1 голос
/ 29 февраля 2012

Исходя из того, что я вижу (извините, IE6 или 7 не доступны), вы можете исправить это, используя position и top вместо использования отрицательных полей, таких как:

  1. Удалите margin: -57px 0 0 0; из #logo до top: 0px;. Поскольку вы уже используете position: absolute;, логотип должен быть размещен на верхнем краю экрана.

  2. Удалите margin: -47px 0 0 0; из #social-share и вместо этого добавьте position: relative; top: -47px;

Включая правильный clear или «clearfix», упомянутый JKirchartz, также может потребоваться.

1 голос
/ 29 февраля 2012

похоже, вам нужно clearfix :

.clearfix:after {
    content: ".";
    display: block;
    clear: both;
    visibility: hidden;
    line-height: 0;
    height: 0;
}

.clearfix {
    display: inline-block;
}

html[xmlns] .clearfix {
    display: block;
}

* html .clearfix {
    height: 1%;
}

добавить это к элементу, который содержит ваш плавающий элемент

0 голосов
/ 04 марта 2012

Добавьте свойство CSS zoom: 1 к <div id="social-share">, header-wrapper или inner-border.

Мне нравится, как режим причуд объясняет проблему hasLayout, которая является специфической проблемой IE6 и IE7: http://www.satzansatz.de/cssd/onhavinglayout.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...