楼主: 凡哥

[图文] 音画帖小白教程(完结)

[复制链接]
一生安柠 青恬时光 幸福莓满 心想事橙 桃气满满 梅开颜笑 心若葡提 大吉大荔 樱果相依 喜上莓梢 一坛酒
 楼主| 发表于 2024-7-24 07:58 | 显示全部楼层
花简静 发表于 2024-7-23 21:11
我打开就是正常的。。运气好好

多数情况下都正常。helight机制是等待页面加载完毕再渲染,因此,页面加载正常的话没问题,若出现延时,就会渲染异常,或等较长的时间。一般来说,正常一次,今后都会正常。
点评
回复

使用道具

一生安柠 青恬时光 幸福莓满 心想事橙 桃气满满 梅开颜笑 心若葡提 大吉大荔 樱果相依 喜上莓梢 一坛酒
 楼主| 发表于 2024-7-24 08:09 | 显示全部楼层
本帖最后由 凡哥 于 2024-7-25 14:35 编辑

第四讲:给帖子添加子元素并定位

前面我们已经学会了设置帖子父元素尺寸、给帖子添加背景图片以及定位帖子等内容,现在,我们来看看如何给帖子添加必要的元素,例如一幅小图片。下面,帖子容器我们继续使用上一节的,但为了便于现场展示,我们可能会修改包括选择器名称在内的相应数据。下面,为了给帖子添加小图片,我们在CSS代码里额外设计一个id选择器 #mypic,并将图片标签作为帖子父元素的子元素放到HTML代码里:

<style>
/* 帖子父容器id选择器 */
#mama {
	position: relative;
	margin: 20px auto;
	width: 800px;
	height: 450px;
	background: url('https://638183.freep.cn/638183/t22/webp/jyiu.webp') no-repeat center/cover;
}

/* 子元素小图片id选择器 */
#mypic {
	position: absolute; /* 绝对定位 */
	left: 10px; /* 左边位置 */
	top: 10px; /* 上边位置 */
	width: 160px;
	height: 160px;
}
</style>

<!-- HTML代码 :父元素包裹一个子元素 -->
<div id="mama">
	<img id="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
</div>

请对照代码和效果,领会图片绝对定位、左边和上边位置、宽高尺寸的代码设置对图片的直接作用。注意,子元素使用绝对定位 position: absolute; 依赖于父元素的相对定位 position: relative;设置,只有父元素设置了相对定位,子元素的绝对定位才真正有效、可控。left 属性用来设定元素的左方位值,10px 的 left 值表示图片作为子元素,它将位于离主元素左边缘 10px 的地方,而 top 用来设定上边位置,这里也是 10px,表示图片处在离主元素上边缘 10px 的地方,left 和 top 合起来共同决定了图片的具体位置:在主元素的左上角,离主元素上边缘、左边缘各10个像素。

设置元素位置,除了用 left、top 表示方位,还可以使用 right、bottom,right 是右边方位,表示离主元素右边缘的距离,bottom 是底边方位,表示离主元素底边边缘的距离。一横一纵的两两组合可以快捷定位子元素的具体位置,但是必须留意,两个横向的不能在一起使用,两个纵向的也不能在一起使用。

同时注意一下 img 标签的HTML代码,它的id属性 id="mypic" 指向CSS选择器 #mypicalt 属性 alt="" 是为了代码合法需要:图片标签要求,当图片不能显示时应该有一个文本说明,你可以在引号里加入相应的文本,比如 alt="四叶草",留空也可以;src 属性必须,用来表达图片地址,地址正确的话这个标签代码显示出来的就是该地址指向的图片。img标签是一个自闭合标签,它的收尾符直接就是 />,所有自闭合标签都是使用这个符号收尾。

我们可以给父元素添加很多子元素,例如三张相同的图片。下例,帖子父元素 id 改为 papa,因为前面的讲义提到过,一个页面里不能有相同的 id,此外我们使用类选择器即 .选择器名称 统一制定图片的样式,并通过 nth-of-type() 伪类选择器设定每一张图片的具体位置:

<style>
/* 帖子父容器id选择器 */
#papa {
	position: relative;
	margin: 20px auto;
	width: 800px;
	height: 450px;
	background: url('https://638183.freep.cn/638183/t22/webp/jyiu.webp') no-repeat center/cover;
}

