CSS Grid - Как сделать элементы отзывчивыми - PullRequest
0 голосов
/ 24 октября 2018

Я пытался сделать 2 элемента (box1 и box2) отзывчивыми на маленьком экране, но я не мог понять это.Пожалуйста помоги.Спасибо!

<html lang="en">
<head>
    <style>
      body{
          background: lightblue;
        }
      .container{
          padding:10px;
          display: grid;
          background: lightyellow;
          width:100%;
          grid-gap:5px;
          justify-content:center;
          grid-auto-flow: column;
          grid-auto-columns: 300px 100px;
        }
      .box1{
          background: lightgray;
          min-height:150px;
        }
      .box2{
          background: lightgreen;
          min-height:150px;
        }
    </style>
</head>
<body>
    <div class="container">
      <div class="box box1">BOX 1</div>
      <div class="box box2">BOX 2</div>
    </div>
</body>
</html>

Ответы [ 3 ]

0 голосов
/ 24 октября 2018
          grid-auto-columns: 300px 100px;

в этой строке выше вы используете АБСОЛЮТНЫЕ размеры.Если вы хотите, чтобы они были отзывчивыми, используйте% вместо px.что-то вроде

              grid-auto-columns: 30% 10%;
0 голосов
/ 24 октября 2018

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

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

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

Существует множество решений для этого, и точный ответ будет зависеть от дизайна вашей страницы.и ваши предпочтения.

Прежде всего, рассмотрите возможность использования min-width и max-width с размерами пикселей, чтобы ограничить размеры ваших элементов.Эти значения CSS будут переопределять процент, если процентное значение заставляет их идти выше или ниже указанной вами максимальной или минимальной ширины.Это может быть полезно для предотвращения чрезмерного сдавливания или растяжения предметов, в то же время отвечая соответствующим образом в нужном диапазоне.

Далее вам необходимо знать о медиазапросах.Это функция CSS, которая позволяет вам указать CSS, который применяется только тогда, когда размер браузера находится в пределах указанного диапазона.(Медиа-запросы могут сделать намного больше, чем это, но я предоставлю вам дальнейшее их изучение)

Здесь может помочь пример:

@media(max-width:600px) {
    .container {
        grid-auto-flow: unset;
        grid-auto-columns: unset;
    }
}

В приведенном выше примере используетсяМедиа-запрос, чтобы отключить ваши столбцы, если ширина браузера 600 пикселей или меньше.Для узких браузеров макет на основе столбцов может не подходить, поэтому переключение с него при низких разрешениях часто является хорошей идеей.

0 голосов
/ 24 октября 2018

Вы указали столбцы фиксированной ширины ... поэтому они, естественно, не реагируют.

Вместо этого используйте процентные или дробные значения.

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

 ::before,
 ::after {
  box-sizing: inherit;
}

body {
  background: lightblue;
}

.container {
  padding: 10px;
  display: grid;
  background: lightyellow;
  width: 100%;
  grid-gap: 5px;
  justify-content: center;
  grid-auto-flow: column;
  grid-auto-columns: 3fr 1fr;
}

.box1 {
  background: lightgray;
  min-height: 150px;
}

.box2 {
  background: lightgreen;
  min-height: 150px;
}
<div class="container">
  <div class="box box1">BOX 1</div>
  <div class="box box2">BOX 2</div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...