在具有相同宽度和高度的百分比的容器内创建一个div

时间:2019-02-23 18:42:11

标签: html css

我有一个容器,其高度是其父容器的30%,其宽度是其100%,因此当用户调整窗口大小时,容器会发生变化,而宽度和高度却不相等。

我正在尝试使圆心居中且宽度和高度相等。

因此,我将圆的高度设置为80%,现在只需要将宽度设置为其高度即可。这是代码:

  <div class="image-container">
    <div class="image">

    </div>
  </div>

.image-container{
  height:30%;
  background-color: red;
  display: flex;
  justify-content: center;
  align-items: center;
}

.image{
  background-color: blue;
  height: 80%;
  width: 40px;
  border-radius: 50%;
}

这是jsfiddle:https://jsfiddle.net/2tsa3gwj/1/

1 个答案:

答案 0 :(得分:0)

几乎所有有关使用CSS来确定宽高比的示例都取决于宽度:在您的情况下,您实际上是依靠百分比高度来确定宽度的,这可能会有些问题。

解决该问题的一种方法是简单地注入纵横比为1:1的“ sizer”元素,并通过允许其扩展到100%来确定.image元素的大小其父级的高度。这可以通过使用带有方形视框的虚拟<svg>元素来完成,例如0 0 1 1

<svg viewBox="0 0 1 1"></svg>

唯一的陷阱是,如果您在.image元素内有任何内容,则必须对其进行绝对定位,以免干扰<svg>元素所要求的大小调整。

.body{
  background-color: green;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
}

.container{
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  display: flex;
  justify-content: center;
  align-items: center;
}

.inner{
  background-color: white;
  width: 75%;
  height: 70%;
  border-radius: 10px;
}

.image-container{
  height:30%;
  background-color: red;
  display: flex;
  justify-content: center;
  align-items: center;
}

.image{
  background-color: blue;
  height: 80%;
  border-radius: 50%;
}

.sizer {
  width: auto;
  height: 100%;
}
<div class="body">
  <div class="container">
    <div class="inner">
      <div class="image-container">
        <div class="image">
          <svg class="sizer" viewBox="0 0 1 1"></svg>
        </div>
      </div>
    </div>
  </div>
</div>