Содержимое центра отодвигается в сторону:before

#html #css

#HTML #css

Вопрос:

Запустите фрагмент ниже … две цифры оранжевого цвета не центрированы в своих полях. Они смещаются, когда я добавляю :before содержимое. Как я могу элегантно вернуть цифру в центр (желательно без использования магических чисел).

 .container {
  background: #ededed;
  height: 4rem;
  display: flex;
  align-items: center;
  justify-content: center;
 }
 
.number {
  display: flex;
  flex-direction: row;
}

.digit:nth-last-of-type(3n):before {
  content: ",";
  right: 0.75em;
  position: relative;
  color: black;
  font-weight: bold;
 }
 
 .digit:nth-last-of-type(3n) {
  background: orange;
  }
 
 .digit {
  width: 1em;
  text-align: center;
  padding: 0.25em;
  margin: 0.5em;
  border-radius: 0.1em;
  background: white;
  color: black;
 } 
 <div class="container">
  <div class="number">
    <span class="digit">1</span>
    <span class="digit">9</span>
    <span class="digit">0</span>
    <span class="digit">1</span>
    <span class="digit">0</span>
    <span class="digit">0</span>
    <span class="digit">0</span>    
  </div>
</div> 

Комментарии:

1. Поскольку никто не объяснил, почему вам нужно позиционировать absolute: псевдоэлементы добавляются к началу или концу элемента, чтобы ваш текст с центром действительно работал правильно, если вы не хотите, чтобы псевдоэлемент занимал место, тогда вам нужно позиционировать его абсолютно

2. @Pete Да, я должен был просто прочитать значения позиций: developer.mozilla.org/en-US/docs/Web/CSS/position относительный: «пространство, отведенное для элемента в макете страницы, такое же, как если бы позиция была статической» абсолютный: «для элемента в макете страницы пространство не создается»

Ответ №1:

Для достижения этой цели вы можете сделать :before абсолютную и цифру относительной.

 .container {
  background: #ededed;
  height: 4rem;
  display: flex;
  align-items: center;
  justify-content: center;
 }
 
.number {
  display: flex;
  flex-direction: row;
}

.digit:nth-last-of-type(3n):before {
  content: ",";
  left: -10px;
  position: absolute;
  color: black;
  font-weight: bold;
 }
 
 .digit:nth-last-of-type(3n) {
  background: orange;
  }
 
 .digit {
  width: 1em;
  text-align: center;
  padding: 0.25em;
  margin: 0.5em;
  border-radius: 0.1em;
  background: white;
  color: black;
position:relative;
 } 
 <div class="container">
  <div class="number">
    <span class="digit">1</span>
    <span class="digit">9</span>
    <span class="digit">0</span>
    <span class="digit">1</span>
    <span class="digit">0</span>
    <span class="digit">0</span>
    <span class="digit">0</span>    
  </div>
</div>