Установите минимальную и максимальную ширину столбца сетки, используя проценты

Когда я устанавливаю для первого столбца в столбце сетки CSS минимальный процент, ширина столбца не соответствует минимуму. Пример:

grid-template-columns: minmax(50%, 75%)  1fr;

При этих значениях по мере сужения окна просмотра первый столбец продолжает уменьшаться по горизонтали, пока, наконец, не схлопнется и не исчезнет. Точно так же растяжение экрана делает первый столбец шире по мере продвижения, так что в конечном итоге он становится шире, чем 3/4 от общей ширины сетки.

(Тем не менее, при большей ширине сетки пропорции двух столбцов примерно соответствуют тому, чего я пытаюсь достичь.)

Итак, есть ли способ сделать первый столбец, ширина которого всегда, скажем, не меньше половины ширины сетки и никогда не превышает 2/3?

Примечания:

  • Grid-gap на данный момент равен 0, чтобы не усложнять процентные расчеты.
  • Я знаю, что могу установить минимальную ширину на фиксированное число пикселей и, таким образом, установить минимальную ширину — столбец не исчезнет. Но затем, когда сетка сужается, нарушается максимальное процентное ограничение. Кроме того, я стараюсь не использовать фиксированную ширину пикселей.

Мой код (разрыв сетки добавлен для отображения границ столбцов):

.wrapper {
  display: grid;
  grid-template-columns: minmax(50%, 75%) 1fr;
  grid-gap: 1px;
  padding: 10px;
  background-color: #219643;
}

.item {
background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  padding: 20px 0;
  font-size: 30px;
}
<div class = "wrapper">
  <div class = "item">Column 1</div>
  <div class = "item">Column 2</div>
</div>

У вас есть процентная ширина и единицы fr; кажется, что нет начальной известной ширины, из которой можно рассчитать процент. Вы пытались назначить ширину элементу сетки?

David Thomas 21.12.2020 22:24

@David и т. д.: да, установка явной ширины контейнера (здесь «обертка») на 100% или 90% - это проценты от области просмотра - не имеет никакого эффекта, как я вижу. Насколько я понимаю, ширина, из которой рассчитывается процент, равна ширине родителя, поэтому minmax (50%, 75%) должен относиться к ширине div «обертки». Если для ширины оболочки задано фиксированное число пикселей, размер столбцов вообще не изменяется при изменении ширины окна просмотра.

Joan Eliot 21.12.2020 22:34

Это работает лучше для вас? jsfiddle.net/dLke91zv

Michael Benjamin 21.12.2020 22:58

@MichaelBenjamin: Да, да! Пожалуйста, объясните, почему ваша версия работает, а моя нет, если у вас есть время.

Joan Eliot 22.12.2020 00:31
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
4
1 111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Скажу так: мы как раз на Grid Level 1. Это совершенно новая технология, поэтому следует ожидать некоторых сбоев и ограничений.

Например, в вашем minmax(50%, 75%) трек по умолчанию всегда будет иметь значение max.

Это удаляет minmax() как полезную опцию во многих макетах, так как многие люди хотят min по умолчанию.

Почему не работает минимальный процент? Я думаю, что это как-то связано с шириной родительского контейнера (никакие настройки, которые я пробовал, не работали), или что-то с сеткой алгоритмом определения размера дорожки. Опять непонятно.

Так что я просто пропустил все это, дав браузеру те же самые команды другим способом. Кажется, это работает:

.wrapper {
  display: grid;
  grid-template-columns: minmax(50%, 1fr) 25%;
  grid-gap: 1px;
  padding: 10px;
  background-color: #219643;
}

.item {
  background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  padding: 20px 0;
  font-size: 30px;
}
<div class = "wrapper">
  <div class = "item">Column 1</div>
  <div class = "item">Column 2</div>
</div>

Ваш связанный пост очень полезен. Но будут ли результаты grid-template-columns: 75% 25% отличаться от того, что мы получаем с вашим кодом?

Joan Eliot 22.12.2020 01:19

Также к вашему замечанию о проблеме первого прохода «Уровня 1» в спецификации сетки относится что-то вроде: grid-template-columns: minmax(50%, 1fr) 140px; минимальная настройка для первого столбца игнорируется - количество пикселей для второго столбца всегда поддерживается на уровне за счет того что "50%" минимум.

Joan Eliot 22.12.2020 01:24

Что касается вашего первого комментария, я бы сказал «да». Пока браузер не соблюдает min 50%, gtc 75% 25% кажется эквивалентным.

Michael Benjamin 22.12.2020 01:33

По поводу вашего второго комментария согласен. Это проблема.

Michael Benjamin 22.12.2020 01:34

Разрабатывая мой второй комментарий: моя точка зрения заключалась в том, что, как и в случае предпочтения по умолчанию уровня 1 для максимальной настройки, которую вы определяете, реализация сетки на уровне 1 не дает вам выбора в отношении того, какие настройки столбца имеют приоритет: если вы установите фиксированная ширина в пикселях для одного столбца, «минимум» 50% для второго столбца игнорируется в пользу сохранения указанного количества пикселей.

Joan Eliot 22.12.2020 01:42

Другие вопросы по теме