Проблемы с медиа-запросами CSS

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

.flex, .cards, .card {
  display: flex;
}

.flex {
  flex-wrap:wrap;
}

.cards, .card {
  align-items:center;
}

.cards {
  padding: 1em;
  background-color: $color-lightest;
  box-shadow: 0px 1px 22px 4px rgba(0, 0, 0, 0.07);
}

@media screen and (min-width: 480px) {
  .cards {
    width: 49%;
    margin: 1%;  
  }

  .cards:nth-of-type(even) {
    margin-right: 0;
  }

  .cards:nth-of-type(odd) {
    margin-left: 0;
  }
}

@media screen and (min-width: 1024px) {
  .cards {
    width: 32%;
    margin: 1%;
  }

  .cards:nth-of-type(3n) {
    margin-right: 0;
  }

  .cards:nth-of-type(3n+1) {
    margin-left: 0;
  }
}

Результат этого выглядит следующим образом, когда мы устанавливаем размер экрана ровно 1024 пикселей:

Проблемы с медиа-запросами CSS

Когда мы проверяем div, похоже, что оба медиа-запроса css для 480px и 1024px запускаются. Что мы здесь делаем неправильно?

Обновлено: добавление HTML

<div class = "flex" ng-init = "init(user.sys_id)">
  <div  class = "cards" ng-repeat = "task in data.tasks | orderBy: ['order']" >
    <div  class = "card" ng-click = "c.onWidget(task);">
      <i ng-if = "task.finished" class = "{{task.icon}} fa-5x card-img finished" aria-hidden = "true"></i>
      <i ng-if = "!task.finished && task.isOverDue" class = "{{task.icon}} fa-5x card-img overdue" aria-hidden = "true"></i>
      <i ng-if = "!task.finished && !task.isOverDue" class = "{{task.icon}} fa-5x card-img pending" aria-hidden = "true"></i>
      <div class = "card-content">
        <h4>
          <!--<a href = "?id=hri_task_details&table=sn_hr_core_task&sys_id = {{task.sys_id}}" id = "task_{{$index}}">{{::task.short_description}}</a>-->
          <a ng-click = "">{{::task.short_description}}</a>
        </h4>
        <span ng-if = "!task.finished">
          <span class = "text-normal" ng-if = "task.due_date">${Due by} {{::task.due_date | date: 'mediumDate' }}
            <span class = "text-warning" ng-if = "task.isOverDue"> (${Overdue})</span>
          </span>
        </span>
        <span ng-if = "task.finished" class = "text-muted">${Completed at} {{::task.closed_at | date: 'mediumDate'}}</span>
      </div>
      <div>
        <i alt = "${Open}" ng-if = "!task.finished && task.isOverDue" class = "m-l-sm fa fa-square-o fa-2x overdue"></i>
        <i alt = "${Open}" ng-if = "!task.finished && !task.isOverDue" class = "m-l-sm fa fa-square-o fa-2x pending"></i>
        <i alt = "${Completed}" ng-if = "task.finished" class = "m-l-sm fa fa-check-square-o fa-2x finished"></i>
      </div>   
    </div>
  </div>
</div>

Вы используете бутстрап или какой-либо другой адаптивный фреймворк? Кроме того, не могли бы вы также предоставить свой HTML-код?

ciammarino 18.12.2018 19:18

да, я использую бутстрап, позвольте мне добавить html. Благодарность!

Dave 18.12.2018 19:23
Приемы 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 сценарий полностью изменился.
0
2
221
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Попробуйте изменить свой первый медиа-запрос на это:

@media screen and (min-width: 480px) and (max-width: 1023.99px) {
    ...
}

.cards:nth-of-type(3n) и .cards:nth-of-type(even) кажутся применимыми.

Спасибо nickfindley! это работает, но лучше ли указывать минимальный и максимальный размеры экрана в медиа-запросе? Мы думали об этом, но во многих онлайн-уроках не указывается явно между размером экрана x и размером экрана y. Мне просто интересно, как лучше всего писать эти медиа-запросы.

Dave 18.12.2018 19:39

@ Дэйв: да, использовать и то, и другое нет проблем. Вот почему есть мин. И макс.

CalvT 18.12.2018 19:39

Должна ли «min-width: 480px» быть «max-width: 480px»?

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

Спасибо JohnH, на самом деле мы хотим, чтобы ширина экрана от 480 до 1024 пикселей составляла два столбца, а ширина экрана 1024 пикселей и более - 3 столбца.

Dave 18.12.2018 19:37

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