2013-09-18 3 views
0

Пожалуйста, смотрите в JS Fiddle demo:CSS таблицы внутри абсолютного DIV

HTML:

<div class="r"> 
    <div class="e_1">xxx</div> 
    <div class="e_2"> 

     <div class="e_c" > 

      <table class="e_c"> 
       <tr> 
        <td>dsdssdsds</td> 
       </tr> 
       <tr> 
        <td>ssss</td> 
       </tr> 
      </table> 

     </div> 
    </div> 
</div> 

CSS:

.r { 
    position: relative; 
} 

.e_1 { 
    position: absolute; 
    top:0; 
    bottom:0; 
    height: 40px; 
    overflow: hidden; 
} 

.e_2 { 
    position: absolute; 
    top: 40px; 
    bottom: 0px; 
    border: 1px solid red; 
} 

.e_c { 
    bottom: 0; 
    left: 0; 
    position: absolute; 
    right: 0; 
    top: 0; 
} 

Как вы можете видеть в коде (это просто демо мой реальный случай), я положил таблицу внутри div.e_2. Но когда это отображается браузером, table не отображается внутри элемента .e2; Я хочу, чтобы .e_2div обернул table. И ожидаемый результат - красная рамка вокруг стола.

Как я могу это сделать, если не изменить структуру HTML?

+1

e_2 не имеет размеры. –

+2

[Не используйте 'position: absolute;'] (http://jsfiddle.net/davidThomas/BeeUY/3/). Кроме того, когда сообщение об ошибке сообщает вам отправлять код, а не * просто ссылку на JS Fiddle *, напишите свой код * здесь *; не делайте вид, что ваша ссылка на демо - это код (это не так). –

ответ

1

Если вы хотите только таблицы, чтобы иметь красную границу использовать свойство границы:

border:1px solid red; 

Так что в вашем случае будет:

.e_c { 
    bottom: 0; 
    left: 0; 
    position: absolute; 
    right: 0; 
    top: 0; 
    border:1px solid red; 
} 

Однако, если вы действительно хотите DIV для обертывания вокруг таблицы измените свойство позиции от e_c и e_2 до относительного:

.e_2 { 
    position: relative; 
    top: 40px; 
    bottom: 0px; 
    border: 1px solid red; 
} 

.e_c { 
    bottom: 0; 
    left: 0; 
    position: relative; 
    right: 0; 
    top: 0; 
} 

Это, однако, сделать DIV распространяется на всю ширину, если вы не добавите свойство дисплей к классу .e_2:

.e_2 { 
    display: inline-block; 
    position: relative; 
    top: 40px; 
    bottom: 0px; 
    border: 1px solid red; 
} 
+0

Спасибо вам большое. Я действительно хочу, чтобы div обернулся вокруг стола. Не могли бы вы объяснить мне больше, как вы знаете, использовать «относительный» в этом случае? Я не совсем понимаю этот момент :) – Tuan

+1

Это позиционирование - действительно запутанная сделка, и я постараюсь избежать ее использования, если это крайне необходимо. Абсолютное положение само по себе соответствует его родительскому элементу (если оно имеет абсолютное или относительное положение), что не идеально подходит для каждого элемента на странице. Относительное означает относительно себя, то есть вы устанавливаете положение относительно того, где оно было бы! Подробнее читайте здесь: http://css-tricks.com/absolute-positioning-inside-relative-positioning/ и http://css-tricks.com/absolute-relative-fixed-positioining-how-do-they- different/ – fditz

+0

Однако, как я уже сказал ... старайтесь избегать этого ... вашему примеру даже не нужно позиционирование (если вы попытаетесь установить все позиции вручную, вы сойдете с ума) просто представьте, что divs как маленькие ящики которые могут быть рядом или сложены.Вот ваш пример с полезными частями: http://jsfiddle.net/BeeUY/6/ – fditz

0

Смотрите обновленный скрипку здесь: http://jsfiddle.net/designingsean/BeeUY/5/

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

Пораженные участки CSS:

.e_2 { 
    position: absolute; 
    top: 40px; 
    bottom: 0px; 
} 

.e_c { 
    border: 1px solid red; 
} 
0
.e_c table.e_c { 
    border:1px solid red 
} 
Смежные вопросы