P5,HTML & CSS - 在网格区域内衬 DOM 个元素
P5, HTML & CSS - Lining DOM elements inside a grid area
我正在努力将 P5.JS 滑块放入 CSS 网格。
不幸的是,我没有在代码片段函数中展示它。因此,我将粘贴我的代码并通过图像显示结果。
我的一部分 HTML:
<body>
<div class="menu">
<h1>MENU</h1>
</div>
<div class="outer">
<div class="container">
<div class="temp">
</div>
<div class="draw">
<p id="canvas"></p>
</div>
<div class="label">
<label for="shapes">Shapes</label><br>
<label for="scale">Scale</label><br>
<label for="rotation">Rotation</label><br>
<label for="background">Background</label><br>
<label for="stroke">Stroke</label><br>
<label for="fill">Fill</label><br>
</div>
<div class="slider">
<p id="shape"> </p>
<p id="scale"> </p>
<p id="rotation"> </p>
<p id="background"> </p>
<p id="stroke"> </p>
<p id="fill"> </p>
<p id="position"> </p>
<p id="save"> </p>
<p id="record"> </p>
</div>
<div class="check">
<p id="checkshape"> </p>
<p id="checkscale"> </p>
<p id="checkbackground"> </p>
<p id="checkstroke"> </p>
<p id="checkfill"> </p>
<p id="checkposition"> </p>
<p id="checkpaint"> </p>
<p id="checkrecord"> </p>
</div>
</div>
</div>
</body>
</html>
我的一部分 CSS:
* {
margin: 0;
padding: 0;
}
.outer div {
outline: 1px solid red;
min-height: 20px;
}
body {
width: 100vw;
}
.menu {
width: 100%;
height: 60px;
}
.outer {
display: flex;
justify-content: center;
margin-top: 1vw;
}
.container {
width: 95%;
display: grid;
grid-template-columns: 1fr 4fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr;
gap: 1vw;
}
.menu,
.container div {
border: 1px solid black;
box-sizing: border-box;
}
.temp {
grid-column: 1 / 2;
}
.draw {
grid-column: 2 / 3;
aspect-ratio: 1 / 1;
}
.label {
grid-column: 3 / 4;
text-align: right;
}
.slider {
grid-column: 4 / 5;
}
.check {
grid-column: 5 / 6;
}
我的部分P5.JS(仅展示部分滑块)
function setup(){
canvasForPosition = createCanvas(windowWidth, windowHeight);
canvasForPosition.parent('#canvas');
sliderSize = createSlider(10, height,height/2,0.00001);
sliderSize.parent('#scale');
checkScaleAuto = createCheckbox('Automate', false);
checkScaleAuto.parent('#checkscale');
}
结果:
衬里应该是这样的。 + 我想在左边添加额外的标签(这里的定位是用 p5.position 做的):
我想知道我是否可以以某种方式将另一个网格嵌套到我的第 3/6 列中,以及它是否与所有浏览器兼容。或者也许有一个选项可以将复选框的高度与文本和滑块相匹配。
感谢您的帮助。
最大值
考虑到您的 HTML 的结构,并且需要让最后 3 列的内容对齐,最简单的事情似乎是使每个列成为一列、多行网格。将每行分成大小相等的 31 行。
然后您可以将每个 HTML 元素准确地放在您想要的行中,以便 labels/sliders/checks 按要求对齐。
去掉多余的br元素,让grid做定位。
<head>
<style>
* {
margin: 0;
padding: 0;
}
.outer div {
outline: 1px solid red;
min-height: 20px;
}
body {
width: 100vw;
}
.menu {
width: 100%;
height: 60px;
}
.outer {
display: flex;
justify-content: center;
margin-top: 1vw;
}
.container {
width: 95%;
display: grid;
grid-template-columns: 1fr 4fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr;
gap: 1vw;
}
.menu,
.container div {
border: 1px solid black;
box-sizing: border-box;
}
.temp {
grid-column: 1 / 2;
}
.draw {
grid-column: 2 / 3;
aspect-ratio: 1 / 1;
}
.label,
.slider,
.check {
display: grid;
grid-template-rows: repeat(31, 1fr);
grid-template-columns: 1fr;
gap: 0.25vw;
}
.label {
grid-column: 3 / 4;
text-align: right;
}
.slider {
grid-column: 4 / 5;
}
.check {
grid-column: 5 / 6;
}
.label>*,
.slider>*,
.check>* {
background: lightblue;
}
</style>
</head>
<body>
<div class="menu">
<h1>MENU</h1>
</div>
<div class="outer">
<div class="container">
<div class="temp">
</div>
<div class="draw">
<p id="canvas"></p>
</div>
<div class="label">
<label for="shapes">Shapes</label>
<label for="scale">Scale</label>
<label for="rotation">Rotation</label>
<label for="background">Background</label>
<label for="stroke">Stroke</label>
<label for="fill">Fill</label>
</div>
<div class="slider">
<p id="shape"> </p>
<p id="scale"> </p>
<p id="rotation"> </p>
<p id="background"> </p>
<p id="stroke"> </p>
<p id="fill"> </p>
<p id="position"> </p>
<p id="save"> </p>
<p id="record"> </p>
</div>
<div class="check">
<p id="checkshape"> </p>
<p id="checkscale"> </p>
<p id="checkbackground"> </p>
<p id="checkstroke"> </p>
<p id="checkfill"> </p>
<p id="checkposition"> </p>
<p id="checkpaint"> </p>
<p id="checkrecord"> </p>
</div>
</div>
</div>
</body>
</html>
我没有在这里对标签等进行任何定位,因为我不知道它们要对齐到哪里。 31 行是一个建议,因此您可以将一些留作空白 space,而不用担心哪些组需要额外的边距,因为 HTML 的结构不是这样的。
我正在努力将 P5.JS 滑块放入 CSS 网格。 不幸的是,我没有在代码片段函数中展示它。因此,我将粘贴我的代码并通过图像显示结果。
我的一部分 HTML:
<body>
<div class="menu">
<h1>MENU</h1>
</div>
<div class="outer">
<div class="container">
<div class="temp">
</div>
<div class="draw">
<p id="canvas"></p>
</div>
<div class="label">
<label for="shapes">Shapes</label><br>
<label for="scale">Scale</label><br>
<label for="rotation">Rotation</label><br>
<label for="background">Background</label><br>
<label for="stroke">Stroke</label><br>
<label for="fill">Fill</label><br>
</div>
<div class="slider">
<p id="shape"> </p>
<p id="scale"> </p>
<p id="rotation"> </p>
<p id="background"> </p>
<p id="stroke"> </p>
<p id="fill"> </p>
<p id="position"> </p>
<p id="save"> </p>
<p id="record"> </p>
</div>
<div class="check">
<p id="checkshape"> </p>
<p id="checkscale"> </p>
<p id="checkbackground"> </p>
<p id="checkstroke"> </p>
<p id="checkfill"> </p>
<p id="checkposition"> </p>
<p id="checkpaint"> </p>
<p id="checkrecord"> </p>
</div>
</div>
</div>
</body>
</html>
我的一部分 CSS:
* {
margin: 0;
padding: 0;
}
.outer div {
outline: 1px solid red;
min-height: 20px;
}
body {
width: 100vw;
}
.menu {
width: 100%;
height: 60px;
}
.outer {
display: flex;
justify-content: center;
margin-top: 1vw;
}
.container {
width: 95%;
display: grid;
grid-template-columns: 1fr 4fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr;
gap: 1vw;
}
.menu,
.container div {
border: 1px solid black;
box-sizing: border-box;
}
.temp {
grid-column: 1 / 2;
}
.draw {
grid-column: 2 / 3;
aspect-ratio: 1 / 1;
}
.label {
grid-column: 3 / 4;
text-align: right;
}
.slider {
grid-column: 4 / 5;
}
.check {
grid-column: 5 / 6;
}
我的部分P5.JS(仅展示部分滑块)
function setup(){
canvasForPosition = createCanvas(windowWidth, windowHeight);
canvasForPosition.parent('#canvas');
sliderSize = createSlider(10, height,height/2,0.00001);
sliderSize.parent('#scale');
checkScaleAuto = createCheckbox('Automate', false);
checkScaleAuto.parent('#checkscale');
}
结果:
衬里应该是这样的。 + 我想在左边添加额外的标签(这里的定位是用 p5.position 做的):
我想知道我是否可以以某种方式将另一个网格嵌套到我的第 3/6 列中,以及它是否与所有浏览器兼容。或者也许有一个选项可以将复选框的高度与文本和滑块相匹配。
感谢您的帮助。 最大值
考虑到您的 HTML 的结构,并且需要让最后 3 列的内容对齐,最简单的事情似乎是使每个列成为一列、多行网格。将每行分成大小相等的 31 行。
然后您可以将每个 HTML 元素准确地放在您想要的行中,以便 labels/sliders/checks 按要求对齐。
去掉多余的br元素,让grid做定位。
<head>
<style>
* {
margin: 0;
padding: 0;
}
.outer div {
outline: 1px solid red;
min-height: 20px;
}
body {
width: 100vw;
}
.menu {
width: 100%;
height: 60px;
}
.outer {
display: flex;
justify-content: center;
margin-top: 1vw;
}
.container {
width: 95%;
display: grid;
grid-template-columns: 1fr 4fr 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr;
gap: 1vw;
}
.menu,
.container div {
border: 1px solid black;
box-sizing: border-box;
}
.temp {
grid-column: 1 / 2;
}
.draw {
grid-column: 2 / 3;
aspect-ratio: 1 / 1;
}
.label,
.slider,
.check {
display: grid;
grid-template-rows: repeat(31, 1fr);
grid-template-columns: 1fr;
gap: 0.25vw;
}
.label {
grid-column: 3 / 4;
text-align: right;
}
.slider {
grid-column: 4 / 5;
}
.check {
grid-column: 5 / 6;
}
.label>*,
.slider>*,
.check>* {
background: lightblue;
}
</style>
</head>
<body>
<div class="menu">
<h1>MENU</h1>
</div>
<div class="outer">
<div class="container">
<div class="temp">
</div>
<div class="draw">
<p id="canvas"></p>
</div>
<div class="label">
<label for="shapes">Shapes</label>
<label for="scale">Scale</label>
<label for="rotation">Rotation</label>
<label for="background">Background</label>
<label for="stroke">Stroke</label>
<label for="fill">Fill</label>
</div>
<div class="slider">
<p id="shape"> </p>
<p id="scale"> </p>
<p id="rotation"> </p>
<p id="background"> </p>
<p id="stroke"> </p>
<p id="fill"> </p>
<p id="position"> </p>
<p id="save"> </p>
<p id="record"> </p>
</div>
<div class="check">
<p id="checkshape"> </p>
<p id="checkscale"> </p>
<p id="checkbackground"> </p>
<p id="checkstroke"> </p>
<p id="checkfill"> </p>
<p id="checkposition"> </p>
<p id="checkpaint"> </p>
<p id="checkrecord"> </p>
</div>
</div>
</div>
</body>
</html>
我没有在这里对标签等进行任何定位,因为我不知道它们要对齐到哪里。 31 行是一个建议,因此您可以将一些留作空白 space,而不用担心哪些组需要额外的边距,因为 HTML 的结构不是这样的。