2012-03-13 3 views
0

Перед тем, как объяснить ...Как определить маржу (CSS) вокруг абсолютно позиционированного, плавающего элемента?

Это HTML часть:

<div class="HeadingTabs"> 
    <ul> 
     <li><a href="http://google.com" class="TabLink">Google</a></li> 
    </ul> 
    <div class="TitleTab">This is some very very long title. This is some very very long title. This is a very long title.</div> 
</div> 

Это CSS часть:

.HeadingTabs { 
    display: block; 
    padding: 8px 8px 8px 2px; 
    margin: 0; 
    border: 0; 
    background: transparent; 
} 

.HeadingTabs ul { 
    display: inline; 
    margin: 0 0 0 10px; 
    float: right; 
    position: absolute; 
    bottom: 0; 
    right: 8px; 
} 

.HeadingTabs li { 
    display: inline; 
    margin: 0; 
} 

.TitleTab { 
    margin: 0; 
    display: inline; 
    font-weight: bold; 
    text-decoration: none; 
    padding: 5px 10px; 
    line-height: 2.6; 
    white-space: nowrap; 

/* I haven't included the styling info like 
borders and background to avoid unnecessary 
distractions in code. */ 

} 

Теперь ... как вы можете видеть , элемент ul имеет плавающее право и абсолютно расположен в нижнем правом углу родительского div. Это то, что я имел в виду, когда я сказал «абсолютно позиционированный, плавающий элемент».

Невзирая на то, что это дает мне преимущество, я не могу предотвратить заголовок (<div class="TitleTab">), выступающий в него. Изображение, приведенное ниже, должно быть понятным.

Imgur

Что мне не хватает?

Очки примечания:

  • Я не могу изменяющие HTML. Мой единственный путь - это CSS.
  • Я хочу, чтобы заголовок обернулся вокруг элемента ul. Таким образом, я не могу использовать ширину.
  • Я использую position: absolute;, потому что я хочу, чтобы элемент ul оставался в нижней части div прямо над содержимым div (только обрезание на изображении).

PS: Я не очень разбираюсь в CSS.

+0

После того, как вы используете 'положение: absolute', элемент будет выведен из потока документов. Выровняйте абсолютное позиционирование и просто используйте поплавок. –

+0

@DavidKolar: см. Мое редактирование. –

+0

Невозможность изменить HTML затрудняет это. Если вы знаете, сколько символов будет располагать элемент, вы можете оставить для этого место, добавив неразрывные пробелы к заголовку: '.TitleTab: after {content:" \ a0 \ a0 \ a0 \ a0 \ a0 \ a0 \ a0 \ a0 \ a0 \ a0 \ a0 \ a0 \ a0 ";}' (не будет работать в IE7). Вам также нужно будет удалить «белое пространство: nowrap;», как заявил Джонни Крейг. –

ответ

2

Функция absolute:position предназначена для защиты.

вы должны попробовать плавающие элементы, а не без абсолюта: позиция

.HeadingTabs ul { 
    margin:10px; 
    float: right; 
} 


.TitleTab { 
    float:left; 
    margin: 0; 
    font-weight: bold; 
    text-decoration: none; 
    padding: 5px 10px; 
    line-height: 2.6; 
    white-space: nowrap; // you need to remove no wrap, so it wraps instead of cuts off 
} 
+0

См. Мое редактирование. Я добавил некоторые моменты, которые должны сделать его более ясным. –

+0

, если '.HeadingTab' имеет ту же высоту, что и' ul', он должен оставаться внизу, как вы хотите. к сожалению, у css нет 'float: bottom right;' .. если заголовок и список не могут иметь одинаковую высоту, потому что он изменяет высоту в зависимости от длины текста, я не могу думать о способе сохранить список в снизу без изменения html и используя таблицу.если они могут быть одинаковой высоты, просто установите высоты в css 'height: 40px;' –

+0

, вы также можете использовать javascript (если это возможно) для установки максимального количества символов в '.TitleTab', чтобы он выглядел так: 'Это очень длинное название, это ...' –

Смежные вопросы