Заполнить точками пустое пространство между словами

262
07 октября 2017, 20:07

Необходимо реализовать оформление, которое выглядит как оглавление в книге:
часть текста на строке прижата влево, часть - вправо, а расстояние между концом левого и началом правого заполняется точками.
Строк будет несколько.
При этом длина текста с обоих концов заранее неизвестна, может изменяться, и на каждой строке она будет разной.

Answer 1

Я бы вот так сделал.

ul li, 
ol li { 
  list-style: none; 
} 
 
ol li { 
  display: flex; 
  justify-content: space-between; 
} 
 
li div:nth-child(2) { 
  flex: 1 0; 
  border-bottom: 1px dotted #000; 
  height: 1em; 
  margin: 0 .4em; 
}
<div class="book"> 
  <h1>Оглавление</h1> 
  <ul> 
    <li>Предисловие</li> 
    <li> 
      <ol> 
        <li> 
          <div>Завязка</div> 
          <div></div> 
          <div>стр. 1</div> 
        </li> 
        <li> 
          <div>Кульминация</div> 
          <div></div> 
          <div>стр. 10</div> 
        </li> 
        <li> 
          <div>Развязка</div> 
          <div></div> 
          <div>стр. 100</div> 
        </li> 
      </ol> 
    </li> 
    <li>Послесловие</li> 
    <li>Об авторе</li> 
</div>

Answer 2

Необходимо добавить псевдоэлемент :after для элемента, который формирует строку. Контентом для этого псевдоэлемента будет большое число точек, которыми надо заполнить строку (лучше брать с небольшим запасом). Добавление свойства overflow: hidden позволит обрезать "лишние" точки, когда она дойдут до начальной границы правого текста. Свойства display: block и white-space: nowrap отключат перенос строки при переполнении её контентом, т.к. точки в псевдоэлементе определённо сделают строку длинее, чем ширина контейнера.
Для красоты можно добавлять отступы для текста перед точками и после них, а также отступ слева в начале строки, чтобы сформировать каскадную вложенность пунктов - заполнение пустой строки точками нарушено не будет.

.book { 
  width: 250px; 
} 
p { 
    overflow: hidden; 
} 
p:after {  content:'..................................................'; 
  display: block; 
  white-space: nowrap; 
  overflow: hidden; 
} 
p span:first-of-type { 
  float:left; 
  margin-right: 10px; 
} 
p span:last-of-type { 
  float:right; 
  margin-left: 10px; 
} 
 
p:last-of-type{ 
  margin-left: 20px; 
}
<div class="book"> 
  <h1>Оглавление</h1> 
  <p><span>Предисловие</span><span></span></p> 
  <p><span>1. Завязка</span><span>стр. 1</span></p> 
  <p><span>2. Кульминация</span><span>стр. 10</span></p> 
  <p><span>3. Развязка</span><span>стр. 100</span></p> 
  <p><span>Послесловие</span><span></span></p> 
  <p><span>Об авторе</span><span></span></p> 
</div>

READ ALSO
Автоформатирование и emmet для Stylus

Автоформатирование и emmet для Stylus

Проблема такая - пишу на стилусе и часто вставляю код из инструмента для разработчиков в браузереВыходит грязно, потому что в stylus нет двоеточия...

345
Flex div горизонтальная прокрутка таблицы

Flex div горизонтальная прокрутка таблицы

В чем причина изменения левого div, когда вставляешь в правой большую таблицу с overflow-x: auto;Пример кода

266
Позиционирование при помощи js/jquery

Позиционирование при помощи js/jquery

Господа, есть div с шириной и высотой 400px в котором есть ещё один div(content)Мне надо при нажатии кнопки на сайте подвинуть родительский div на 400px влево...

241