Встроенный блок на промежутке

Я ожидал, что два тега span в следующем примере будут отображаться рядом друг с другом, вместо этого они будут отображаться один под другим. Если я установлю width класса span прямо на 49%, они будут отображаться рядом друг с другом. Я не могу понять, почему правый промежуток сдвигается вниз, как будто в правом промежутке есть какой-то невидимый padding/margin, из-за чего он занимает более 50%. Я пытаюсь сделать это без использования таблиц HTML. Есть идеи?

* {
  margin: 0;
}

html,
body {
  margin: 0;
  padding: 0;
  height: 100%;
  width: 100%;
  border: none;
}

div.header {
  width: 100%;
  height: 80px;
  vertical-align: top;
}

span.left {
  height: 80px;
  width: 50%;
  display: inline-block;
  background-color: pink;
}

span.right {
  vertical-align: top;
  display: inline-block;
  text-align: right;
  height: 80px;
  width: 50%;
  background-color: red;
}
<html>

<head>
  <title>Test Page</title>

</head>

<body>
  <div class='header'>
    <span class='left'>Left Span 50% width</span>
    <span class='right'>Right Span 50% width</span>
  </div>
</body>

</html>

Спасибо за объяснение. float:left прекрасно работает с ожидаемыми результатами в FF 3.1. К сожалению, в IE6 правый диапазон отображает 50% от 50%, фактически давая ему ширину 25% окна браузера. Установка его ширины на 100% дает желаемые результаты, но ломается в FF 3.1, который находится в режиме соответствия стандартам, и я это понимаю. Было непросто заставить его работать как в FF, так и в IE 6, не прибегая к хакам и не используя несколько листов CSS.

Зачем нужна поддержка IE6? ie6nomore.com

jrummell 02.11.2011 16:19
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
7
1
18 589
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

float: left;

Попробуйте добавить это в span.left

Это заставит его плавать влево (как предполагает синтаксис).


Я ни в коем случае не эксперт по CSS, поэтому, пожалуйста, не принимайте это как неоспоримый факт, но я считаю, что когда что-то плавает, это не имеет значения для вертикального положения вещей под ним.

Если вы переместите span.right вправо, а затем добавьте текст под ними, вы должны получить некоторые интересные результаты, чтобы остановить эти «интересные результаты», вы можете использовать «clear: left / right / both», что приведет к блоку с четким стилем чтобы быть под чем-нибудь плавал влево / вправо / в обе стороны. У W3Школы есть страница об этом свойстве.

И добро пожаловать в Stackoverflow.

Спасибо за быстрый ответ: добавление float: left заставило 2 пролета рендериться рядом друг с другом. Однако я не понимаю, почему пролет опускается без поплавка. Что его толкает?

rams 29.08.2008 20:20

Высота пролета - вот почему он толкнул меня вниз, и вполне могла быть вашей причиной.

Hanna 09.05.2013 02:32

Мне не нравится этот хак, но, похоже, он работает как в Firefox, так и в IE6:

span.right {
  vertical-align:top; 
  display:inline-block;
  text-align:right;
  height:80px;
  width:50%;
  *width:100%;
  background-color:red;
}

Обратите внимание на *width: 100%, который, кажется, удовлетворяет требованиям IE6 и игнорируется Firefox.

Это связано с тем, что inline и inline-block включают пробелы (в вашем случае разрыв строки) между элементами. В вашем случае общая ширина элементов составляет 50% + 50% + пробел> 100%.

Вы должны либо поместить два элемента в одну строку в вашем HTML-документе (без пробелов).

<div class='header'>
    <span class='left'>Left Span 50% width</span><span class='right'>Right Span 50% width</span>
</div>

Или используйте HTML-комментарии

<div class='header'>
        <span class='left'>Left Span 50% width</span><!--
     --><span class='right'>Right Span 50% width</span>
</div>

Я сам предпочитаю последнее.

Другие вопросы по теме