Как центрировать разделы с фиксированной позицией и динамической шириной [прилагаемая схема]?

#css #centering #css-position

#css #центрирование #css-position

Вопрос:

У меня есть div с фиксированной шириной, относительно расположенным и центрированным #content (показан в виде внешнего красного прямоугольника ниже). В верхней части этого раздела мне нужно разместить два раздела заголовка с фиксированной позицией, один слева от центра и один справа от центра (центральная линия показана красной пунктирной линией).

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

Я думал, что смогу добиться эффекта с помощью чего-то подобного, но не повезло:

 #leftheader { position:fixed; top:0; left:50%; margin-right:10px; }
#rightheader { position:fixed; top:0; right:50%; margin-left:10px; }
  

Схема:

схема

Любая помощь приветствуется. Спасибо!

Ответ №1:

Вот решение, которое я придумал. Для достижения желаемого используется всего 4 контейнера. Просто удалите цвета фона из leftHold и rightHold

HTML

 <div id="leftHold">
    <div id="leftHeader">TEST1234</div>
</div>
<div id="rightHold">
    <div id="rightHeader">TEST</div>
</div>
  

CSS

 body{padding:0px;}

#leftHold{width:50%; float:left; height:40px;background:#ccc;}  
#leftHeader{ float:right; margin-right:10px; background:#ffc;}

#rightHold{width:50%; float:right; height:40px;background:#ddd;}
#rightHeader{ float:left; margin-left:10px; background:#ffc;}
  

Комментарии:

1. Для такого рода схемы с плавающей запятой слева / справа, могу ли я предложить поменять местами правый элемент с плавающей запятой на левый, т. Е.: div с плавающей запятой справа должен быть первым в коде, я считаю, что в большинстве ситуаций это работает лучше, чем «обычный» порядок кода влево / вправо.

2. Я сначала попробовал это решение из-за удобной ссылки jsfiddle. Это работает как шарм. Спасибо!

Ответ №2:

Я бы сделал это: (зная, как вы сказали, что контейнер имеет фиксированную ширину, скажем, 800 пикселей)

Расположите левый div так, чтобы правый был в центре контейнера;

Расположите правый div так, чтобы его левый был в центре контейнера;

Оба раздела должны иметь max-width . (в этом примере я убрал поля, просто чтобы вы поняли мою точку зрения).

Итак:

 #leftheader {
   position: absolute;
   top:0;
   right:400px;
   max-width: 400px;
 }

#rightheader {
   position: absolute;
   top:0;
   left:400px;
   max-width: 400px;
 }
  

Комментарии:

1. Это не работает при изменении размера обычного документа, но если контейнер имеет фиксированную ширину, я полагаю, это выполнимо.

2. На самом деле я отклонил это, основываясь на том, что я считал ошибкой (изменение размера стандартного документа с помощью вашего кода приводит к странным результатам — jsfiddle.net/267up )… но, как я уже сказал, если это фиксированная ширина, это будет работать. Я не могу отменить свой голос, поэтому я меняю его на голосование «за», хотя я нахожу свое решение более универсальным [пожимаю плечами].

3. @Dutchie432 в OP сказано, что контейнер имеет фиксированную ширину, кроме того, max-width я предлагаю просто отказоустойчивый вариант, потому что у контейнера могло быть скрытое переполнение.

4. …правильно — как я уже сказал… голосование против было «основано на том, что я считал ошибкой»

5. В итоге я использовал решение Dutchie432, но это тоже выглядит неплохо. Однако, разве позиция не должна быть «фиксированной», а не «абсолютной» для достижения фиксированного поведения?