javascript - 无论连续 div 的最大大小如何,如何在网格中独立平铺 div?
问题描述
我想平铺这样的图像: 我最终得到的是:。
这是我的 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 列。
我的问题完全是关于定位第一张图片中的元素。我想要一个原生 JavaScript 和/或 JQuery 和 CSS 和 HTML 的解决方案,而不是像 Bootstrap 这样的任何其他框架。
解决方案
所以我认为最简单的解决方案是 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 的高度。您可以在此处找到一个工作示例:
推荐阅读
- bash - 将 code-insiders 终端命令更改为更小的命令
- reactjs - 改变函数内部的状态
- php - 从 WooCommerce 中的 create_order( $data ) 取消设置一些数据
- php - 在 Laravel 中咨询多对多关系
- javascript - 为什么我的阵列可以发送电子邮件但不能共享
- visual-studio-2015 - IronRuby 无法编译使用“nameof”运算符的 c# 项目
- video - 如何将 ABR 视频的视频/块片段组合成一个无缝视频?
- winapi - 将复杂结构传递给 Windows API
- javascript - 正则表达式匹配单词和 \n 字面意思
- arrays - MongoDB查询子文档数组的第n个元素(变量索引)