/* 子元素小图片class选择器 */
.mypic {
	position: absolute; /* 绝对定位 */
	width: 160px;
	height: 160px;
}
.mypic:nth-of-type(1) {
	left: 10px;
	top: 10px;
}
.mypic:nth-of-type(2) {
	right: 10px;
	bottom: 10px;
}
.mypic:nth-of-type(3) {
	left: calc(50% - 80px);
	top: calc(50% - 80px);
}
</style>

<div id="papa">
	<img class="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
	<img class="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
	<img class="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
</div>

我们之前提到过关于CSS的设置特色,后面设置的属性会覆盖前面的设置,不雷同的属性设置则继续使用前面的设置。利用这一特点,我们先将图片的共同属性设置在 .mypic 选择器里,这一部分的设置的属性只要后来不被覆盖,那么,将是三张图片共同使用的,因为三张图片的HTML代码都使用了 class="mypic" 这个class类属性值。然后,我们又使用了 .mypic:nth-of-type(N) 这样的伪类选择器来逐一设定各自不同的属性设置,比如 left 或 right、top 或 bottom 等等。伪类选择器是CSS一个伟大的创意,它的出现使得CSS的灵活性大大加强,这里我们仅需要知道怎么用 :nth-of-type(N) 就行,它很简单,只需留意两点:一是伪类选择器为谁工作——冒号前面的是什么选择器它就为那个选择器工作,上例中,它们为 .mypic 选择器工作;二是它具体指哪一个HTML元素——N是多少就对应于HTML代码中相应标签按顺序自上往下的第几个,例中,1 对应第一个 class="mypic" 的img标签,2 对应于第二个,3 对应于第三个。

最后留一个小作业:在上述代码基础上,请再加上两个相同的小图片,第四个小图片放在帖子元素的左下角、第五个小图片放在右上角,这两张图片,每一张图片离帖子主元素最近的边缘都是10px。提示:CSS代码中,需要再添加两个 :nth-of-type() 伪类选择器,在HTML代码中,同样需要添加两个img标签。你可以将代码拿到 pencil code 中进行修改并预览效果。

【附】position相对定位与绝对定位

CSS的 position 属性用于设定元素的定位方式。当一个元素定设定为绝对定位,position: absolute;,虽然其默认(属性缺省,即不设置有left、top等方位定位属性时) left 和 top 均为 0,但是,它是否处在父元素的左上角并不确定,这将依赖于其父元素是否设置有的 position 属性,有,则子元素默认在它的左上角,没有,则子元素会去寻找更上一级的父辈元素即爷爷、太爷爷、太太爷爷等等,直到找到一个设置有 position 属性的祖先元素,就待在该元素的左上角。换言之,一个设置了绝对定位的元素,left 和 top 的方位设置以其父辈、祖父辈乃至年龄更大的某一代祖先为定位依据,按从小到大的顺序往上找,找到设置有 position 的第一个祖辈元素,以它的左上角作为自己的坐标参考。这就是为什么我们强调帖子元素设置 position 为 relative 的原因之一:这个设置对子元素具备约束力,其实就是给其下的子元素提供坐标依据。

返回目录

评分

2

查看全部评分

点评
回复

使用道具

一叶知秋 版主勋章 山高为峰 山外有山 樱果相依 24 46 47 48 闲花落
发表于 2024-7-24 09:44 | 显示全部楼层
凡哥 发表于 2024-7-24 07:58
多数情况下都正常。helight机制是等待页面加载完毕再渲染,因此,页面加载正常的话没问题,若出现延时, ...

好哒,反正我进来这个贴子没有异常过
点评
回复

使用道具

