-3

Я целый день бился головой, пытаясь заставить поплавки и очистки работать должным образом в старых версиях Internet Explorer. Я прочитал множество уроков по использованию .clear: после трюка и т.д., Но я не могу заставить что-либо работать!

У меня есть HTML, как это:

<div id="section">
  <h2>Section Title</h2>

  <label for="name">Name</label>
  <input type="text" id="name" />

  <label for="dob">Date of Birth</label>
  <input type="text" id="dob" />

  <label for="email">Email</label>
  <input type="text" id="email" />
</div>

И CSS, как это:

#section {border:solid 2px #b7ddf2; background:#ebf4fb; margin-top: 20px;}
#label{clear: left; float: left; width: 300px; margin-left: 20px; margin-bottom: 10px;}
#input{float: left; margin-bottom: 10px;}

В современных браузерах, например Opera 25, отображается следующее:

Name            [Name field]
Date of birth   [Date of birth field]
Email           [Email]

В более старых версиях Internet Explorer (6 или 7) он отображается как:

Name            [Name field] [Date of birth field] [Email field]
Date of birth
E-mail

Я стараюсь не корректировать свой HTML, кто-нибудь может мне помочь с исправлением CSS?

1 ответ1

0

То, что вы пытаетесь сделать, является плохой идеей, так как, во-первых, никто не должен прилагать столько усилий для поддержки IE6 в новом веб-приложении, а во-вторых, ваша HTML-структура не является гибкой и будет работать только в очень специфическом сценарии.

Тем не менее, мне было любопытно посмотреть, могут ли классические ошибки с плавающей точкой IE6 быть преодолены исключительно с помощью CSS и без дополнительного HTML, и на удивление это кажется возможным. Хитрость заключается в том, чтобы использовать CSS-выражения IE для вставки элементов <br> на страницу после текстовых полей.

Следующий код работал для меня в IETester при эмуляции IE6 и IE7:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <style type="text/css">
            #section {border:solid 2px #b7ddf2; background:#ebf4fb; margin-top: 20px; display: block; zoom: 1}
            label{clear: left; float: left; width: 300px; margin-left: 20px; margin-bottom: 10px;}
            input{
                float: left;
                margin-bottom: 10px; 
                *zoom: expression(this.runtimeStyle.zoom="1", 
                    this.parentNode.insertBefore(document.createElement("br"), this.nextSibling).style.cssText="clear:both;font:0/0 serif");
            }
        </style>
    </head>
    <body>
        <div id="section">
            <h2>Section Title</h2>

                <label for="name">Name</label>
                <input type="text" id="name" />


                <label for="dob">Date of Birth</label>
                <input type="text" id="dob" />


                <label for="email">Email</label>
                <input type="text" id="email" />

        </div>
    </body>
</html>

На основании информации с этой страницы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .