如何通过添加一行CSS代码来使HTML响应

哈Ha! 我向您呈现Per Harald Borgen撰写的文章“ 如何通过添加一行CSS来使HTML响应 ”的翻译。



在本文中,我将教您如何使用CSS Grid创建一个很酷的图像网格,该网格根据屏幕或浏览器窗口的宽度来更改列数。

最酷的事情是, 要增加响应速度,您将需要编写一行CSS代码

这意味着我们不需要使用丑陋的类名(例如col-sm-4,col-md-8)来整理HTML或创建媒体查询来适应每个屏幕的大小。

我还创建了一个免费的CSS Grid课程。 单击以获得对课程的完全访问权限



让我们开始吧!

客制化


这是我们初始网格的样子:



HTML代码:

<div class="container"> <div>1</div> <div>2</div> <div>3</div> <div>4</div> <div>5</div> <div>6</div> </div> 

CSS代码:

 .container { display: grid; grid-template-columns: 100px 100px 100px; grid-template-rows: 50px 50px; } 

注意:在示例中,这里不考虑几种基本样式,因为它们与CSS Grid无关。

让我们开始使列具有响应性。

基本反应


CSS Grid的值写为fr,可让您将容器分成多个部分,其数量可以是任意数量。

将grid-template-columns的值更改为1fr 1fr 1fr

 .container { display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 50px 50px; } 

现在,网格将容器的整个宽度分为三部分。 每列都有自己的部分(单位)。 结果如下:



如果我们将grid-template-columns的值更改为1fr 2fr 1fr ,则第二列的宽度将是其他列的两倍,总宽度将为四个单位(第二列占用其中两个,其余则一次占用一个。)这看起来像:



换句话说,使用fr值可以更轻松地更改列的宽度。

响应速度更快


但是,由于该网格将始终具有固定的列数,因此上面的示例并未提供所需的响应度。 我们希望网格根据容器的宽度更改列数。 为此,您需要学习三个新概念。

重复()

让我们从repeat()函数开始。 这是指定行和列参数的更方便的方法:

 .container { display: grid; grid-template-columns: repeat(3, 100px); grid-template-rows: repeat(2, 50px); } 

换句话说, 重复功能(3,100px)与写入100px 100px 100px相同。 第一个参数指示所需的列数或行数,第二个参数指示其宽度。 我们得到与开始时相同的布局:



自动适应

接下来,考虑自动拟合功能。 用自动拟合功能替换指定的列数:

 .container { display: grid; grid-gap: 5px; grid-template-columns: repeat(auto-fit, 100px); grid-template-rows: repeat(2, 100px); } 

这导致以下结果:



现在,网格根据容器的宽度更改了列数。

实际上,该功能只是试图在容器中放置多达100像素宽的列。

但是,如果我们编码所有列都将具有一定宽度,例如严格地为100px,则由于将不会显示列的整个宽度,因此我们将永远无法获得所需的灵活性。 如上图所示,网格在右侧留有空白。

minmax()

我们需要解决的最后一个函数称为minmax() 。 我们只是将100px替换为minmax(100px,1fr) 。 这是最新的CSS代码:

 .container { display: grid; grid-gap: 5px; grid-template-columns: repeat(auto-fit, minmax(100px, 1fr)); grid-template-rows: repeat(2, 100px); } 

请注意,通过编写一行CSS代码来添加所有响应能力。

这导致以下结果:



如您所见,这很好用。 minmax()函数定义了一个大于或等于min且小于或等于max的大小范围。

因此,列将始终具有至少100个像素的大小。 但是,如果有更多可用空间,则网格将简单地将其平均分配到每个列之间。

添加图像


现在,最后一步是添加图像。 这与CSS Grid无关,但是让我们看一下这一步。

我们将从在每个网格元素内添加图像标签开始。

 <div><img src="img/forest.jpg"/></div> 

为了使图像适合元素的大小,我们将其设置为与元素本身一样宽和高,然后使用object-fit:cover。 然后,图像将覆盖为其提供的整个区域,并且如有必要,浏览器将对其进行裁剪。

 .container > div > img { width: 100%; height: 100%; object-fit: cover; } 

结果如下:



仅此而已! 现在您知道CSS Grid中最复杂的概念之一。

浏览器支持


在结束之前,我还应该提到浏览器支持。 在撰写本文时, 全球92%的Web浏览器都支持CSS Grid

我认为,掌握CSS Grid是前端开发人员的必备技能。

因此,如果您对此主题感兴趣,请查看我的CSS Grid课程。

感谢您的阅读! 我叫Per,是Scrimba (创建交互式屏幕代码的工具)的共同创始人。

Source: https://habr.com/ru/post/zh-CN477144/


All Articles