从设计到代码(第 3 天)
从设计到代码(第 3 天)
我最近正在开发一门课程,名为 三周内完成三个网页设计 .最初它是一个为期 3 周的研讨会材料,旨在成为一个包含许多实践的动手密集型研讨会。主要目标是教没有太多开发经验的人使用 HTML 和 CSS 来重现专业的设计模型——这就是为什么它被称为从设计到代码。
而且我发现即使是工作室中最简单的项目也太长了,所以我决定将它分成三个并形成一个系列。如果您想从一开始就学习该主题,请跟随。
这是 4 部分教程中的第 3 部分,如果您错过了,请查看 第 1 天 和 第 2 天 .
实施英雄横幅
接下来,我们可以看看英雄横幅部分。几乎每个网站都有这么宽敞的版块,通常有大字体、醒目的图片和一个按钮(Call To Action)来引导用户采取行动(比如,点击它)。
根据模型,我们可以将整个区域分为左右两部分。标题和描述性文字在左侧,后面是号召性用语按钮。右侧稍微复杂一些,包含一张图片和一些位于图片顶部的描述和评级。
如上所述,让我们先编写 HTML 内容。值得注意的是,在编写 HTML 时,我们必须假设页面无需任何 CSS 即可使用。标题应该是可读的,超链接应该是可点击的,并且可以将用户导航到他们需要的新地址等。
Hero Section
在这里,您可以使用 div
或者 部分
作为该部分的容器标签。我通常更喜欢 部分
作为内容的容器,以及 div
作为辅助标签。
另外,不要使用 div
除非必要。但是,通常,两者在许多情况下可以互换使用。
在任何样式之前,这部分看起来像这样:
Hero Section without CSS
使两者 块级
元素 简短的
和 媒体
横向排列,我们应该使用什么方法?没错,像导航栏一样,我们可以设置容器 英雄节
成为一个 柔性
容器:
.英雄节{
宽度:80%;
保证金:2rem auto;
显示:弯曲;
对齐项目:居中;
}
横向排列很好,但两部分的宽度似乎不均匀。图片部分占用较多空间,文字向左推。我们需要它们是半分布的:
这时,我们需要使用 弹性:1
容器中两个元素的规则并设置宽度 100%
为图像而不是默认宽度,以便图像将填充其容器的可用宽度( .game-cover
):
.hero-section>section {
弹性:1;
} .game-cover img {
宽度:100%;
}
注意这里有一个新的 CSS 语法: >
.此符号表示所选的直接子节点 .hero-section
.如果没有这个直接操作符, .hero-section 部分
会选择所有 部分
里面 .hero-section
,不管它有多深。
Evenly distributed
这 弹性:1
这里也需要一些额外的解释。这是一个典型的 CSS 缩写,它的完整形式是:
弹性增长:1;
弹性收缩:1;
弹性基础:0%;
弹性成长
是增长因子,即如何将剩余空间分配给弹性容器中的元素。仅当所有元素本身都小于容器大小时才有效。 弹性收缩
指收缩系数,即当所有flex元素的宽度超过容器的宽度时,每个元素应该按什么比例收缩。 弹性基础
指弹性元素的默认大小。
弹性布局
我们可以通过一个具体的例子来说明这些属性之间的关系。
Flex demo HTML
一开始,我们设置 容器
作为一个弹性容器,以及它们的子节点 盒子
是自动的 柔性
元素。但是由于每个单词的长度不一样,所以四个框的排列是这样的:
Flex with default settings
。容器 {
显示:弯曲;
对齐项目:居中;
间隙:1rem;
} 。盒子 {}
这是因为,默认情况下,flex 元素的 CSS 设置为 弹性:0
, IE:
弹性增长:0;
弹性收缩:1;
弹性基础:0%;
我们设置 弹性成长
在所有 div 中 盒子
class 为 1,这意味着如果容器有足够的空间,它们具有相同的增长因子:
。盒子 {
弹性增长:1;
弹性收缩:1;
弹性基础:0%;
}
此时,它们将填满整个容器并平均分配空间:
Flex:1 for items — distributed evenly
如果我们为某些元素设置不同的增长因子:
.box:nth-child(1) {
背景颜色:浅绿色;
弹性增长:2;
} .box:nth-child(4) {
弹性增长:2;
背景颜色:浅绿色;
}
那么当容器空间足够的时候,第一个和第四个元素会比其他元素增长得更快(因为它们有很大的 弹性成长
部分)。
flex-grow
弹性收缩
与 弹性成长
.当 flex 容器的宽度小于所有 flex 项的宽度之和时, 弹性收缩
定义每个元素收缩的比率。
。盒子 {
弹性增长:1;
弹性收缩:1;
弹性基础:50%;
} .box:nth-child(2) {
背景颜色:浅绿色;
弹性收缩:2;
} .box:nth-child(3) {
背景颜色:浅绿色;
弹性收缩:2;
}
例如,在本例中,我们设置 弹性基础
到 50%,每个 flex 元素从父元素的 50% 收缩或拉伸。因为容器中有四个元素,总长度超过了容器,所以 弹性收缩
生效,结果是第二个和第三个元素比其他两个收缩得更快,因此更小:
flex-shrink
打磨主页横幅
好吧,我们的横幅现在有一半的布局,然后我们需要做一些排版。一般来说,我们可以通过不同的字体、颜色等视觉元素来强调一些元素,使主题更加醒目,页面更加平衡。
h1 {
字体大小:48px;
字体粗细:粗体;
} . 简介 p {
字体粗细:较轻;
边距:16px 0;
}
为了自定义按钮和导航栏,我们使用颜色选择器从模型中获取紫色值: #4A43EB
.
.button-secondary {
外观:无;
填充:8px 16px;
边框半径:16px;
边框:无;
背景颜色:#4A43EB;
白颜色;
}
我们用 外观:无
在这里,重置浏览器的默认样式并为其添加圆角、背景颜色和字体颜色。
The left side of Hero Section
对于横幅的右侧,我们注意到评级内容覆盖在模型中的图像上。这种效果 级联 内容需要一点解释。
浏览器在渲染HTML的时候,是按顺序排列元素的,并没有叠加(毕竟叠加就是遮挡,也就是有些内容是看不到的)。如果我们需要一些元素 跳出来 的排列过程,并释放原来属于它的位置,然后我们需要设置元素的 位置
至 绝对
.
这样,元素就会跳出正常的文档流,并将定位留给开发人员。这时候,我们可以使用 最佳
, 剩下
, 底部
和 正确的
控制元素的绝对定位,默认坐标原点为屏幕左上角。
但大多数时候,我们并不想把屏幕的左上角作为原点,而是作为某个元素。在 CSS 中,我们可以设置 位置
一个元素的 相对的
以便其子节点的原点位于左上角(而不是屏幕的左上角)。
在这个例子中,我们想使用 。游戏结束
作为基线,然后将描述文本放在其顶部:
.game-cover {
位置:相对;
} .media .title {
位置:绝对;
底部:16px;
左:16px; 白颜色;
字体大小:14px;
字体粗细:较轻;
} .media span.rating {
左边距:8px;
}
最后,我们对图像的边角进行了一点调整,使实现更接近模型:
.game-cover img {
边框半径:32px;
}
这会产生一个带有圆角的图像和一个半径为 32 像素的圆:
Final Result of Hero Section
恭喜,我们已经完成了页面的第二部分。在这里我们了解到了一些细节 柔性
布局来实现元素在 flex 容器中的均匀分布,我们还学会了使用绝对定位( 位置:绝对
) 和相对定位 ( 位置:相对
) 使元素分层,使其在视觉上更令人愉悦。
这就是我们第 3 天的全部内容。接下来,我们将完成整个设计,看看我们如何发布该网站,以便您可以与您的朋友分享结果。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明