Нежелательное переполнение столбцов CSS

Я предлагаю сделать следующее в VS. Перейдите к: Инструменты> Android> Android SDK Manager и убедитесь, что у вас установлены правильные инструменты для эмулятора Nougat android, который вы хотите запустить.

Я бы сказал, что установите под Android 7.0 - Нуга, если еще не было

  1. API Google для Intel X86 Atom System Image
  2. API Google Intel x86 Atom _64 Системный образ

После того, как вы установили эти , перейдите к: Инструменты> Android> Android Device Manager. Выберите соответствующий эмулятор и проверьте, какой CPU / ABI вы нацеливаете, и обновите его, чтобы использовать новые, которые вы установили на предыдущем шаге.

Вы также должны попробовать запустить VS как администратор, это также может помочь.

5
задан Draex_ 21 January 2019 в 08:43
поделиться

4 ответа

Есть несколько исправлений, либо добавьте display: block к ul, как это

 ul {
    display: block;
    column-width: 35px;
    height: 35px;

    padding: 0;
    list-style: none;
    font-size: 10px;

    vertical-align: middle;

    /* 
        Setting margin fixes the issue, 
        but the with of the list is not
        known.
    */
    /* margin-right: 170px; */
}

, либо измените margin-right на% или vw вместо px, как это

  ul {
    display: inline-block;
    column-width: 35px;
    height: 35px;

    padding: 0;
    list-style: none;
    font-size: 10px;

    vertical-align: middle;

    /* 
        Setting margin fixes the issue, 
        but the with of the list is not
        known.
    */
    margin-right: 30%;
}
0
ответ дан Radu 21 January 2019 в 08:43
поделиться

Если вы не возражаете, чтобы каждый <li> находился в отдельной колонке, я думаю, что это может сработать:

ul {
  display: inline;
  ...
}

li {
  display: inline-block;
  ...
}

0
ответ дан pauloaguia 21 January 2019 в 08:43
поделиться

Обновленный ответ для достижения ваших целей с использованием CSS Grid inline-grid для создания встроенной сетки уровней:

grid-template-rows настроен на повторение максимум двух строк с 1fr каждый. [тысяча сто двадцать девять]

grid-template-columns настроен на повторение необходимого количества столбцов auto с шириной 35px.

grid-auto-flow установлен на column, чтобы иметь алгоритм автоматического размещения сетки для заполнения каждого столбца по очереди, добавляя новые столбцы по мере необходимости, сохраняя при этом максимум две строки.

grid-column-gap использовался для добавления отступов между столбцами для отображения тех же результатов, что и на предоставленных изображениях.

div {
  font-size: 30px;
  padding: 30px;
}

ul {
  display: inline-grid;
  grid-template-rows: repeat(2, 1fr);
  grid-template-columns: repeat(auto, 35px);
  grid-auto-flow: column;
  grid-column-gap: 10px;
  align-items: center;
  list-style: none;
  font-size: 10px;
  padding: 0;
  margin: 0;
  vertical-align: middle;
}

li {
  background: #9eff80;
  padding: 2px;
  opacity: 0.7;
}
<div>
  I'd like to have a list with several columns
  <ul>
    <li>A list</li>
    <li>like this</li>
    <li>with unknown</li>
    <li>number and items</li>
    <li>or columns.</li>
  </ul>
  in the middle of other text.
</div>

Надеюсь, что это решит вашу проблему!


Если ваша цель - получить максимум из 3 пунктов columns, как показано на изображениях, я считаю, что свойство, которое вам нужно изменить, это:

column-width: 35px - columns: auto 3 , если вы хотите column-width каждого столбца установить на auto.

или

column-width: 35px - columns: 35px 3 , если вы хотите указать column-width для каждого столбца.

Это объяснение того, что делает свойство columns:

Свойство CSS columns устанавливает ширину столбца и количество столбцов элемента. - MDN - столбцы css

Ниже приведен код, с помощью которого я достиг того же результата, что и изображение, которое вы предоставили.

div {
  font-size: 30px;
  padding: 30px;
}

ul {
  display: inline-block;
  columns: auto 3;
  padding: 0;
  list-style: none;
  font-size: 10px;
  vertical-align: middle;
}

li {
  background: #9eff80;
  padding: 2px;
  opacity: 0.7;
}
<div>
  I'd like to have a list with several columns
  <ul>
    <li>A list</li>
    <li>like this</li>
    <li>with unknown</li>
    <li>number and items</li>
    <li>or columns.</li>
  </ul>
  in the middle of other text.
</div>

Надеюсь, это поможет!

