【问题标题】:TailwindCss layout with full screen height and scrolling content panel具有全屏高度和滚动内容面板的 TailwindCss 布局
【发布时间】:2021-03-01 22:19:55
【问题描述】:

我正在尝试使用 TailwindCss 创建一个典型的 html 布局 - 一个固定的页眉和页脚,带有左侧和右侧边栏。

中心内容有一个固定的搜索功能 - 下面的内容应该滚动。

我尝试使用 TailwindCss 和 TailwindUI 中的模式,但无法让溢出的内容(在下面的演示中以浅蓝色显示)滚动而不是向下推动页面。

<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet"/>
<div>
  <div class="h-screen flex flex-col bg-gray-300">
    <!-- header -->
    <div class="bg-blue-700 p-4">
      Nav
    </div>
    <div class="flex-grow flex flex-row justify-center">
      <!-- lhs -->
      <div class="flex-shrink-0 w-1/4 p-4">
        Left menu
      </div>
      <!-- center -->
      <div class="flex-1 flex flex-col bg-white">
        <div class="border-b-2 m-4 pb-2 border-gray-200">Search</div>
        <main class="flex-1 overflow-y-scroll p-4 bg-indigo-200">
          <div class="relative">
            <div class="mb-64">Overflowing content</div>
            <div class="mb-64">Overflowing content</div>
            <div class="mb-64">Overflowing content</div>
            <div class="mb-64">Overflowing content</div>
            <div class="mb-64">Overflowing content</div>
            <div class="mb-64">Overflowing content</div>
          </div>
        </div>
      </main>
      <!-- rhs -->
      <div class="flex-shrink-0 w-1/4 p-4">
        Right sidebar
      </div>
    </div>
    <!-- footer -->
    <div class="bg-blue-700 p-4">
      Footer
    </div>
  </div>
</div>

【问题讨论】:

    标签: html css flexbox tailwind-css


    【解决方案1】:

    正在发生的事情是中间 div(其中包含我们希望可滚动的中心列)被限制在其内容的高度。除非另有说明,否则它宁愿这样做,也不愿溢出(至少在 Chrome 和 Firefox 上)。所以我们的中心列甚至没有机会应用它自己的滚动行为。

    最小的解决办法是把overflow-hidden放在中间的div上,让它知道它的内容溢出是可以的:

    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet"/>
    <div>
      <div class="h-screen flex flex-col bg-gray-300">
        <!-- header -->
        <div class="bg-blue-700 p-4">
          Nav
        </div>
        <div class="flex-grow flex flex-row overflow-hidden justify-center">
          <!-- lhs -->
          <div class="flex-shrink-0 w-1/4 p-4">
            Left menu
          </div>
          <!-- center -->
          <div class="flex-1 flex flex-col bg-white">
            <div class="border-b-2 m-4 pb-2 border-gray-200">Search</div>
            <main class="flex-1 overflow-y-auto p-4 bg-indigo-200">
              <div class="relative">
                <div class="mb-64">Overflowing content</div>
                <div class="mb-64">Overflowing content</div>
                <div class="mb-64">Overflowing content</div>
                <div class="mb-64">Overflowing content</div>
                <div class="mb-64">Overflowing content</div>
                <div class="mb-64">Overflowing content</div>
              </div>
            </div>
          </main>
          <!-- rhs -->
          <div class="flex-shrink-0 w-1/4 p-4">
            Right sidebar
          </div>
        </div>
        <!-- footer -->
        <div class="bg-blue-700 p-4">
          Footer
        </div>
      </div>
    </div>

    ...因此,中心列的溢出滚动行为变为可操作。

    我还建议在中心列使用overflow-y-auto,以便滚动条仅在必要时使用。

    【讨论】:

      【解决方案2】:

      这可能不是理想的解决方案,但它会有所帮助。将此规则添加到您的 CSS:

      main.flex-1.overflow-y-scroll.p-4.bg-indigo-200 {
          flex-basis: 0;
      }
      

      main.flex-1.overflow-y-scroll.p-4.bg-indigo-200 {
          flex-basis: 0;
      }
      <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet"/>
      <div>
        <div class="h-screen flex flex-col bg-gray-300">
          <!-- header -->
          <div class="bg-blue-700 p-4">
            Nav
          </div>
          <div class="flex-grow flex flex-row justify-center">
            <!-- lhs -->
            <div class="flex-shrink-0 w-1/4 p-4">
              Left menu
            </div>
            <!-- center -->
            <div class="flex-1 flex flex-col bg-white">
              <div class="border-b-2 m-4 pb-2 border-gray-200">Search</div>
              <main class="flex-1 overflow-y-scroll p-4 bg-indigo-200">
                <div class="relative">
                  <div class="mb-64">Overflowing content</div>
                  <div class="mb-64">Overflowing content</div>
                  <div class="mb-64">Overflowing content</div>
                  <div class="mb-64">Overflowing content</div>
                  <div class="mb-64">Overflowing content</div>
                  <div class="mb-64">Overflowing content</div>
                </div>
              </div>
            </main>
            <!-- rhs -->
            <div class="flex-shrink-0 w-1/4 p-4">
              Right sidebar
            </div>
          </div>
          <!-- footer -->
          <div class="bg-blue-700 p-4">
            Footer
          </div>
        </div>
      </div>

      【讨论】:

      • 很有趣,谢谢。所以flex-1 应用flex-basis: 0%,而你的样式覆盖应用flex-basis: 0。不确定您的 Tailwind 体验 - 您认为这是一个错误吗?
      • 奇怪,但我刚刚尝试将flex-basis: 0 规则应用于main 标记(flex-1.overflow-y-scroll.p-4.bg-indigo-200)并且溢出被隐藏,而flex-basis is: 0% 的工作方式不同。我无法确认这绝对是一个错误,因为我没有使用过 TailwindCss 的实践。
      • 最初,我给出了一个不完全正确的答案,因为该规则影响多个选择器。根据您的提示,我已将答案更新为更正确的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-11
      • 2011-02-20
      • 2018-05-09
      • 2015-02-03
      • 2013-07-05
      • 2018-07-28
      • 2017-10-25
      相关资源
      最近更新 更多