我想平铺一个像这样的图像:我最终得到的是:。 这是我的HTML,CSS和JavaScript代码:
window.onload = newWindow ;
function newWindow() {
var data = JSON.parse(phrases);
console.log(data);
for (let i = 0 ; i < data.length ; i++) {
let column = document.createElement("DIV");
column.className = "column";
let card = document.createElement("DIV");
var br = document.createElement("br");
card.className = "card";
let theme = `theme : ` + data[i].theme;
let content = document.createTextNode(theme)
card.appendChild(content);
card.appendChild(br);
var br1 = document.createElement("br");
let sourceText = `sourceText : ` + data[i].sourceText;
content = document.createTextNode(sourceText);
card.appendChild(content);
card.appendChild(br1);
var br2 = document.createElement("br");
let translation = `translation : ` + data[i].translation;
content = document.createTextNode(translation);
card.appendChild(content);
card.appendChild(br2);
column.appendChild(card);
document.getElementById("cards-container").appendChild(column);
}
}
body {
font-family: Arial, Helvetica, sans-serif;
}
.row{
display: grid;
grid-template-columns: 33% 33% 33%;
}
.column {
margin: 10px;
}
.card {
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
padding: 10px;
text-align: center;
background-color: #f1f32f;
}
.card:hover {
box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);
}
<!DOCTYPE html>
<html lang>
<head>
<title>Greeting Cards</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="styles.css">
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.min.js"></script>
<script src="./scripts.js"></script>
<script type="text/javascript" src="Phrases.json"></script>
</head>
<body>
<div id="cards-container" class="row">
</div>
</body>
</html>
数据来自我成功解析的外部JSON
文件。我如何调整我的CSS,以便我可以在列中平铺我的div
s,无论第一张图像中的div
的最大大小是多少?
我需要3列。
我的问题是严格地将元素定位在第一张图像中。我想要一个vanilla JavaScript和/或JQuery,CSS和HTML的解决方案,而不是像Bootstrap这样的任何其他框架。
我不会亲自在网格上做这件事。
这是我的方法。只是基本的东西,添加了两列,并将第二列分成两列。 https://jsfiddle.net/v1wzk9cu/2/
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test Columns Document</title>
</head>
<body>
<div id="header" class="header">Example Header</div>
<div id="Wrapper">
<div id="column1" class="column">
<div class="note"> </div>
<div class="note"> </div>
<div class="note"> <br> <br> <br> </div>
<div class="note"> </div>
<div class="note"> </div>
</div>
<div id="column2" class="column">
<div id="columnA" class="twoColumns">
<div class="noteCol2"> <br> <br> <br> </div>
<div class="noteCol2"> <br> </div>
<div class="noteCol2"> <br> <br> </div>
<div class="noteCol2"> </div>
</div>
<div id="columnB" class="twoColumns">
<div class="noteCol2"><br> <br> <br> <br> </div>
<div class="noteCol2"> </div>
<div class="noteCol2"><br> <br> </div>
<div class="noteCol2"> </div>
</div>
</div>
</div>
</body>
</html>
和CSS
.column{
background-color: #FF3636;
float:left;
}
.twoColumns{
background-color: #FF3636;
float:left;
}
.note{
width: 95px;
background-color: #FFF34D;
border: 1px black solid;
margin: 3px;
padding: 10px;
}
.noteCol2{
width: 95px;
background-color: #FFF34D;
border: 1px black solid;
margin: 3px;
padding: 10px;
}
#Wrapper{
margin: auto;
max-width: 450px;
}
所以我认为最简单的解决方案是flexbox,虽然更强大的解决方案是javascript,其算法可以根据所需的列计算空间。
我无权访问您的JSON,但在下面您将找到一个与您拥有的结构非常相似的结构:
<div class="wrapper">
<div class="card">
This is a card 01
</div>
<div class="card">
This is a card 01
</div>
<div class="card">
This is a card 01
</div>
<div class="card">
This is a card 01
</div>
<div class="card">
This is a card 01
</div>
<div class="card">
This is a card 02
</div>
<div class="card">
This is a card 03
</div>
<div class="card">
This is a card 04<br />
Its bigger
</div>
<div class="card">
This is a card 05
<br />
Its bigger
<br />
Its bigger
<br />
Its bigger
</div>
<div class="card">
This is a card 06
<br />
Its bigger much bigger
</div>
<div class="card">
This is a card 07
</div>
<div class="card">
This is a card 08
<br />
Its bigger
<br />
Its bigger
</div>
<div class="card">
This is a card 09
<br />
Its bigger
<br />
Its bigger
<br />
Its bigger
</div>
</div>
有点css:
.wrapper {
width: 100%;
max-height: 200px;
display: flex;
flex-flow: column wrap;
}
.card {
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
padding: 10px;
text-align: center;
background-color: #f1f32f;
margin: 5px;
}
.card:hover {
box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);
}
flexbox将尝试填充垂直空间,当没有空间时,它将水平折断并尝试再次垂直填充,依此类推。因此网格将基于包装器div的高度。你可以在这里找到一个有效的例子: