【发布时间】:2022-01-26 00:35:59
【问题描述】:
我很难理解 CSS 如何在页面上布置元素。这是我试图实现的布局草图:
在canvas-column-1 内部,我想添加一个画布元素,即它是canvas-column-1 的子。但是,当我这样做时,我发现这会移动 canvas-column-2 的位置,这是 canvas-column-1 的 sibling 所以我预计它会不会受到任何子元素的影响它的兄弟姐妹:
CSS:
:root {
--header-height: 100px;
--footer-height: 20px;
--header-background: cornflowerblue;
--column-1-width: 200px;
}
.header {
height: var(--header-height);
min-height: var(--header-height);
max-height: var(--header-height);
background-color: var(--header-background);
}
.main-content {
min-height: calc(100vh - var(--header-height) - var(--footer-height));
max-height: calc(100vh - var(--header-height) - var(--footer-height));
min-width: 100vw;
max-width: 100vh;
width: 100vw;
position: absolute;
top: var(--header-height);
left: 0;
right: 0;
}
.footer {
min-height: var(--footer-height);
max-height: var(--footer-height);
background-color: var(--header-background);
position: absolute;
top: calc(100vh - var(--footer-height));
left: 0;
right: 0;
}
.column-1 {
min-width: var(--column-1-width);
max-width: var(--column-1-width);
width: var(--column-1-width);
min-height: calc(100vh - var(--header-height) - var(--footer-height));
max-height: calc(100vh - var(--header-height) - var(--footer-height));
background-color: indianred;
/* display: none; hidden and does NOT take up space. */
/* -OR USE- */
/* visibility: hidden; Hidden but still takes up space. */
display: inline-block;
position: absolute;
top: 0;
left: 0;
}
.column-2 {
min-width: calc(100vw - var(--column-1-width));
max-width: calc(100vw - var(--column-1-width));
width: calc(100vw - var(--column-1-width));
min-height: calc(100vh - var(--header-height) - var(--footer-height));
max-height: calc(100vh - var(--header-height) - var(--footer-height));
background-color: blueviolet;
display: inline-block;
position: absolute;
top: 0;
left: var(--column-1-width);
}
.canvas-column-1 {
display: inline-block;
min-width: 50%;
max-width: 50%;
width: 50%;
min-height: calc(100vh - var(--header-height) - var(--footer-height));
max-height: calc(100vh - var(--header-height) - var(--footer-height));
height: calc(100vh - var(--header-height) - var(--footer-height));
background-color: antiquewhite;
}
.canvas-column-2 {
display: inline-block;
min-width: 50%;
max-width: 50%;
width: 50%;
min-height: calc(100vh - var(--header-height) - var(--footer-height));
max-height: calc(100vh - var(--header-height) - var(--footer-height));
height: calc(100vh - var(--header-height) - var(--footer-height));
background-color: darkgray;
}
.left-canvas {
width: 200px;
height: 200px;
border: 4px dashed darkblue;
}
HTML
<div>
<div class="header" >This is the header</div>
<div class="main-content">
<div class="column-1"></div>
<div class="column-2">
<div class="canvas-column-1">Canvas Column 1
<canvas #leftCanvas class="left-canvas" height="200px" width="200px"></canvas>
</div>
<div class="canvas-column-2">Canvas Column 2</div>
</div>
</div>
<div class="footer" ></div>
</div>
我使用了很多absolute 定位,主要是因为我发现当涉及到canvas-column-1 和canvas-column-2 的绝对定位时,它们相对于它们还需要一个非静态父元素,否则它们会位置或尺寸不正确。请注意,这个例子是为了让我了解 CSS 如何定位和布局元素。
这是一个jsfiddle of the example,但它又呈现出完全不同的东西
【问题讨论】:
-
“我发现这移动了
canvas-column-2的位置”是什么意思?具体会发生什么? -
@PineCode
canvas-column-2向下移动 - 问题图像中的灰色矩形。我希望它与象牙保持垂直对齐canvas-column-1