一叶知秋 版主勋章 山高为峰 山外有山 樱果相依 24 46 47 48 闲花落
发表于 2024-7-24 10:06 | 显示全部楼层
凡哥 发表于 2024-7-24 08:09
.artbox > p { position: relative; margin: 10px 0; width: 1000px; font: normal 18px / 26px sans-seri ...

贴子内除了背景之外,开始添加元素啦。。
手把手教做贴。。
教程清晰,且有梯度。。
老师这个先放一张图,再变身为三张图,作业再增为五张图。。(掌握原理就容易啦,举一反五)
认真学习写作业中。。
点评
回复

使用道具

五彩结同心

发表于 2024-7-25 04:53 | 显示全部楼层
凡哥老师强调:“欢迎互动,学习重在交流。”

在本帖12楼的发帖,我对文字大小、颜色都进行了设置,怎么颜色设置就无效呢?

这与元素选择器的属性有关吗?该如何设置呢?特请教凡哥老师,谢谢~
点评
回复

使用道具

一生安柠 青恬时光 幸福莓满 心想事橙 桃气满满 梅开颜笑 心若葡提 大吉大荔 樱果相依 喜上莓梢 一坛酒
 楼主| 发表于 2024-7-25 08:11 | 显示全部楼层
扬帆 发表于 2024-7-25 04:53
凡哥老师强调:“欢迎互动,学习重在交流。”

在本帖12楼的发帖,我对文字大小、颜色都进行了设置,怎么颜 ...

HTML标签的 id 或 class 要与 CSS选择器对得上。例如,你有一个div:

<div id="pa"></div>

那么,你需要有一个这样的CSS选择器:

#pa { font-size: 30px; color: blue; }

如果你使用 class :

<div class="ba"></div>

CSS选择器就是:

.ba { ...... }

评分

1

查看全部评分

点评
回复

使用道具

一生安柠 青恬时光 幸福莓满 心想事橙 桃气满满 梅开颜笑 心若葡提 大吉大荔 樱果相依 喜上莓梢 一坛酒
 楼主| 发表于 2024-7-25 08:20 | 显示全部楼层
本帖最后由 凡哥 于 2024-7-25 13:28 编辑

第五讲:让帖子子元素动起来

上一讲我们给帖子容器添加子元素。本讲,我们将让添加到帖子里的小图片动起来,比如旋转——将来它可是多媒体音画帖的音频播放控制器呢。CSS可以设计关键帧动画,旋转、移位、变大变小变颜色都不在话下。要设计关键帧动画,CSS得用上一个特别的选择器 @keyframes,该选择器使用描述性语言描述动画的变化形态或过程。让我们通过代码来理解它:

<style>
/* CSS关键帧动画选择器语法 :@keyframes + 动画名称 */
@keyframes rot {
	from { transform: rotate(0deg); } /* 从 0 度开始旋转 */
	to { transform: rotate(360deg); } /* 到 360 度即一圈完成一个旋转周期 */
}
</style>

@keyframes 是关键帧动画选择器固有关键字,空一格后跟上自定义的运动名称 rot,接着用一组花括号包裹描述运动过程或方式的语句,语句可以很多很多,我们使用相对简单的方法,from ... to ...,从……到……的意思,忘记了的童鞋请找出幼儿园大班英语课本温习一下。你可以让运动形态是从 left: 10px;left: 300px; 发生变化,分别写成 from { left: 10px; }to { left: 300px; }, 这样将位移元素;这里,我们用一个新的属性 transform,它可以产生的运动方式有旋转(rotate)、平移(translate)、缩放(scale)、扭曲(skew),上例我们使用的是 rotate 旋转:从即 from 0deg 到即 to 360deg 实施旋转运动。

设计好动画,我们要在 #mypic 或 .mypic 选择器中调用该动画,调用方法通过属性 animation 来完成。还是看代码来加以理解:

<style>
/* #mypic 选择器 */
#mypic {
	position: absolute; /* 绝对定位 */
	left: 20px; /* 左边位置*/
	top: 10px; /* 上边位置 */
	width: 120px; /* 宽度 */
	height: 120px; /* 高度 */
	/* animation简化语法 :动画名称+运动周期时长+缓动形式+运行次数 */
	animation: rot 8s linear infinite;
}

/* 设计CSS关键帧动画 */
@keyframes rot {
	from { transform: rotate(0deg); } /* 从 0 度开始旋转 */
	to { transform: rotate(360deg); } /* 到 360 度即一圈完成一个旋转周期 */
}
</style>

#mypic 选择器多数属性设置是上一讲的内容,仅 animation 需要细细体会,它是调用CSS关键帧动画的一个属性,语法可以非常复杂,也可以用简化的方式使用它(术语称这类简化的使用方式为语法糖)。动画名称得有,rot 是我们在 @keyframes 选择器中设计的名称;一个运动周期的时间长度要有,这里是 8s,8秒的意思,8秒完成一次360度的旋转运动;linear 是匀速之意,这里用来描述运动的缓动形态,匀速、平滑运动,如果缺省则采用 ease 即两头慢中间快的缓动方式;infinite 是数学中的无穷大在CSS中的表达,大到无边无际,你可以用 5 来代替它,效果是旋转 5 次后运动会停下来。

现在我们将帖子容器的选择器以及整个帖子完整的HTML代码整合一下,动画效果就出来了:

