Разрыв между элементами ng-repeat в Angular
У меня проблема с несколькими элементами ng-repeat
при показе элементов div
как inline-block
. Существует странный зазор между элементами, где заканчивается один ng-repeat
, а следующий начинается, как показано на рисунке:
![gap when using ng-repeat]()
Я создал plunk, чтобы продемонстрировать это поведение:
Почему это происходит и как удалить пробел?
Ответы
Ответ 1
Отметьте этот plunk
Существует взломать пространство между встроенными элементами, которые появляются при разрыве строки.
<div class="red" ng-controller="TestCtrl">
<div class="blue number" ng-repeat="number in array1 track by $index">{{number}}</div><!--
--><div class="green number" ng-repeat="number in array2 track by $index">{{number}}</div><!--
--><div class="teal number" ng-repeat="number in array3 track by $index">{{number}}</div>
</div>
Вы можете узнать больше о других хаках здесь.
Ответ 2
Это связано с тем, как определяется класс .number
в вашем css. Если вы измените его так, чтобы он содержал float: left
, вы избавитесь от лишнего пробела.
.number {
width: 20px;
height: 20px;
display: inline-block;
color: white;
text-align: center;
float: left;
}
Вы можете увидеть мой обновленный plunkr здесь
Ответ 3
Я знаю, что это довольно странно, но пробелы (crlf, spaces...) между вашими встроенными блоками div делают пространство.
Если вы удалите их, пробел исчезнет. (демонстрация plunker)
Я не мог найти никакой ссылки для объяснения, но я предполагаю, что, поскольку символы находятся между встроенными блоками, это интерпретируется как пространство, как если бы блок-элементы были фактически встроенными (например, интервалы).
<body ng-app="testRepeat">
<div class="red" ng-controller="TestCtrl">
<div class="blue number" ng-repeat="number in array1 track by $index">{{number}}</div><div class="green number" ng-repeat="number in array2 track by $index">{{number}}</div><div class="teal number" ng-repeat="number in array3 track by $index">{{number}}</div>
</div>
</body>
Ответ 4
Это вызвано пробелом между элементами <div>
. Существуют различные способы решения этой проблемы, как и другие ответы. Мой предпочтительный макет:
<div class="blue number" ng-repeat="number in array1 track by $index">{{number}}</div
><div class="green number" ng-repeat="number in array2 track by $index">{{number}}</div
><div class="teal number" ng-repeat="number in array3 track by $index">{{number}}</div>
Но другие предложения действительны.
Другой способ справиться с этим, не беспокоясь о HTML, - установить размер шрифта в контейнере равным 0, чтобы пустое пространство не отображалось.
http://plnkr.co/edit/wXKl61lyiqdONbChYI9o?p=preview
Недостатком этого подхода является то, что вы не можете использовать процентные размеры для содержащихся в нем элементов шрифтов, и вы должны установить их явно.