Подтвердить что ты не робот

Почему разные браузеры отображают один и тот же HTML по-разному?

Это html-страница:

<html>
<head>
<title>
Frame Set
</title>
<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
<link rel="stylesheet" href="frame.css" type="text/css" media="screen" />

<script language="JavaScript" type="text/javascript">
$(document).ready(function() {
    var winSize = $(window).width();
    var margin = (winSize-1000)/2;;
    $('#main').css({'margin-left':margin,'margin-right':margin});  
    }
)
$(function() {
  $(".frame").each(function() {
     var width = ($(this).find('.h').width()), 
         height = $(this).find('.l').height(),
         pad = $(this).find('.h').position().left,
         actWidth = width + 10,
         nHeight = height - (height * 2),
         rLeftMargin = actWidth - 1,
         bWidth = actWidth;

    $(this).find('.r').css({'margin-top':nHeight, 'margin-left':rLeftMargin, 'height':height});
    $(this).find('.h').css({'height':25});
    $(this).find('.b').css({'width':bWidth, 'margin-top':0});
  });
});
</script>
</head>
<body>
<div id="main" align="center" style="width:1000px; height:100%; text-align:left;">
    <div id="inner1" style="width:100%; height:20%; float:top; margin-bottom: 20px;">
        <div id="inner11">
            <div class="frame">
                <div class="h" style="width:100%">Header</div>
                <div class="l" style="height:93%"></div>
                <div class="r"></div>
                <div class="b"></div>
            </div>
        </div>
    </div>
    <div id="inner2" style="width:100%; height:60%;">
        <div id="inner21" style="width:69%; float:left; margin-left: 1px; margin-right: 1px;">
            <div class="frame">
                <div class="h" style="width:100%">Left Frame</div>
                <div class="l" style="height:93%"></div>
                <div class="r"></div>
                <div class="b"></div>
            </div>
        </div>
        <div id="inner22" style="width:29%; float:right; margin-left: 1px; margin-right: 1px;">
            <div class="frame">
                <div class="h" style="width:100%">Right Frame</div>
                <div class="l" style="height:93%"></div>
                <div class="r"></div>
                <div class="b"></div>
            </div>
        </div>
    </div>
    <div id="inner3" style="width:100%; height:20%; float:bottom; margin: 2px 2px 2px 2px;">
        <div id="inner23">
            <div class="frame">
                <div class="h" style="width:100%">Footer</div>
                <div class="l" style="height:93%"></div>
                <div class="r"></div>
                <div class="b"></div>
            </div>
        </div>
    </div>
</div>
</body>
</html>

Это вывод Mozilla:

alt text

Это вывод IE8:

alt text

В чем проблема?

4b9b3361

Ответ 1

Как исправить эту страницу

Позвольте немного помочь вам...

Использовать Doctype

См. ответ @Topera

Чтобы сделать выравнивание по центру

Пожалуйста, не используйте

var winSize = $(window).width();
var margin = (winSize-1000)/2;;
  $('#main').css({'margin-left':margin,'margin-right':margin});  
}

Вместо этого используйте свойство CSS margin: 0 auto. Как правило, всегда используйте CSS-решение вместо Javascript, где это возможно.

Чтобы создать столбцы с одинаковой высотой

См:
http://www.positioniseverything.net/articles/onetruelayout/equalheight
http://matthewjamestaylor.com/blog/equal-height-columns-cross-browser-css-no-hacks

Используйте правильную терминологию и лучшее имя класса

Чтобы избежать путаницы, пожалуйста, не обращайтесь к элементам без рамки в качестве кадров. Дополнительные сведения о кадрах см. В разделе http://reference.sitepoint.com/html/elements-frames-windows

Дайте своим классам значимые имена. Причиной этого является то же самое для любого другого языка - так что, когда вы вернетесь через три месяца позже, вы не будете царапать голову в классах с именами l, r и h.

Использовать семантически допустимый HTML

Атрибуты align и text-align официально устарели; см. вышеприведенное решение о выравнивании объектов по центру и свойства свойства CSS text-align.

HTML-элементы придают смысл содержимому, которое они обернуты. Заголовки, которые у вас есть для каждого "фрейма", должны быть помечены заголовками <h2> или <h3> вместо этого, а div - это общие элементы уровня блока без значение, h1 to h6 набор элементов (из-за отсутствия лучшего слова) сообщает браузеру, что текст, содержащийся в них, является заголовками.

CSS Box Model

Пожалуйста, взгляните на то, как модель коробки и поплавки работают в CSS. bottom и top являются недопустимыми значениями для свойства CSS float.

http://dev.opera.com/articles/view/30-the-css-layout-model-boxes-border/#cssboxmodels
http://reference.sitepoint.com/css/boxmodel
http://www.smashingmagazine.com/2007/05/01/css-float-theory-things-you-should-know/

Реальная проблема здесь

не работает с браузерами. IE8 на удивление ошибочно ведет себя намного меньше, чем его предшественники. Попробуйте лучше писать HTML и CSS.

Ответ 2

Вы пропустили тег <!DOCTYPE> в первой строке страницы.

Пример:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Если вы этого не сделаете, IE активирует quirks mode, и произойдет очень странное. Когда браузер активирует режим quirks, многие вещи меняются, как box model.

ПРИМЕЧАНИЕ. У многих браузеров есть режим quirks, а не только IE (я знаю, что Firefox тоже).


Подробнее о режиме quirks.

Список doctypes.

Ответ 3

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

Используйте CSS везде, где это возможно, поскольку браузеры, как правило, лучше всего подходят, когда находятся под строгими правилами стилей. Помимо этого, удачи и добро пожаловать в веб-разработчик:)

Ответ 4

  • используйте doctype: список на момент, который я использовал бы → XHTML 1.0 Строгий, XHTML 1.1, HTML5 (если нет вы не знакомы с проблемы, которые могут возникнуть

  • используйте reset: eric meyers reset для xample является хорошим

  • используйте clearfix (и узнайте, когда его использовать), например новое clearfix от Джеффа Старра

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

Ответ 5

Чтобы быть кросс-браузером, вам нужно несколько инструментов, большой опыт и, в случае IE, много удачи. В дополнение к другим ответам здесь вы можете использовать Yahoo CSS, который дает вам общую базу (все браузеры не имеют одинаковых значений по умолчанию): http://developer.yahoo.com/yui/reset/