<style>
/* 帖子父容器id选择器 */
#mama {
	position: relative;
	margin: 20px auto;
	width: 800px;
	height: 450px;
	background: url('https://638183.freep.cn/638183/t22/webp/jyiu.webp') no-repeat center/cover;
}

/* #mypic 选择器 */
#mypic {
	position: absolute; /* 绝对定位 */
	left: 20px; /* 左边位置*/
	top: 10px; /* 上边位置 */
	width: 120px; /* 宽度 */
	height: 120px; /* 高度 */
	/* animation简化语法 :动画名称+运动周期时长+缓动形式+运行次数 */
	animation: rot 8s linear infinite;
}

/* 设计CSS关键帧动画 */
@keyframes rot {
	from { transform: rotate(0deg); } /* 从 0 度开始旋转 */
	to { transform: rotate(360deg); } /* 到 360 度即一圈完成一个旋转周期 */
}
</style>

<!-- HTML代码 :父元素包裹一个子元素 -->
<div id="mama">
	<img id="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
</div>

下面给出多图运行同一个动画的代码,此代码包含了上一讲作业的答案。代码可以存为本地 .html 文档后运行或拿到 pencil code 直接运行。

<style>
/* 帖子父容器id选择器 */
#papa {
	position: relative;
	margin: 20px auto;
	width: 800px;
	height: 450px;
	background: url('https://638183.freep.cn/638183/t22/webp/jyiu.webp') no-repeat center/cover;
}

/* 子元素小图片class选择器 */
.mypic {
	position: absolute; /* 绝对定位 */
	width: 160px;
	height: 160px;
	animation: rot 8s linear infinite;
}

.mypic:nth-of-type(1) { left: 10px; top: 10px; }
.mypic:nth-of-type(2) { right: 10px; bottom: 10px; }
.mypic:nth-of-type(3) { left: calc(50% - 80px); top: calc(50% - 80px); }
.mypic:nth-of-type(4) { left: 10px; bottom: 10px; }
.mypic:nth-of-type(5) { right: 10px; top: 10px; }

/* 关键帧动画 :可以省略 from */
@keyframes rot {
	to { transform: rotate(360deg); }
}
</style>

<div id="papa">
	<img class="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
	<img class="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
	<img class="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
	<img class="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
	<img class="mypic" alt="" src="https://638183.freep.cn/638183/small/4yc.png" />
</div>

小结:运行动画需要使用关键帧动画选择器 @keyframes 设定一个自定义名称的动画,动画里使用描述元素的一个或多个属性值的方式设计动画,然后在要运行动画的HTML特定元素对应的CSS选择器中使用 animation 属性调用该动画。动画的设计可以使用一切合法的CSS属性,比如 left、top、width、height 以及转换属性 transform 等;animation 属性在调用动画时应给出动画名称(必须)、动画运行周期时长(必须)、缓动效果(可选)、运行次数(可选)等。今后的课程还会对CSS关键帧动画进行其他层面的探讨。

作业:修改本节的演示代码,令四叶草从左上角往左下角运动3次,每一次用4秒钟。提示:使用 top 属性设计 @keyframes 动画,动画设计中不能 top 和 bottom 混用,要统一使用相同的属性,要么都是 top 要么都是 bottom;计算左下角 top 值时,应考虑帖子容器的高度、子元素即图片的高度以及预留空间。

返回目录

评分

2

查看全部评分

点评
回复

使用道具

江月晃重山

发表于 2024-7-25 10:35 | 显示全部楼层
凡哥 发表于 2024-7-24 07:54
课程里讲到过两个方面的知识点:

(一)同一个页面里不能有相同id的HTML元素出现;

我这里没有看出重复
点评
回复

使用道具

江月晃重山

发表于 2024-7-25 10:36 | 显示全部楼层
扬帆 发表于 2024-7-23 22:03
请教凡哥老师:我在39楼回帖时,怎么38楼-月落空庭的帖子内容也同步被覆盖了呢? ...

我来了没看到覆盖
扬帆 2024-7-25 12:23
回复
是的,在你来之前,经请教凡哥老师我作了修改~
回复

使用道具

江月晃重山

发表于 2024-7-25 10:37 | 显示全部楼层
凡哥 发表于 2024-7-24 08:09
本帖最后由 凡哥 于 2024-7-24 12:05 编辑
.artbox > p { position: relative; margin: 10px 0; width: 1 ...

位置定位了
点评
回复

使用道具

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|千山论坛

GMT+8, 2024-9-20 05:51

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表