要检测屏幕宽度的变化,请使用媒体查询。你可以设定任何
font-size
根据你的媒体断点。我同意,媒体断点在使用时无法检测列数的变化
grid-template-columns
auto-fit
.但它很友好。
连接
网格模板列
计数和字体大小可以使用以下方法。
main {
grid-template-columns: repeat(2, 1fr);
}
main section:first-child h1 {
font-size: 28px;
}
@media (max-height: 475px) {
main {
grid-template-columns: repeat(1, 1fr);
}
main section:first-child h1 {
font-size: 36px;
}
}
或者,如果要计算列数并检测由
自动装配
-这是JavaScript的任务。
生成简单的JavaScript,计算第一列中的块数,比较它们的
offsetTop
.然后我们计算CSS变量中的列数
--cols
例如,我们可以在任何地方使用它
font-size: calc(36px / var(--cols));
countCols();
window.addEventListener("resize", function() {
countCols();
});
function countCols() {
let cols = 0;
let mainOffsetTop = document.querySelector('main section').offsetTop; /* main offset top */
let mainSections = document.querySelectorAll('main section');
for (let i = 0; i < mainSections.length; i += 1) {
/* (section offset top) and (main offset top) == for the first row elements */
if((mainSections[i].offsetTop - mainOffsetTop) == 0) {
cols++;
} else {
break;
}
}
// getting CSS variable in body
document.documentElement.style.setProperty('--cols', cols);
}
main {
display: grid;
color: rgb(107, 107, 107);
font-size: 1em;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
grid-auto-flow: row;
}
main section:first-child h1 {
padding-left: var(--page-left-padding);
font-size: calc(36px / var(--cols));
}
main section article {
display: grid;
grid-template-columns: repeat(2, 1fr);
}
main section article div {
align-self: center;
font-size: 0.3em;
}
main section article div:last-child {
padding-bottom: 3em;
}
main section article p {
font-size: 1em;
}
ul,
li {
text-decoration: none;
list-style: none;
}
<main>
<section>
<h1>If you resize, this text will be positioned above, not to the side.</h1>
</section>
<section>
<article>
<p>Lorem Ipsum</p>
<div>
<li>Lorem ipsum dolor sit amet</li>
<li>consectetur adipiscing elit</li>
<li>Praesent iaculis tempor</li>
<li>nulla nec rutrum. Donec eu purus</li>
<li>uspendisse potenti</li>
<li>libero sem sollicitudin</li>
</div>
</article>
<article>
<p>Mauris sem tortor</p>
<div>
<li>Lorem ipsum dolor sit amet</li>
<li>consectetur adipiscing elit</li>
<li>Praesent iaculis tempor</li>
<li>nulla nec rutrum. Donec eu purus</li>
<li>uspendisse potenti</li>
<li>libero sem sollicitudin</li>
</div>
</article>
</section>
</main>