簡體   English   中英

如何使用 css 將元素定位在多個 div 上並調整高度

[英]How could I use css to position an element over multiple divs and have one resize height

我正在一個布局相當復雜的網站上工作。 問題是有兩個 div 完全是圓形的,但隨后被截斷以適應屏幕。 我希望內容覆蓋這兩個 div,但是,如果它高於這兩個 div,則應該在這兩個 div 之間添加空間,這樣內容就不會從最后一個(第二個)div 中滑落。

一個例子在這里: https ://codepen.io/erce312/pen/YzaKVJM(注意我使用了順風)

<div class="w-screen h-screen bg-transparent relative overflow-hidden">
  <div class="overflow-hidden absolute" style="background-color: rgb(115, 108, 64); width: 1312.5px; height: 1312.5px; top: 0px; bottom: unset; right: unset; left: 0px; z-index: 0; border-top-left-radius: 9999px; border-top-right-radius: 9999px;"></div>
</div>
<div class="flex-1 flex flex-col h-full items-center bg-purple-500">
  <div class="bg-green-200 my-10 flex flex-1">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
      tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
      felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
      tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
      est. Morbi et sem pharetra, consequat ligula imperdiet, semper
      tellus.
    </p>
  </div>
  <div class="bg-green-200 my-10 flex flex-1">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
      tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
      felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
      tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
      est. Morbi et sem pharetra, consequat ligula imperdiet, semper
      tellus.
    </p>
  </div>
  <div class="bg-green-200 my-10 flex flex-1">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
      tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
      felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
      tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
      est. Morbi et sem pharetra, consequat ligula imperdiet, semper
      tellus.
    </p>
  </div>
  <div class="bg-green-200 my-10 flex flex-1">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
      tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
      felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
      tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
      est. Morbi et sem pharetra, consequat ligula imperdiet, semper
      tellus.
    </p>
  </div>
</div>
<div class="w-screen h-screen bg-transparent relative overflow-hidden">
  <div class="overflow-hidden absolute" style="background-color: rgb(115, 108, 64); width: 1312.5px; height: 1312.5px; top: unset; bottom: 0px; right: 0px; left: unset; z-index: 0; border-bottom-left-radius: 9999px; border-bottom-right-radius: 9999px;"></div>
</div>

在示例中進行解釋:兩個綠色的圓形 div 很好。 薄荷色卡片的位置應使它們從第一個綠色圓形 div 的頂部開始並到達底部的底部。 調整中間的大小后,紫色 div 應該改變它的高度,以確保內容仍然從第一個綠色 div 的頂部到第二個綠色 div 的底部。

我可以調整中間 div 大小的唯一方法是使用 js,但如果沒有必要,我不想這樣做。

布局

編輯:

除了主 div 的高度應該來自 flexbox 而不是樣式之外,我在這里幾乎有我想要的東西。

代碼筆: https ://codepen.io/erce312/pen/YzaKVJM

