2016-07-12 2 views
1

У меня есть два div элементов оформленных со следующими свойствами:элементов не отображаются встроенные

.elem1 { 
    width: 47.5%; 
    margin-right: 2.5%; 
    display: inline-block; 
} 

.elem2 { 
    width: 47.5%; 
    margin-right: 2.5%; 
    display: inline-block; 
} 

Примечания: Если я уменьшить маржу до 2.25%элементы расположены в линии, когда родитель являетсяbody. Если тогда я оберну их в другой div, который уже, второй элемент снова разрывается на следующую строку.

С общей суммы в 100% из родителя widthпочему элементы не расположены в линию и как я могу решить эту проблему, так, что они расположены встроенный во все времена?

я принципиально хочу поплавка их без использования свойства float.

Вы можете проверить следующие скрипки для лучшего визуального представления:

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

+0

См: http://stackoverflow.com/questions/10698636/ – jlynch630

ответ

0

После некоторых исследований я оказался в пользу использования отрицательный запас так, как в настоящее время это наиболее поддерживаемый способ в отличие от других хороших, рабочих растворов, предоставленных (font-size: 0;, display: flex).

Для того, чтобы сделать его работу, я добавил следующее:

.elem2 { 
    margin-left: calc(2.5% - 4px); 
} 
1

display: inline-block; есть пробел после этого по умолчанию. Чтобы удалить его, используйте font-size: 0 для: .container

Отделы example.

* { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.container { 
 
    width: 75%; 
 
    font-size: 0; 
 
    border: 1px solid red; 
 
    margin: 0 auto; 
 
    position: relative; 
 
    display: inline-block; 
 
} 
 

 
.elem1 { 
 
    width: 47.5%; 
 
    margin-right: 2.25%; 
 
    display: inline-block; 
 
} 
 

 
.elem2 { 
 
    width: 47.5%; 
 
    margin-right: 2.25%; 
 
    display: inline-block; 
 
}
<div class="container"> 
 
    <div class="elem1" style="height: 50px; background-color: black;"></div> 
 
    <div class="elem2" style="height: 50px; background-color: black;"></div> 
 
</div>

Here большая статья об этом промежутки между строками текста.

+0

** Ваш ответ не работает **. Я хочу, чтобы разница между ними составляла ** '2.5%' **, а не ** '2.25' **. Я просто сделал это ** '2.25%' **, чтобы показать, что с меньшим размахом они были бы встроенными. –

+0

@AngelPolitis изменен на '2.5%' - все работает. https://jsfiddle.net/AleshaOleg/6ugefk4p/10 – AleshaOleg

+0

Настройка ** 'font-size' ** to **' 0' ** имеет некоторое неожиданное поведение в некоторых браузерах, например, Opera и Android. Спасибо хоть. –

2

Встроенные элементы позволяют писать обычный текст, поэтому из-за разрыва строки предполагается, что вы добавили пространство между элементами div. Это вызывает дополнительное пространство между элементами div, которое приводит к тому, что элементы div не подходят в одной строке. Обычно я добавляю комментарий между элементами, чтобы переопределить это поведение, а также служить напоминанием для себя и других, которые могут смотреть на код.

<div class="elem1" style="height: 50px; background-color: black;"></div><!-- 
    This comment is added to prevent space in-between these elements. 
--><div class="elem2" style="height: 50px; background-color: black;"></div> 
+0

Ваш ответ неожиданно работает, но я не могу изменить HTML. Мне нужно только решение CSS. –

+0

@AngelPolitis Ах, я не видел эту часть требования. – 10100111001

+0

@AngelPolitis Как установить размер шрифта тега body равным 0px? Возможно, это не идея, но что из звуков вашего вопроса, похоже, вы разрешаете пользователям иметь доступ к этим элементам, которые также не идеальны. – 10100111001

1

Если у вас есть поддержка браузера, вы можете добавить display: flex к охватывающему элементу.В этом примере я положил его на body.

body { 
 
    display: flex; 
 
} 
 

 
.elem1 { 
 
    width: 47.5%; 
 
    margin-right: 2.5%; 
 
    display: inline-block; 
 
} 
 

 
.elem2 { 
 
    width: 47.5%; 
 
    margin-right: 2.5%; 
 
    display: inline-block; 
 
}
<div class="elem1" style="height: 50px; background-color: black;"></div> 
 
<div class="elem2" style="height: 50px; background-color: black;"></div>

Он работает с третьим примером тоже. Я добавил display: flex в .container.

* { 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
.container { 
 
    width: 75%; 
 
    border: 1px solid red; 
 
    margin: 0 auto; 
 
    position: relative; 
 
    display: flex; 
 
} 
 

 
.elem1 { 
 
    width: 47.5%; 
 
    margin-right: 2.25%; 
 
    display: inline-block; 
 
} 
 

 
.elem2 { 
 
    width: 47.5%; 
 
    margin-right: 2.25%; 
 
    display: inline-block; 
 
}
<div class="container"> 
 
    <div class="elem1" style="height: 50px; background-color: black;"></div> 
 
    <div class="elem2" style="height: 50px; background-color: black;"></div> 
 
</div>

+0

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