Элемент span с шириной и разрывом строки перед - PullRequest
4 голосов
/ 27 марта 2019

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

Пример:

<span>1</span> Some text. <span>2</span> Some text.

Я хочу, чтобы промежутки имели заданную ширину и разрыв строки до этого.

Пример:

 1 Some text.

 2 Some text.

«display: block» на промежутках допускает свойство ширины, но также создает разрыв после каждого промежутка.

«display: inline-block» позволяет использовать свойство width, но я не могу понять, как создать разрыв строки до этого.

Оставляя промежутки как «display: inline», допускается разрыв строки перед каждым промежутком (используя :: before content). Однако вы не можете назначить свойство width для встроенных элементов (насколько я видел).

Ответы [ 2 ]

5 голосов
/ 27 марта 2019

Чтобы достичь ожидаемого результата, используйте ниже опцию содержимого и пробела

span::before {
  content: "\A";
  white-space: pre;
}
<span>1</span> Some text. <span>2</span> Some text.

codepen - https://codepen.io/nagasai/pen/RdmxrR

0 голосов
/ 27 марта 2019

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

.wrapper {
  display:grid;
  grid-template-columns:30px 1fr;
}

span {
 text-align:center;
 outline:1px solid green;
}
<div class="wrapper">
<span>1</span> Some text. <span>2</span> Some text.
</div>

Еще одна идея с flexbox и display:contents (https://caniuse.com/#feat=css-display-contents)

.wrapper {
  display:flex;
  flex-wrap:wrap;
  padding-left:10px;
}

span {
 display:contents;
 outline:1px solid green;
}
/*create line break*/
span:before {
  content:"";
  flex-basis:100%;
}

/*control the width*/
span:after {
  content:"";
  width:20px;
}
<div class="wrapper">
<span>1</span> Some text. <span>2</span> Some text.
</div>

Вот еще один способ использования счетчика:

body {
 counter-reset: count;
}

span {
  counter-increment: count;
  font-size:0; /*remove default content*/
}
/*add line break*/
span::before {
  content: "\A";
  white-space: pre;
}

/*add content with counter*/
span::after {
  content:counter(count);
  font-size:initial;
  display:inline-block;
  width:30px; /*control the width*/
  text-align:center;
}
<span>1</span> Some text. <span>2</span> Some text.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...