<div class="h-full flex flex-col items-center relative" style="height: 3000px">
  <div class="z-10 w-screen h-screen bg-transparent relative overflow-hidden">
    <div class="overflow-hidden absolute" style="background-color: rgb(115, 108, 64); width: 1312.5px; height: 1312.5px; top: 0px; bottom: unset; right: unset; left: 0px; z-index: 0; border-top-left-radius: 9999px; border-top-right-radius: 9999px;"></div>
  </div>
  <div class="flex-1 flex flex-col h-full items-center absolute bg-purple-500">
    <div class="bg-green-200 m-10 flex flex-1 z-20">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
        tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
        felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
        tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
        est. Morbi et sem pharetra, consequat ligula imperdiet, semper
        tellus.
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
        tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
        felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
        tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
        est. Morbi et sem pharetra, consequat ligula imperdiet, semper
        tellus.
      </p>
    </div>
    <div class="bg-green-200 m-10 flex flex-1 z-20">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
        tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
        felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
        tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
        est. Morbi et sem pharetra, consequat ligula imperdiet, semper
        tellus.
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
        tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
        felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
        tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
        est. Morbi et sem pharetra, consequat ligula imperdiet, semper
        tellus.
      </p>
    </div>
    <div class="bg-green-200 m-10 flex flex-1 z-20">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
        tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
        felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
        tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
        est. Morbi et sem pharetra, consequat ligula imperdiet, semper
        tellus.
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
        tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
        felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
        tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
        est. Morbi et sem pharetra, consequat ligula imperdiet, semper
        tellus.
      </p>
    </div>
    <div class="bg-green-200 m-10 flex flex-1 z-20">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
        tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
        felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
        tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
        est. Morbi et sem pharetra, consequat ligula imperdiet, semper
        tellus.
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
        tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
        felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
        tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
        est. Morbi et sem pharetra, consequat ligula imperdiet, semper
        tellus.
      </p>
    </div>
      <div class="bg-green-200 m-10 flex flex-1 z-20">
    <p>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
      tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
      felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
      tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
      est. Morbi et sem pharetra, consequat ligula imperdiet, semper
      tellus.
            Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae
      tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum
      felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor
      tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id
      est. Morbi et sem pharetra, consequat ligula imperdiet, semper
      tellus.
    </p>
  </div>
  </div>
  <div class="w-screen z-10 h-screen bg-transparent absolute bottom-0 overflow-hidden">
    <div class="overflow-hidden absolute" style="background-color: rgb(115, 108, 64); width: 1312.5px; height: 1312.5px; top: unset; bottom: 0px; right: 0px; left: unset; z-index: 0; border-bottom-left-radius: 9999px; border-bottom-right-radius: 9999px;"></div>
  </div>
</div>

使用父(主體)節點上的網格和中心 div 內的附加包裝器嘗試此解決方案。 包裝器需要我們將內容拉伸到完整高度。 使用額外的純 CSS,我們計算並增加了我們的中心 div 元素。

樣式.css

body {
  --initial-size: 500px;
  --start-grow: 1200px;
  display: grid;
  grid-template-rows:
    1fr
    minmax(calc(var(--initial-size) + (var(--start-grow) - 100vw)), var(--initial-size))
    1fr;
  overflow-x: hidden;
  position: relative;
}

 body { --initial-size: 500px; --start-grow: 1200px; display: grid; grid-template-rows: 1fr minmax(calc(var(--initial-size) + (var(--start-grow) - 100vw)), var(--initial-size)) 1fr; overflow-x: hidden; position: relative; }
 <script src="https://cdn.tailwindcss.com"></script> <div class="w-screen h-screen bg-transparent relative overflow-hidden background-top"> <div class="overflow-hidden absolute" style=" background-color: rgb(115, 108, 64); width: 1312.5px; height: 1312.5px; top: 0px; left: 0px; z-index: 0; border-top-left-radius: 9999px; border-top-right-radius: 9999px; "></div> </div> <div class="flex-1 flex flex-col h-full items-center bg-purple-500 background-center"> <main class="flex flex-col justify-between absolute inset-0 z-10"> <div class="bg-green-200 flex py-8"> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id est. Morbi et sem pharetra, consequat ligula imperdiet, semper tellus. </p> </div> <div class="bg-green-200 flex py-8"> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id est. Morbi et sem pharetra, consequat ligula imperdiet, semper tellus. </p> </div> <div class="bg-green-200 flex py-8"> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id est. Morbi et sem pharetra, consequat ligula imperdiet, semper tellus. </p> </div> <div class="bg-green-200 flex py-8"> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id est. Morbi et sem pharetra, consequat ligula imperdiet, semper tellus. </p> </div> <div class="bg-green-200 flex py-8"> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae tempor sem. Morbi tempus ut lacus ac porttitor. Nunc eu condimentum felis, et sollicitudin metus. Morbi et nunc quam. Quisque tempor tellus dolor. Etiam nunc lectus, pulvinar eu bibendum at, feugiat id est. Morbi et sem pharetra, consequat ligula imperdiet, semper tellus. </p> </div> </div> </main> </div> <div class="w-screen h-screen bg-transparent relative overflow-hidden background-bottom"> <div class="overflow-hidden absolute" style=" background-color: rgb(115, 108, 64); width: 1312.5px; height: 1312.5px; bottom: 0px; right: 0px; z-index: 0; border-bottom-left-radius: 9999px; border-bottom-right-radius: 9999px; "></div> </div>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM