2013-05-21 4 views
24

У Inline Blocks это странное пространство между ними. Я мог бы жить с ним, вплоть до того момента, когда, если я загружу больше контента с помощью AJAX Call, крошечное пространство исчезнет. Я знаю, что здесь что-то не хватает.Дисплей: встроенный блок - что это за пространство?

div { 
    width: 100px; 
    height: auto; 
    border: 1px solid red; 
    outline: 1px solid blue; 
    margin: 0; 
    padding: 0; 
    display: inline-block; 
} 

http://jsfiddle.net/AWMMT/

Как сделать расстояние между последовательными в Инлайн блоков?

+3

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

+3

http://css-tricks.com/fighting-the-space-between-inline-block-elements/ – cimmanon

+0

@cimmanon Лучший ответ указывает на css-трюки ! Благодарю. – Norris

ответ

28

Пространство в HTML. Существует несколько возможных решений. От лучшего к худшему:

  1. Удалить реальное пространство в HTML (в идеале ваш сервер может сделать это для вас, когда файл обслуживается, или, по крайней мере, ваш шаблон ввода может быть разнесенным соответствующим образом) http://jsfiddle.net/AWMMT/2/
  2. Использования float: left вместо display: inline-block, но это имеет нежелательные эффекты на т он высота: http://jsfiddle.net/AWMMT/3/
  3. Установка контейнера font-size в 0 и установить соответствующий font-size для внутренних элементов: http://jsfiddle.net/AWMMT/4/ - это довольно просто, но тогда вы не можете воспользоваться относительных правил размера шрифта на внутренних элементах (percen tages, em)
+0

Я долго плавал и надеялся отобразить мои ящики как встроенные блоки, но это просто делает разметку немного ненадежной. Я имею в виду - макет может быть разрушен только из-за простого пробела. Спасибо. – Norris

+2

Большинство браузеров предлагают минимальный размер шрифта, что делает «font-size: 0» полностью ненадежным. – cimmanon

+0

Я удалил пробелы на стороне сервера и добавил явный комментарий о встроенных блоках и странном выравнивании тегов в PHP. – Norris

13

http://jsfiddle.net/AWMMT/1/

<div>...</div><div>...</div> 
      ^
       |--- no whitespace/new line here. 

ваших пространств были новые строки браузера преобразуются в «пространства» при отображении его.

Или вы могли бы попытаться взломать немного с помощью CSS:

http://jsfiddle.net/AWMMT/6/

body { white-space: -0.125em; } 
body > * { white-space: 0; /* reset to default */ } 
+0

О боже. Это все еще здесь? Я забыл об этом, так как я не использовал встроенные блоки на некоторое время. Есть ли имя для этого, поэтому я могу следить за тем, собирается ли кто-нибудь «исправить» его когда-нибудь в браузерах? Теперь я помню, почему я обычно плаваю на своей лодке. – Norris

+4

это называется 'whitespace' – Vector

+0

@Norris просто добавил метод CSS, чтобы предотвратить это расстояние здесь – bwoebi

5

Вы можете прокомментировать пробелы.

Оригинальный ответ с 2013

Как:

<span>Text</span><!-- 

--><span>Text 2</span> 

Edit 2016:

Я также как и следующий метод, в котором вы просто поставить закрывающую скобку перед следующим элемент.

<span>Text</span 

><span>Text 2</span> 
7

Там на самом деле очень простой способ, чтобы удалить пробелы из инлайн-блока, что это легко и семантический. Он называется настраиваемым шрифтом с пробелами в нулевой ширине, что позволяет сбрасывать пробелы (добавленные браузером для встроенных элементов, когда они находятся на отдельных строках) на уровне шрифта, используя очень маленький шрифт. После того, как вы объявите шрифт, вы просто измените семейство шрифтов на контейнере и снова на детей, и вуаля. Например:

@font-face{ 
    font-family: 'NoSpace'; 
    src: url('../Fonts/zerowidthspaces.eot'); 
    src: url('../Fonts/zerowidthspaces.eot?#iefix') format('embedded-opentype'), 
     url('../Fonts/zerowidthspaces.woff') format('woff'), 
     url('../Fonts/zerowidthspaces.ttf') format('truetype'), 
     url('../Fonts/zerowidthspaces.svg#NoSpace') format('svg'); 
} 

body { 
    font-face: 'OpenSans', sans-serif; 
} 

.inline-container { 
    font-face: 'NoSpace'; 
} 

.inline-container > * { 
    display: inline-block; 
    font-face: 'OpenSans', sans-serif; 
} 

Костюм по вкусу. Вот загрузка шрифта, который я только что приготовил в кузнице шрифтов, и преобразован с помощью генератора web-шрифтов FontSquirrel. Принял меня все 5 минут. Объявление css @ font-face включено: zipped zero-width space font.Это на Google Диске, поэтому вам нужно нажать «Файл»> «Загрузить», чтобы сохранить его на своем компьютере. Вероятно, вам также придется изменить пути шрифтов, если вы скопируете объявление в основной файл css.

+0

Работал как шарм. Благодаря! – melancia

+0

Серьезно самый чистый способ справиться с этой проблемой. –

1

Также вы можете сделать это так (что ИМХО, я считаю sintatically правильно)

<div class="div1">...</div> 
<div class="div1">...</div> 
. 
. 

.div1{ 
    display:inline-block; 
} 
.div1::before, div1::after { white-space-collapse:collapse; } 
+1

Можете ли вы предоставить документацию для 'white-space-collapse'? Я не считаю, что это действительная собственность. – roydukkey

+0

@roydukkey Привет! К тому времени, когда я ответил, я нашел его здесь [ссылка] (http://www.w3.org/TR/2007/WD-css3-text-2007030/#white-space-collapse). Но мне это показалось, что это все еще черновик. Свойство было добавлено как черновик CSS TextLevel 4: [link] (http://dev.w3.org/csswg/css-text-4/#white-space-collapsing). –

+0

Я вижу. Это интересно, но я хочу, чтобы решение состояло в том, чтобы браузеры не вели себя так, как в настоящее время, чтобы не иметь этого глупого дополнительного пространства. – roydukkey

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