section {
	display: grid;
}

section:first-child {
	/* Fill as many `100px` columns as possible. */
	grid-template-columns: repeat(auto-fill, 100px);
}

section:nth-child(2) {
	/* Add flexible `1fr` columns when larger than `100px`. */
	grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}

section:last-child {
	/* Same, but always fit them to the row! */
	grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
}
body {
	font-family: sans-serif;
	padding: 20px;
}

section {
	background-color: gold;
}

section:not(:first-child) {
	margin-top: 20px;
}

div {
	background-color: tomato;
	border-bottom: 2px solid firebrick;
	border-right: 2px solid firebrick;
	padding: 5px;
}
<!DOCTYPE html>
<html>
	<head>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<link href="/assets/styles/reset.css" rel="stylesheet">
		<link href="setup.css" rel="stylesheet">
		<link href="style.css" rel="stylesheet">
	</head>
	<body>
		<section>
			<div>
				<p>Item 1</p>
			</div>
			<div>
				<p>Item 2 <br>with line <br>breaks</p>
			</div>
			<div>
				<p>Item 3 <br>also</p>
			</div>
			<div>
				<p>Item 4</p>
			</div>
			<div>
				<p>Item 5</p>
			</div>
		</section>
		<section>
			<div>
				<p>Item 1</p>
			</div>
			<div>
				<p>Item 2 <br>with line <br>breaks</p>
			</div>
			<div>
				<p>Item 3 <br>also</p>
			</div>
			<div>
				<p>Item 4</p>
			</div>
			<div>
				<p>Item 5</p>
			</div>
		</section>
		<section>
			<div>
				<p>Item 1</p>
			</div>
			<div>
				<p>Item 2 <br>with line <br>breaks</p>
			</div>
			<div>
				<p>Item 3 <br>also</p>
			</div>
			<div>
				<p>Item 4</p>
			</div>
			<div>
				<p>Item 5</p>
			</div>
		</section>
	</body>
</html>