Firefox CSS: учитывая 2 деления, как я могу плавать * второй * вправо, используя статическое позиционирование? - PullRequest
2 голосов
/ 18 ноября 2008

Я работаю над сценарием пользовательского стиля Youtube , который отображает комментарии рядом с видео, чтобы вы могли смотреть видео и читать комментарии одновременно (что за чудесная идея - дух). Вы можете увидеть на скриншотах, как далеко я дошел. Это означает, что я забочусь только о Firefox, и что CSS3 идет.

Проблема, с которой я столкнулся, заключается в том, что я хочу сделать полностью изменяемый макет, и чтобы div "other videos" плавал вправо, а средний div (комментарии) растягивается, чтобы заполнить оставшееся пространство между левым div ( видео) и правильный div («другие видео»).

В переводе на CSS проблема заключается в следующем: если в этом фиксированном порядке в документе заданы элементы div "main", "rightnav" и "footer", то как сделать так, чтобы div-файл rightnav плавал вправо, а нижний колонтитул НИЖЕ ? Лучшее, что мне удалось сделать, - это абсолютно правильно расположить «rightnav» (справа: 0), но тогда нижний колонтитул опустится ниже «основного» div, а не ниже их обоих. Я посмотрел на Используйте CSS, чтобы изменить порядок DIV уже. Отрицательные значения «top» отсутствуют, поскольку они зависят от содержимого «main» div.

Вот исходный код:

<html lang="en-US">
<head>
<style type="text/css">

#main {
   border: 1px solid;
   float: left;
   margin-right: 410px;
}

#rightnav {
   background-color: yellow;
   opacity: 0.5;
   border: 1px dotted;
   width: 400px;
   float: right;
   position: absolute;
   right: 0;
}

#footer {
   clear: both;
}   

</style>
</head>
<body>

<div id="baseDiv" style="width: 100%">
  <div id="main">
  <script>for (var i=1; i<100; i++) document.write('main ');</script>
  </div>

  <div id="rightnav">
  <script>for (var i=1; i<200; i++) document.write('rightnav ');</script>
  </div>

  <div id="footer">
  <script>for (var i=1; i<100; i++) document.write('footer ');</script>
  </div>

</div>

</body>
</html>

Надеюсь, понятно, чего я хочу достичь: «нижний колонтитул» ниже двух элементов div и «основной» элемент div.

Спасибо за любые идеи.

Ответы [ 3 ]

2 голосов
/ 18 ноября 2008
#main {
   border: 1px solid;
   width: 50%;
   float: left;
}

#rightnav {
   background-color: yellow;
   opacity: 0.5;
   border: 1px dotted;
   width: 48%;
   float: right;
}

#footer {
   clear: both;
}  

это сделает

редактировать: если вы говорите, что жидкость обычно означает измерения в процентах, начните ассоциировать подобные вещи в своей голове

1 голос
/ 11 января 2010

Это может решить, а может и не решить вашу проблему, 3 столбца размером в процентах используют поплавки, содержащие размеры div по вертикали для размещения самой высокой из 3 панелей, поплавки должны отображаться в первую очередь перед средней панелью, IE с этим смешно работает макет естественно встроенный, взлом IE можно увидеть в стиле.

Это хорошо работает для многих вещей, другие элементы с центральным краем могут появляться (#mid_con) и будут складываться, единственная проблема в том, что если высота левой и правой панелей короче первой средней панели, вторая средняя панель будет занимать всю # Ширина tub_con cuz на 100% выглядит сложенной непосредственно под первым средним делителем. Это можно исправить, задав статическую ширину (#mid_con), тогда она всегда будет центрироваться и оставаться одинакового размера, независимо от того, будет ли IE центрировать его в оставшемся пространстве после плавающих объектов или центрировать его на полную ширину. если дана статическая ширина IE взломать не нужно, поиграйте с ним и получайте удовольствие. Похоже, что float не удаляет div полностью из нормального потока в IE, кажется, он просто заставляет исходящие элементы появляться и соответствовать левому и правому из двух float,

    <!--BEGIN HEADER-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US">

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

 <title>float3col demo</title>

 <style>
  #tub_con{
  display:block;
  position:relative;
  text-align:center;
  width:500px;
  height:auto;
  margin-left:auto;
  margin-right:auto;
  border: solid #000000;
  }

  #left_nav{
  display:block;
  position:relative;
  float:left;
  height:80px;
  width:30%;

  max-width:30%;
  border: solid #000000;
  }
  #right_nav{
  display:block;
  position:relative;
  float:right;
  height:80px;
  width:30%;
  border: solid #000000;
  }
  #mid_cont{
  display:block;
  position:relative;
  padding-top:5px;
  margin-left:auto;
  margin-right:auto;
  height:auto;
  width:35%;
  border: solid #f86fff;
  }
  *html #mid_cont{
  display:block;
  position:relative;
  padding-top:5px;
  margin-left:auto;
  margin-right:auto;
  height:auto;
  width:100%;
  border: solid #f86fff;
  }

 </style>
</head>

<body style="text-align:center;">
<div id="tub_con">
<div id="left_nav"></div>
<div id="right_nav">
</div>
<div id="mid_cont">
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
</div>

<!--Test the stacking problem
      <div id="mid_cont">
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x 
</div>-->

<div style="clear:both;"></div>
</div>

<p style="width:100px; border:solid #000000; margin-left:auto; margin-right:auto;">
x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
</p>
</body>
1 голос
/ 18 ноября 2008

Тебе не нужна позиция: абсолютная; на правой руке div, ни справа: 0; позиционирование. Плавающий div справа рядом с другим плавающим влево (и с полем, установленным, как у вас), они должны заканчиваться по обе стороны от окна браузера с левым div, расширяющимся, чтобы заполнить доступное пространство (кроме 10-пиксельного промежутка, созданного ваша наценка). Когда вы «абсолютно» позиционируете объект, вы фактически удаляете его из обычного потока документа, и он больше не будет занимать никакого пространства (и при этом он не будет «выталкивать» другие объекты вокруг). Я подозреваю, что просто удалив позиционирование из правого div, сохраняя при этом: оба; в нижнем колонтитуле исправит вашу проблему. Вам также может понадобиться поменять местами порядок деления левой и правой руки в исходном коде, чтобы float: right; предмет приходит до поплавка: слева; вещь. Удачи!

P.S. Меня всегда раздражало, что вы не можете одновременно смотреть видео и читать комментарии на YouTube!

...