Flexbox UL LI в двух столбцах с выравниванием содержимого первого столбца ВПРАВО и выравниванием содержимого второго столбца ВЛЕВО - PullRequest
0 голосов
/ 03 октября 2019

Мне нужна помощь со столбцами flexbox ul и li и выравниванием их содержимого. На самом деле, я хотел бы использовать количество столбцов, если можно разделить один UL на два столбца. Flex-оболочка, которая содержит ul как контейнер, должна центрировать весь список UL (контент), но первый столбец и второй столбец должны иметь противоположное выравнивание содержимого. Я застрял в другой колонке. Любой совет?

                          (flex-wrapper) align: center  



       text-align:right ( column 1 )    ( column 2 ) text-align: left
<div class="flex-wrapper">
  <ul>
    <li>Fully air-conditioned</li>
    <li>Free private parking area</li>
    <li>Free outdoor shower</li>
    <li>Free barbecue on disposal</li>
    <li>Free Wi-Fi Internet</li>
    <li>Multilingual host</li>
    <li>Free local TV and SatTV stations</li>
    <li>Pets are not allowed</li>
    <li>Smoking allowed outdoor</li>
  </ul>
</div>
.flex-wrapper {
  -moz-column-count: 2;
  -webkit-column-count: 2;
  column-count: 2;
  text-align: center;
  list-style-type: none;
  list-style-image: none;
  margin: 0;
}

.flex-wrapper ul li {
  text-align: right;
  margin-bottom: 0;
  padding: 4px 0 4px 0;
  width: 100%;
  font-size: 22px;
  line-height: 30px;
}

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

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

Проблема в том, что вы получаете доступ к контрольным точкам подсчета столбцов в css. Если вы можете найти средний элемент, то вы можете использовать селектор брата, чтобы изменить все последующие элементы на «align: left». Я не мог найти способ сделать это, но это может потребовать дальнейшего расследования. Вот отправная точка: Средний дочерний псевдокласс

Если вы можете получить вычисленное смещение по оси X от родителя (он же left: n) после того, как оно вычислит разрыв столбца, вы можете использоватьСинтаксис атрибута, чтобы определить, какие элементы находятся в правом столбце. Опять же, я не смог найти никакой документации о том, как это сделать.

Я не скажу, что невозможно делать именно то, что вы хотите, но я не оправдаю ваши надежды. Однако, если вы готовы отказаться от использования column-count и принять чередующийся левый> правый> левый> правый порядок вместо левого заполнения> правый порядок заполнения, то это вполне выполнимо.

вот CSS:

.flex-wrapper {
    display: flex;
    justify-content: center; /* or use align-items: center for a direction: column */
}
ul {
    display: flex;
    flex-wrap: wrap;
}
li {
    width: 50%;
}
li:nth-child(odd) {
    text-align: right;
}

Хотя этот метод не достигает желаемого порядка, он создает стиль без необходимости изменять HTML или добавлять JavaScript. Он также обрабатывает динамические размеры списков.

Мне действительно любопытно, если кто-то сможет найти для этого идеальное решение.

0 голосов
/ 03 октября 2019

.flex-wrapper {
  -moz-column-count: 2;
  -webkit-column-count: 2;
  column-count: 2;
  text-align: center;
  list-style-type: none;
  list-style-image: none;
  margin: 0;
}

.flex-wrapper ul li {
  text-align: left;
  margin-bottom: 0;
  padding: 4px 0;
  width: 100%;
  font-size: 22px;
  line-height: 30px;
}

.flex-wrapper ul li:nth-child(-n+4) {
  text-align: right;
}

.flex-wrapper-2 {
  display: flex;
  justify-content: center;
  list-style-type: none;
  list-style-image: none;
  margin: 0;
}

.flex-wrapper-2 ul {
  display: flex;
  flex-direction: column;
  flex-basis: 50%;
}

.flex-wrapper-2 ul li {
  text-align: left;
  margin-bottom: 0;
  padding: 4px 0;
  font-size: 22px;
  line-height: 30px;
}

.flex-wrapper-2 ul:nth-child(1) li {
  text-align: right;
}
<h1>Wrapper 1</h1>
<div class="flex-wrapper">
  <ul>
    <li>Fully air-conditioned</li>
    <li>Free private parking area</li>
    <li>Free outdoor shower</li>
    <li>Free barbecue on disposal</li>
    <li>Free Wi-Fi Internet</li>
    <li>Multilingual host</li>
    <li>Free local TV and SatTV stations</li>
    <li>Pets are not allowed</li>
    <li>Smoking allowed outdoor</li>
  </ul>
</div>

<h1>Wrapper 2</h2>
<div class="flex-wrapper-2">
  <ul>
    <li>Fully air-conditioned</li>
    <li>Free private parking area</li>
    <li>Free outdoor shower</li>
    <li>Free barbecue on disposal</li>
  </ul>
  <ul>
    <li>Free Wi-Fi Internet</li>
    <li>Multilingual host</li>
    <li>Free local TV and SatTV stations</li>
    <li>Pets are not allowed</li>
    <li>Smoking allowed outdoor</li>
  </ul>
</div>

Использовать CSS : селектор nth-child , например, так:

.flex-wrapper ul li:nth-child(-n+4) {
    text-align: right;
}
...