H1 слева, "кнопки" справа, выровнены по вертикали

Я пытаюсь отобразить на одной строке:

  • элемент H1, выровненный слева от содержащего поля
  • несколько "кнопок" (элементы здесь) выровнены справа от содержащего поля
  • все на одной базовой линии

можно ли это сделать с минимальной разметкой (т. е. без элементов обертки) и без необходимости устанавливать точные высоты, высоты линий, вершины полей и т. д.

<div id="block1">
    <h1>What a great title</h1>
    <a href="javascript:void(0)">This link can kill you</a>
    <a href="javascript:void(0)">Click if you dare</a>
</div>

скрипка здесь показывает, что Я чувствую, что два несовместимых направления (встроенные блоки, и вы не можете выровнять вправо против float вправо, и вы не можете выровнять по вертикали): http://jsfiddle.net/GlauberRocha/bUsvX/

есть идеи?

5 ответов


у вас есть потенциальная проблема с этим макетом - что делать, если ваш H1 слишком длинный, и поэтому кнопки? Они столкнутся друг с другом. Из - за этого не будет простого CSS - CSS не делает такую магию-это должно было бы подразумевать какое-то решение вышеуказанной проблемы.

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

<div style="position: relative;">
    <h1 style="position: absolute; left: 0; top: 0">What a great title</h1>
    <div style="position: absolute; right: 0; top: 0; text-align: right">
        <a href="javascript: void(0)">This link can kill you</a>
        <a href="javascript: void(0)">Click if you dare</a>
    </div>
</div>

если вы действительно боитесь, что заголовок и якорный контейнер могут работать в каждом другое в зависимости от сгенерированного контента, вы можете использовать CSS max-width и overflow свойства, чтобы ограничить их содержащие поля некоторыми разумными значениями. Переполненный контент будет скрыт, но, по крайней мере, макет не сломается визуально. Я предполагаю, что следующая модификация вышеуказанного кода (простите дубликат) будет служить цели:

<div style="position: relative;">
    <h1 style="position: absolute; left: 0; top: 0; max-width: 50%; overflow: hidden">What a great title</h1>
    <div style="position: absolute; right: 0; top: 0; text-align: right; max-width: 50%; overflow: hidden">
        <a href="javascript: void(0)">This link can kill you</a>
        <a href="javascript: void(0)">Click if you dare</a>
    </div>
</div>

чтобы закончить, ты не может достигните этого, используя простую комбинацию свойств CSS, потому что с CSS (и HTML), контент течет слева направо и сверху вниз, или он становится абсолютно или фиксированным, что прерывает поток. Во всяком случае, он не хочет оставаться на одной линии, и вы, как дизайнер макета, остаетесь с разрешением двусмысленностей, которые такой макет будет вводить, например, что делать, когда два поезда, идущие с каждого направления, сталкиваются друг с другом: -)


Я сделал это на своем сайте довольно давно: h2 слева и кнопка справа. Снимок экрана: cl.ly / изображение / 3K3i412F0M2t

код:

<div id="side_bar" class="clearfix">
  <h2 style="float: left;">Charity Map</h2>
  <button class="btn btn-primary" style="float: right; position: relative; top: 10px; right: 10px;">Submit</button>
</div>

трудно достигнуть без всех оборачивая элементов или фиксированных значений...

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

  • выровняйте свои ссылки с "display: block; float:right" вправо.
  • теперь установите "line-height: 40px;" как для заголовка, так и для ссылок

должно работать, но только тогда, когда размер заголовка не меняется....


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

#block3 {
  display: table;
  width: 100%;
  box-sizing: border-box;
}

#block3 > * {
  display: table-cell;
}

#block3 > *:last-child {
  text-align: right;
}

JSFiddle: http://jsfiddle.net/bUsvX/39/

Если вы хотите, чтобы кнопки были строго выровнены правильно, я думаю, что это решение требует другого элемента для их обертывания:

JSFiddle: http://jsfiddle.net/bUsvX/40/


у меня была та же проблема.. Добавить display:inline к h1, затем для кнопок:float:right; display:inline;

пример (с использованием Twitter Bootstrap):

<h2 style="display:inline">Users</h2>

<a href="users.xls"><i class="icon-download-alt"></i>XLS</a>

<form style="display:inline; float:right;">
   <input type="text" class="input-medium search-query" name="search">
   <button class="btn" type="submit">Search</button>
</form>