IE CSS Float Проблема - PullRequest
       4

IE CSS Float Проблема

2 голосов
/ 18 июня 2009

Вывод этого кода выглядит примерно одинаково в FF, Chrome и Safari в Windows. В IE7 это выглядит странно.

Для всех других браузеров div-рамка точно оборачивает div холста, даже если в кадре есть div 24X24, но вне холста. IE7 оставляет дополнительное пространство в кадре над холстом для div-блока "blue-box". После того, как я спустился на воду, я подумал, что пространство, которое он занимал бы, рухнуло. Такое поведение я вижу в других браузерах.

Есть ли какая-нибудь хитрость в том, чтобы заставить IE7 свернуть пространство, как другие парни?

Редактировать: Просто, чтобы дать представление о том, что этот пример должен представлять. Предполагается, что он представляет собой встроенный виджет. «Холст» - это то, где принадлежит контент. «Рамка» - это то, что хостинг использует для управления внешним видом и поведением между виджетом и остальной частью страницы. Div-блоки red-box и blue-box представляют элементы управления в виджете. Красное поле - это элемент управления, помещающий туда мой код виджета. Синяя рамка представляет элемент управления, добавленный рамкой (возможно, дескриптор, позволяющий перемещать виджет по странице)

Вот полный образец

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
<head>
<title>CSS Positioning</title>
<style type="text/css">
#frame {
  position: relative;      /* so subelements can be positioned             */
  width: 400px;            /* an arbitrary width                           */
  border: 1px solid black; /* a border so you can see it                   */
}
#canvas {
  position: relative;      /* so subelements can be positioned             */
  width: 400px;            /* an arbitrary width                           */
  border: 1px solid black; /* a border so you can see it                   */
}
#blue-box{
  position: relative;      /* so I can position this element               */
  float: right;            /* I want this element all the way to the right */
  width: 24px;             /* set size of eventual graphic replacement     */
  height: 24px;
}
#red-box{
  position: relative;      /* so I can position this element               */
  width: 24px;             /* set size of eventual graphic replacement     */
  height: 24px;
}

</style>
</head>
<body>

<div id="frame">
  <div id="blue-box">blue</div>
  <div id="canvas">
    <div id="red-box">red</div>
  </div>
</div>

</body>  
</html>

Дополнительный пример для Эмили ================================================ =========

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
<head>
<title>CSS Positioning</title>
<style type="text/css">
* {
  margin: 0;
  padding: 0;
}
#one {
  background-color: red;
  float: right;
}
#two {
  background-color: blue;
  border: 1px solid black;
}

</style>
</head>
<body>

<div id="one">one</div>
<div id="two">two</div>

</body>  
</html>

Ответы [ 5 ]

1 голос
/ 18 июня 2009

#frame содержит #canvas с шириной 400px и #blue-box с шириной 24px.

#frame должен иметь ширину не менее 424 пикселей (может потребоваться больше ... зависит от того, какой отступ у ваших элементов), но #frame имеет ширину только 400 пикселей.

Попробуйте изменить ширину #frame до 430px, чтобы получить оба поля на одной строке. В зависимости от того, какой отступ удален сброс css, вы можете уменьшить ширину #frame.


Тогда вам нужно поместить #blue-box внутрь #canvas

<div id="frame">
  <div id="canvas">
    <div id="blue-box">blue</div>
    <div id="red-box">red</div>
  </div>
</div>

Плавающие дивы не перекрываются и не «доходят до дивов под ними». Вот хорошая статья о CSS Floats


Это один раз, когда я рекомендую использовать абсолютное позиционирование. position: absolute удаляет элемент из потока документа - так же, как вы хотите с #blue-box.

#frame {
  position: relative;      /* so subelements can be positioned             */
  width: 400px;            /* an arbitrary width                           */
  border: 1px solid black; /* a border so you can see it                   */
}
#canvas {
  width: 400px;            /* an arbitrary width                           */
  border: 1px solid black; /* a border so you can see it                   */
}
#blue-box{
  position: absolute;      /* so I can position this element               */
  right: 0;                /* I want this element all the way to the right */
  top:0;
  width: 24px;             /* set size of eventual graphic replacement     */
  height: 24px;
}
#red-box{
  width: 24px;             /* set size of eventual graphic replacement     */
  height: 24px;
}

<div id="frame">
   <div id="blue-box">blue</div>
  <div id="canvas">
    <div id="red-box">red</div>
  </div>
</div>
1 голос
/ 18 июня 2009

Может быть проблема с размерами в div "frame" и "canvas". Похоже, они оба имеют одинаковый размер плюс размер границы (который добавляется к общему размеру элемента). Попробуйте не указывать размер для вашего div "canvas", но оставьте поле для правильного размещения его с помощью "blue-box" div.

Если вы сомневаетесь, сбросьте ваши элементы, установив для вашего поля / отступа 0 один сомнительный элемент. Между браузерами может возникнуть интервал по умолчанию, если они не определены.

Кроме того, я не верю, что здесь требуется «позиция: родственник».

Acorn

1 голос
/ 18 июня 2009

Я сталкивался с этой проблемой раньше и изо всех сил стараюсь вспомнить, что с ней случилось. Я думаю, вам нужно снять position: relative с #blue-box.

0 голосов
/ 18 июня 2009

вы пытались удалить пробелы в коде. ie7 может быть смешной про пустое пространство.

<div id="frame"><div id="blue-box">blue</div><div id="canvas"><div id="red-box">red</div></div></div>

Josh

0 голосов
/ 18 июня 2009

IE добавляет некоторые дополнительные отступы и поля. Вам следует использовать файл reset.css и повторить попытку.

Как правило, IE не работает так, как должен работать браузер, поэтому вам может потребоваться создание специфических для IE таблиц стилей.

<!--[if IE]><link rel="stylesheet" type="text/css" href="/public/stylesheets/ie.css" /><![endif]-->

<!--[if IE 6]><link rel="stylesheet" type="text/css" href="/public/stylesheets/ie6.css" /><![endif]-->

<!--[if IE 7]><link rel="stylesheet" type="text/css" href="/public/stylesheets/ie7.css" /><![endif]-->

EDIT

Холст для обертывания - тот, что испортил вещи, потому что он того же размера, что и рамка. Если вы делаете:

#frame {
  position: relative;      /* so subelements can be positioned             */
  width: 460px;            /* an arbitrary width                           */
  border: 1px solid black; /* a border so you can see it                   */
}

Устраняет проблему. Вам просто нужно настроить ширину, чтобы получить желаемый размер.

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

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