DOMPDF: переполнение элементов списка шириной 50% - PullRequest
2 голосов
/ 10 марта 2020

Я использую DOMPDF для генерации счетов в формате PDF. Теперь у меня проблема с некоторыми элементами <li>. Элементы имеют ширину 50%. Ширина <ul> равна 100%.

Но элементы <li> по-прежнему имеют переполнение. Смотрите изображение справа. enter image description here

Это мой текущий CSS код:

ul {padding-top: 8px; padding-left:0px; margin: 0; list-style: none; border-top: 2px solid #000000; display: block; width: 99%;}
ul li {display: inline-block; width: 50%; margin-bottom: 4px;}
ul strong {display: inline-block; width: 40%;}

Есть что-то, что я пропустил или известная ошибка?

1 Ответ

1 голос
/ 10 марта 2020

Обновление

Поскольку DOMPDF еще не поддерживает flexbox, я включил версию inline-block, которая должна работать для вас. Чтобы обойти возможные проблемы с пробелами, с которыми вы, возможно, столкнулись, я опустил закрывающий </li>, который никак не влияет на действительность HTML.

ul {
  padding-top: 8px;
  padding-left: 0px;
  margin: 0;
  list-style: none;
  border-top: 2px solid #000000;
  display: block;

}

li {
  width: 50%;
  display: inline-block;
  vertical-align: top;
  margin-bottom: 4px;
}

.item {
  margin-bottom: 10px;
}

.item strong,
.item .text {
  display: inline-block;
  vertical-align: top;
}

.item strong {
  width: 40%;
  display: inline-block;
  white-space: nowrap;
}

.item strong::after {
  content: ':';
}

.item .text {
  width: 60%;
  padding: 0;
  margin: 0;
}
<ul>
  <li>
    <div class="item">
      <strong>My Label</strong><p class="text">My text here</p>
    </div>
  <li>
    <div class="item">
      <strong>My Label</strong><p class="text">My text here</p>
    </div>
    <div class="item">
      <strong>My Label</strong><p class="text">My long text here My long text here My long text here My long text here My long text here</p>
    </div>
    <div class="item">
      <strong>My Label</strong><p class="text">My text here</p>
    </div>
</ul>

jsFiddle


Использование inline-block может иногда представлять проблемы как пробелы в HTML становится частью рендера. Я бы подошел к этому, используя flexbox для ul, а также li s. Наконец, я добавил немного разметки вокруг содержимого li, сделав его тоже родителем flexbox.

ul {
  padding-top: 8px;
  padding-left: 0px;
  margin: 0;
  list-style: none;
  border-top: 2px solid #000000;
  display: block;
  width: 99%;
  display: flex;
}

li {
  flex: 1 0 50%;
  margin-bottom: 4px;
  display: flex;
  flex-direction: column;
}

.item {
  display: flex;
  margin-bottom: 10px;
}

.item strong {
  flex: 4;
  white-space: nowrap;
}

.item strong::after {
  content: ':';
}

.item .text {
  flex: 6;
  padding: 0;
  margin: 0;
}
<ul>
  <li>
    <div class="item">
      <strong>My Label</strong>
      <p class="text">My text here</p>
    </div>
  </li>
  <li>
    <div class="item">
      <strong>My Label</strong>
      <p class="text">My text here</p>
    </div>

    <div class="item">
      <strong>My Label</strong>
      <p class="text">My text here</p>
    </div>
    <div class="item">
      <strong>My Label</strong>
      <p class="text">My text here</p>
    </div>
  </li>
</ul>

jsFiddle

...