Есть ли способ использовать высоту области просмотра для запуска классов в Gatsby? - PullRequest
0 голосов
/ 19 июня 2020

Сценарий

Я работаю над этим сайтом Gatsby, используя Tailwind CSS, и там есть разные типы контента. Внутри блога занято все окно просмотра, и есть переполнение опциями прокрутки, но на некоторых страницах не так много контента, поэтому его нужно будет прокручивать, и я бы хотел, чтобы нижний колонтитул был закреплен в нижней части страница. Очень похоже на слайд в презентации. Заголовок всегда фиксируется сверху.

«Простое решение»

Простое решение, которое я получил, заключалось в том, чтобы создать два типа нижних колонтитулов, фиксированный и свободный, которые я мог просто выбрать, пока кодирование страниц, например <Layout footer="loose">...</Layout>

Проблема

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

This page have a fixed footer and a Эта страница имеет фиксированный нижний колонтитул и «один слайд. посмотрите ", но @ Opera заголовок находится под заголовком

In this case, dummy content was inserted so we could test the behavior with longer content and fixed footer В этом случае был вставлен фиктивный контент, чтобы мы могли проверить поведение с более длинным содержание и фиксированный нижний колонтитул

Same as above, but with a То же, что и выше, но с «свободным нижним колонтитулом».

Решение проблемы

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

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

Мне не известно о каком-либо подходе к этому типу проблем, поэтому любые мысли или комментарии по этому поводу были бы очень признательны.

1 Ответ

0 голосов
/ 20 июня 2020

html,
body {
  margin: 0;
  height: 100%;
}

body {
  display: flex;
  flex-direction: column;
}
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet">

<header class="flex-initial bg-gray-700 text-gray-200 p-6">
  my header
</header>
<main class="flex-1 bg-gray-400 text-gray-800 p-6">
  <h1>HTML Ipsum Presents</h1>

  <p><strong>Pellentesque habitant morbi tristique</strong> senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, <code>commodo vitae</code>, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>

  <h2>Header Level 2</h2>

  <ol>
    <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
    <li>Aliquam tincidunt mauris eu risus.</li>
  </ol>

  <blockquote>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.</p>
  </blockquote>

  <h3>Header Level 3</h3>

  <ul>
    <li>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</li>
    <li>Aliquam tincidunt mauris eu risus.</li>
  </ul>

</main>
<footer class="flex-initial bg-gray-200 text-gray-700 p-6">
  my footer
</footer>
...