欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何在flex div中制作包含寬度和高度的畫布?

傅智翔1年前7瀏覽0評論

TL;DR:下面是一個完整的頁面示例:https://jsfiddle.net/rfp8xv6g/show(此處可編輯:https://jsfiddle.net/rfp8xv6g),如何使畫布(帶紫色邊框)垂直完全包含在容器中,而不硬編碼一個高度?

下面是一個簡化的例子。我有以下布局(點擊& quot整頁& quot以便能夠看到它)。

左列包含一個包裝器,其中包含幾個& lt畫布& gt一個在另一個之上(為了簡單起見,這里只有一個畫布)。

問題:如果畫布寬度/高度很高(在畫布坐標系中,這里是4000x3000),則整個畫布不可見(高度太高,它會超出視口)。

如何使畫布縮放/收縮到包含在左欄中?(沒有頁面垂直滾動條)

此處最大寬度:100%;使畫布水平放置。

但是max-height:100%;不做任何效果:畫布沒有被垂直包含,為什么?

* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

html,
body, 
.page {
  height: 100%;
  width: 100%;
}

.page {
  background-color: red;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}

.left-column {
  background-color: green;
  display: flex;
}

.right-column {
  background-color: orange;
  flex: 1;
}

canvas {
  border: 3px solid magenta;
  max-width: 100%;
  max-height: 100%;
}

<div class="page">
  <div class="left-column">
    <div class="canvas-wrapper">
      <canvas width="4000" height="3000"></canvas>
    </div>
  </div>
  <div class="right-column">
    RIGHT
  </div>
</div>

如果您希望畫布適應flex元素的高度,那么您不需要指定align-items:center;flex容器中的值。或者需要添加align-self:stretch;到撓性元件。 您也可以使用flexbox來居中畫布容器。

事實上,解決問題的所有代碼都可以歸結為:

.zone-left-column {
  align-self: stretch;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

.canvas-wrapper {
  min-height: 0;
}

下面是一個完整的例子:

* {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

html,
body,
.page {
  height: 100%;
}

.page {
  max-width: 70rem;
  margin: 0 auto;
  padding: 1rem;
  display: flex;
  flex-direction: column;
  background-color: yellow;
}

.toolbar {
  background-color: rgba(200, 200, 200, 0.5);
  margin-bottom: 1rem;
  display: flex;
  align-items: center;
  justify-content: space-around;
  flex: 0 0 5rem;
}

.container {
  background-color: red;
  flex: 1;
  overflow: hidden;
  gap: 2rem;
}

.flex-horizontal {
  display: flex;
  justify-content: center;
  align-items: center;
}

.zone-left-column {
  background-color: green;
  /* add