0
ответ дан Christian Ipanaque 21 January 2019 в 08:43
поделиться

Первоначальный ответ (прежде чем я понял, о чем вы спрашиваете):

В зависимости от того, как вы хотите <li> заказать, вы можете использовать columns [ 1117] ...

div {
  font-size: 30px;
  padding: 30px;
}

ul {
  display: inline-block;
  column-width: 35px;
  padding: 0;
  list-style: none;
  font-size: 10px;
  columns: 2 0px;
}

li {
  background: #9eff80;
  margin: 1px;
  padding: 2px;
  opacity: 0.7;
  width: 100%;
  break-inside: avoid;
}
<div>
  I'd like to have a list with several columns
  <ul>
    <li>A list</li>
    <li>like this</li>
    <li>with unknown</li>
    <li>number and items</li>
    <li>or columns.</li>
  </ul>
  in the middle of other text.
</div>

... или display:inline-flex. Вам нужно установить max-width для детей, установить flex-wrap: wrap для родителя и указать желаемое vertical-align для родителя:

div {
  font-size: 30px;
  padding: 30px;
}

ul {
  display: inline-flex;
  padding: 0;
  list-style: none;
  font-size: 10px;
  flex-wrap: wrap;
  line-height: 5em;
  vertical-align: middle; 
     /* see also -webkit-baseline-middle
                 text-bottom
                 text-top */
}

li {
  line-height: 1em;
  flex: 0 1 auto;
  margin: 1px;
  width: calc(50% - 2px); /*deduct margin*/
  background: #9eff80;
  padding: 2px;
  opacity: 0.7;
  box-sizing: border-box;
}
<div>
  I'd like to have a list with several columns
  <ul>
    <li>A list</li>
    <li>like this</li>
    <li>with unknown</li>
    <li>number and items</li>
    <li>or columns.</li>
  </ul>
  in the middle of other text.
</div>
[1139 ]

Вероятно, наиболее важной частью всего этого является удаление height: 35px; из ul. Зачем вы все это жестко закодировали, если «Число элементов в списке неизвестно» ?


Правильный ответ (как этого можно достичь) :

Похоже, вы хотите, чтобы ваши элементы отображались в виде неопределенной серии встроенных блоков, каждый из которых содержит 2 элемента или меньше. Вы все еще должны определить, что должно произойти, когда содержимое ваших 2 элементов превысит желаемую высоту 35px.

Вот как вы можете добиться этого, используя ванильный JavaScript. Если возможно, вы должны сделать это на стороне сервера, хотя:

let uls = document.querySelectorAll('ul');
for(let i = 0; i < uls.length; i++) {
  let count = uls[i].children.length;
  if (count && count > 2) {
    for (j = 0; j < count/2; j++) {
      let parent = uls[i].parentElement,
          newUl = document.createElement('ul');
      for (k = 0; k < 2; k++) {
        li = uls[i].querySelector(':first-child');
        if (li) {
          newUl.appendChild(li);
          parent.insertBefore(newUl, uls[i]);
        }        
      }
    }
  }
}
div {
  font-size: 30px;
  padding: 30px;
}

ul {
  display: inline-block;
  padding: 0;
  list-style: none;
  font-size: 10px;
  vertical-align: middle;
  min-height: 35px;
}

li {
  background: #9eff80;
  padding: 2px;
  margin: 1px;
  opacity: 0.7;
}
<div>
  I'd like to have a list with several columns
  <ul>
    <li>A list</li>
    <li>like this</li>
    <li>with unknown</li>
    <li>number and items</li>
    <li>or columns.</li>
    <li>A list</li>
    <li>like this</li>
    <li>with unknown</li>
    <li>number and items</li>
    <li>or columns.</li>
    <li>A list</li>
  </ul>
  in the middle of other text.   I'd like to have a list with several columns
  <ul>
    <li>A list</li>
    <li>like this</li>
    <li>with unknown</li>
    <li>number and items</li>
    <li>or columns.</li>
    <li>A list</li>
    <li>like this</li>
    <li>with unknown</li>
    <li>number and items</li>
    <li>or columns.</li>
    <li>A list</li>
  </ul>
  in the middle of other text.
</div>

Это один из случаи, когда jQuery будет намного короче:

$('ul').each(function() {
  while($('li', this).length > 2) {
    let newUl = $('<ul/>'), i = 0;
    while(i < 2) {
      $('li', this).eq(0).appendTo(newUl); 
      i++;
    }
    newUl.insertBefore($(this));
  }
})
0
ответ дан Andrei Gheorghiu 21 January 2019 в 08:43
поделиться