【问题标题】:Is there a way that I can make css take into account how much space a svg takes up有没有办法让css考虑svg占用多少空间
【发布时间】:2021-08-01 04:26:49
【问题描述】:

我有一个 svg 和两个 div,我正在努力做到这一点,因此当您进入网站时,2 个 div 和 svg 会占据整个屏幕,但是使用 svg 会使其更大,因为 css 不占svg 有没有办法让 css 占 svg 占用的空间

我已尝试设置 header-container 的最大高度

我也尝试过调整 2 个 div 的 vh,但在更小或更大的屏幕上,它们会变成不同的大小并且不起作用

* {
  margin: 0%;
  padding: 0%;
}
body {
  height: 100000px;
}
.header-container {
  width: 100%;
  background-color: #3C8DAD;
  max-height: 100vh;

}

.header-top {
  width: 100%;
  height: 50vh;
}
svg {
  vertical-align: top;
}
.header-bottom {
  width: 100%;
  height: 50vh;
  background-color: #F5A962;
}
.header-content {
  align-items: center;
  width: 45%;
  height: 300px;
  border: 2px red solid;
  position: absolute;
  left: 25%;
  top: 50%; 
}
.name {
  font-family: 'Titillium Web', sans-serif;
  font-size: 40px;
  color: white;
}
.job {
  font-family: 'Noto Serif', serif;
  font-size: 66px;
  font-weight: 800;
  color: white;
  margin-top: 3%;
  margin-left: 4%;
}
<div class="header-container">
  <div class="header-top">
      <div class="header-content">
          <div class="name">Andrew Saenger</div>
          <div class="job">Front-End Web Developer</div>
      </div>
  </div>
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320">
    <path fill="#F5A962" fill-opacity="1" d="M0,160L48,160C96,160,192,160,288,138.7C384,117,480,75,576,85.3C672,96,768,160,864,160C960,160,1056,96,1152,80C1248,64,1344,96,1392,112L1440,128L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"></path>
  </svg>
  <div class="header-bottom"></div>
</div>


    

【问题讨论】:

    标签: html css web svg visual-web-developer


    【解决方案1】:

    我将您的 svg 图像移到 header-top 类中,并对 css 进行了一些更改。

    * {
      margin: 0%;
      padding: 0%;
    }
    
    body {
      height: 100vh; /* changed */
    }
    
    .header-container {
      width: 100%;
      display: flex; /* added */
      flex-direction: column; /* added */
      background-color: #3c8dad;
      /* max-height: 100vh; can remove */
    }
    
    .header-top {
      width: 100%;
      height: 50vh;
      position: relative; /* added */
    }
    svg {
      width: 100%; /* added */
      height: max-content; /* added */
      position: absolute; /* added */
      bottom: -30px; /* added */
      /* vertical-align: top; can remove */
    }
    .header-bottom {
      width: 100%;
      height: 50vh;
      background-color: #f5a962;
    }
    .header-content {
      /* align-items: center; can remove */
      /* width: 45%; can remove */
      height: max-content; /* changed */
      border: 2px red solid;
      padding: 1rem;
      position: absolute;
      left: 50%; /* changed */
      top: 100%; /* changed */
      transform: translate(-50%, -50%);
      z-index: 5;
    }
    .name {
      font-family: 'Titillium Web', sans-serif;
      font-size: clamp(1.5em, 5vw, 3em); /* changed */
      color: white;
    }
    .job {
      font-family: 'Noto Serif', serif;
      font-size: clamp(2em, 5vw, 4em); /* changed */
      font-weight: 800;
      color: white;
    }
    <div class="header-container">
      <div class="header-top">
        <div class="header-content">
          <div class="name">Andrew Saenger</div>
          <div class="job">Front-End Web Developer</div>
        </div>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320">
              <path
                fill="#F5A962"
                fill-opacity="1"
                d="M0,160L48,160C96,160,192,160,288,138.7C384,117,480,75,576,85.3C672,96,768,160,864,160C960,160,1056,96,1152,80C1248,64,1344,96,1392,112L1440,128L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"
              ></path>
            </svg>
      </div>
      <div class="header-bottom"></div>

    【讨论】:

      【解决方案2】:

      Flex 可能会在这里工作。尝试将容器设置为 flex。

      .header-container {
        display: flex;
      }
      

      然后从每个子节点中删除 height 属性,并允许它使用 flex: 1 增长。

      .header-top {
        flex: 1;
      }
      
      .header-bottom {
        flex: 1;
      }
      

      SVG 元素可以保持原样。它将占用通常会占用的任何空间,并且其他元素将在容器内调整大小。

      如果max-height 不起作用,您可能需要在.header-container 上设置height: 100vh

      【讨论】:

      • 我试过了,它占用了 100vh 但我的 .header-top 和 .header-bottom 颜色不显示
      • 哦,是的,您必须稍微重新排列元素。
      【解决方案3】:

      您还可以查看网格并在最多 2 个子级的 3x3 网格上构建布局(除非您将 SVG 包含在背景中)。

      例子

      * {
        margin: 0%;
        padding: 0%;
      }
      
      .header-container {
        min-height: 100vh;
        display: grid;
        grid-template-rows: 1fr auto 1fr;
        grid-template-columns: repeat(3, 1fr);
        background-image: linear-gradient(to bottom, #3c8dad 50%, #f5a962 50%)
        /* note : you can also use grid-area if that helps set children within the grid via grid-area */
      }
      
      svg {
        grid-column: 1 / -1;
        grid-row: 2;
      }
      
      .header-content {
        grid-column: 2;
        grid-row: 1 / span 3;
        margin: auto;
      }
      
      .name {
        font-family: "Titillium Web", sans-serif;
        font-size: 40px;
        /* calc() or clamp() can be used to set that value */
        color: white;
        line-height: clamp(1ch, 25vh, 150px);
      }
      
      .job {
        font-family: "Noto Serif", serif;
        font-size: 66px;
        /* calc() or clamp() can be used to set that value */
        font-weight: 800;
        color: white;
        margin-top: 3%;
        margin-left: 4%;
        min-width: 15ch;
        /* whatever suits you */
        line-height: clamp(1.6ch, 20vh, 100px);
      }
      
      .job:first-line {
        /* it avoids the first word to be split */
        word-spacing: 5em;
        /* calc() or clamp() can be used to set that value */
      }
      <link rel="preconnect" href="https://fonts.googleapis.com">
      <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
      <link href="https://fonts.googleapis.com/css2?family=Noto+Serif&family=Titillium+Web&display=swap" rel="stylesheet">
      <div class="header-container">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320">
          <path fill="#F5A962" fill-opacity="1" d="M0,160L48,160C96,160,192,160,288,138.7C384,117,480,75,576,85.3C672,96,768,160,864,160C960,160,1056,96,1152,80C1248,64,1344,96,1392,112L1440,128L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"></path>
        </svg>
        <div class="header-content">
          <h1 class="name">Andrew Saenger</h1>
          <p class="job">Front-End Web Developer</p>
        </div>
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-30
        • 1970-01-01
        • 2018-10-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多