HTML & CSS – Practice Projects
前言
学完了 w3school 就要练练手了. 这篇是记入我学习的过程, 和知识点.
update: 2022-02-27
用文章来表达太难了, 用视频比较合理. 所以我就没有继续写了.
这里记入几篇教程:
One Page Full Website Project For Practice | HTML & CSS Responsive Website | Web Cifar 2021 (CSS)
Youtube – Sass Tutorial for Beginners - CSS With Superpowers (Sass)
Youtube – Build a Modern Landing Page With Tailwind CSS (Tailwind CSS)
参考:
One Page Full Website Project For Practice | HTML & CSS Responsive Website | Web Cifar 2021
这篇的内容会依据上面这个 step by step video 走.
Section 的运用
大部分网站首页的设计都会用多个 section 来表示. 是一个 summary 快速预览的概念, 用户对某个 section 感兴趣才导航到细节页面.
大部分人会把第一屏称它为 Hero Section
Hero Section HTML
第一屏长这样
先不管最上方的 logo 和 hamburger menu.
中间是一个 title 和一个 call to action (CTA), 然后有 animation, CTA hover 也有个变色过渡.
<body>
<!-- Hero Section -->
<section id="hero-section">
<div class="container">
<div>
<h1>Hello, My Name is Arfan!</h1>
<a href="#" class="cta">Portfolio</a>
</div>
</div>
</section>
<!-- End Hero Section -->
</body>
1. 通过注释来划分 section, 这个是一个 best practice 来的, 看注释理解结构会很舒服.
2. CSS 排版通常使用 flex, 所以元素都会被 container 抱起来, 类似 Figma 的 Frame.
3. title 一般上用 h1 来表示, CTA 一般用 anchor / button, 这里用的是 anchor 因为它是 link.
4. title 和 CTA 需要被 div wrap 起来是因为它们是一起的, container 负责居中它们.
Anchor type
视频里面, 作者用了 type 这个属性来表示 <a> anchor 是一个 button, 这个应该是错误的.
Type 属性是用来表达 MIME type 的.
Reset CSS
最简单的 Reset CSS, 为了统一 browser 行为.
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
Font-family
它用的是 Google Fonts
到 fonts.google.com search "montserrat", 点击搜索结果
选择需要的 weight (Light 300, Regular 400, Bold 700)
然后使用 import 的方式放入 style.css
sans-serif 是 fallback 字体.
定义全局字体
html {
font-size: 10px;
font-family: 'Montserrat', sans-serif;
}
它在 HTML 设定了 font-size: 10px, 往后子孙用 rem 来管理, 这个是正确的方式, 但一般上 rem 跟 browser 用户 setting 跑会更好, 而且默认是 16px 而不是 10px. 当然设计师可以有自己的设计偏好.
Remove Anchor Underline
auchor 默认都有下划线, 很破坏 design 的, 拿掉.
a {
text-decoration: none;
}
居中
Title 和 CTA 要居中, 用 flex.
.container {
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
}
高度 100vh 是占满 1 屏.
背景图 + 黑影
#hero-section {
background-image: url(img/hero-bg.png);
background-size: cover;
background-position: top center;
}
直接在 hero section 添加背景图就可以了. straightforward, 然后是黑影.
黑影其实是一个黑色的 div, 有点透明, 然后它覆盖在整个图片上面 (或者说整个 hero section 上面).
先搞一个 黑色 div 出来, 一般上会用 CSS 伪元素来完成, 而不是在 HTML 写一个 div.
#hero-section::after {
content: "";
height: 100%;
width: 100%;
background-color: black;
opacity: 0.7;
}
伪元素会被插入到 hero section 里面的最后一个.
width, height 100% 表示跟 parent (hero section) 一样大.
有了黑影. 下一步是让它覆盖整个 section. 要让东西重叠就需要定位.
#hero-section {
position: relative;
}
#hero-section::after {
position: absolute;
top: 0;
left: 0;
}
这样黑影就覆盖 hero section 了. 但有一个小问题, 那就是 hero section 里的 title 和 CTA 也被黑影覆盖了. 点击不了.
解决方法就是设置 z-index. 具体原理可以看这篇
最后 CSS 长这样
/* Hero Section */
#hero-section {
background-image: url(img/hero-bg.png);
background-size: cover;
background-position: top center;
position: relative;
z-index: 0;
} #hero-section::after {
content: "";
height: 100%;
width: 100%;
background-color: black;
opacity: 0.7;
position: absolute;
top: 0;
left: 0;
z-index: -1;
}
/* End Hero Section */
CTA Hover Transition
参考: CSS – Transition & Animation
#hero-section .cta:hover {
background-color: crimson;
}
Text Reveal CSS Animation Effect
到目前为止长这样
中间的部分还需要加上 animation
参考:
Text Reveal CSS Animation Effect | Elementor | Web Cifar 2020
这里我的做法和视频不同, 视频是用 h1>span 来做 overlay 而我用 ::after
视频通过 h1 color: transparent 让字体消失, 我用 opacity, 主要是管理方式的不同.
先把 h1 拆分成 3 个
h1-wrapper 内就会有 content: '' 作为 overlay
#hero-section .h1-wrapper {
position: relative;
width: fit-content;
}
position: relative 让 overlay 定位, fix-content 是 hug content h1, 不然它的 width 会很长
#hero-section .h1-wrapper::after {
content: '';
background-color: crimson;
position: absolute;
width: 0;
height: 100%;
top: 0;
left: 0;
}
接下来做动画给它
一开始 overlay width 0 什么都看不到
50% 的时候 width: 100% 覆盖完 h1
100% 的时候又回到 0%
left 是用来控制左到右, 右到左效果的.
第一张是 left: 20%; width 80%
第二张是 left 40%; width 60%
最后是 h1 字体一开始看不见, 等 overlay 过了才出现
时间配合 delay 的时间要配合到 overlay animation 的 duration 哦
最后让 3 个 h1 分别不同的 delay. 1 个 1 给出现, 还有把最后一个颜色变成赤红色.
CSS 和 HTML
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;700&display=swap'); * {
padding: 0;
margin: 0;
box-sizing: border-box;
} html {
font-size: 10px;
font-family: 'Montserrat', sans-serif;
} a {
text-decoration: none;
} .container {
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
} /* Hero Section */
#hero-section {
background-image: url(img/hero-bg.png);
background-size: cover;
background-position: top center;
position: relative;
z-index: 0; --duration: 2s;
} #hero-section::after {
content: '';
height: 100%;
width: 100%;
background-color: black;
opacity: 0.7;
position: absolute;
top: 0;
left: 0;
z-index: -1;
} #hero-section h1 {
font-size: 4rem;
color: white;
animation-name: text-reveal;
animation-duration: 1s;
animation-timing-function: ease;
animation-fill-mode: backwards;
} #hero-section .h1-wrapper:nth-of-type(1) h1 {
animation-delay: calc(1s + (var(--duration) / 2));
}
#hero-section .h1-wrapper:nth-of-type(2) h1 {
animation-delay: calc((1s + var(--duration)) + (var(--duration) / 2));
}
#hero-section .h1-wrapper:nth-of-type(3) h1 {
animation-delay: calc((1s + (var(--duration) * 2)) + (var(--duration) / 2));
color: crimson;
}
@keyframes text-reveal {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
} #hero-section .h1-wrapper {
position: relative;
width: fit-content;
}
#hero-section .h1-wrapper::after {
content: '';
background-color: crimson;
position: absolute;
width: 0;
height: 100%;
top: 0;
left: 0;
animation-name: text-reveal-overlay;
animation-duration: var(--duration);
animation-timing-function: ease;
}
#hero-section .h1-wrapper:nth-of-type(1)::after {
animation-delay: 1s;
}
#hero-section .h1-wrapper:nth-of-type(2)::after {
animation-delay: calc(1s + var(--duration));
}
#hero-section .h1-wrapper:nth-of-type(3)::after {
animation-delay: calc(1s + (var(--duration) * 2));
} @keyframes text-reveal-overlay {
50% {
width: 100%;
left: 0%;
}
100% {
width: 0;
left: 100%;
}
} #hero-section .cta {
font-size: 2rem;
text-transform: uppercase;
letter-spacing: 0.1rem;
color: white;
border: 2px solid crimson;
padding: 10px 30px;
display: inline-block;
margin-top: 30px;
transition: background-color 0.3s ease;
}
#hero-section .cta:hover {
background-color: crimson;
} /* End Hero Section */
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<script src="script.js" defer></script>
<title>My First Website</title>
</head>
<body>
<!-- Hero Section -->
<section id="hero-section">
<div class="container">
<div>
<div class="h1-wrapper"><h1>Hello,</h1></div>
<div class="h1-wrapper"><h1>My Name is</h1></div>
<div class="h1-wrapper"><h1>Arfan</h1></div>
<a href="#" class="cta">Portfolio</a>
</div>
</div>
</section>
<!-- End Hero Section -->
</body>
</html>
写不下去了... 感觉用视频讲会方便很多. CSS 有许多小样的东西要注意. 一个一个写又很扎乱.
所以接下来只写各个小招数招数, 还有单独的 CSS 只是就好了.
HTML & CSS – Practice Projects的更多相关文章
- 2015年最佳的12个 CSS 开发工具推荐
CSS所能做的就是改变网页的布局.排版和调整字间距等,但编写 CSS 并不是一项容易的任务,当你接触新的 CSS3 属性及其各自的浏览器前缀的时候,你会发现很伤脑经.值得庆幸的是一些优秀的开发人员提供 ...
- Github上的1000多本免费电子书重磅来袭!
Github上的1000多本免费电子书重磅来袭! 以前 StackOverFlow 也给出了一个免费电子书列表,现在在Github上可以看到时刻保持更新的列表了. 瞥一眼下面的书籍分类目录,你就能 ...
- Github 的一个免费编程书籍列表
Index Ada Agda Alef Android APL Arduino ASP.NET MVC Assembly Language Non-X86 AutoHotkey Autotools A ...
- Matplotlib数据可视化(3):文本与轴
在一幅图表中,文本.坐标轴和图像的是信息传递的核心,对着三者的设置是作图这最为关心的内容,在上一篇博客中虽然列举了一些设置方法,但没有进行深入介绍,本文以围绕如何对文本和坐标轴进行设置展开(对图像 ...
- css best practice for big team and project
推荐查看以下文章: https://segmentfault.com/a/1190000000704006 关于BEM,SMACSS,OOCSS的通俗易懂的介绍 http://philipwalton ...
- css grid layout in practice
css grid layout in practice https://caniuse.com/#search=grid subgrid https://caniuse.com/#search=cal ...
- A Complete List of .NET Open Source Developer Projects
http://scottge.net/2015/07/08/a-complete-list-of-net-open-source-developer-projects/?utm_source=tuic ...
- HTML和xhtml,CSS
索引: 初学者入门书籍 高级进阶书籍 W3C官方手册 网站架构 移动平台网站开发 视频资源 开发工具 初学者入门书籍: 中文电子书 深入浅出html pdf中文版 魅丽的网页设计 JAVA WE ...
- ConCurrent in Practice小记 (3)
ConCurrent in Practice小记 (3) 高级同步技巧 Semaphore Semaphore信号量,据说是Dijkstra大神发明的.内部维护一个许可集(Permits Set),用 ...
- ConCurrent in Practice小记 (2)
Java-ConCurrent2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0 ...
随机推荐
- 数学工具 | 如何将图片公式快速输入到Word中?
背景: 在日常科研.学习与工作中,我们可能需要使用到某些书籍.期刊或者规范上的公式,但是如果自己纯手打则会相当麻烦(数学系LaTeX高手请忽略),因此如果有工具能够解决这个问题,那真的是解决了一大痛点 ...
- C#/.NET这些实用的编程技巧你都会了吗?
DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法.算法.技巧.中间件.类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.N ...
- 题解:P9777 [HUSTFC 2023] Fujisaki 讨厌数学
令 \(f(n)=x^{n}+x^{-n}\). 可以发现 \(f(n)f(m)=x^{n-m}+x^{m-n}+x^{n+m}+x^{-n-m}=f(n-m)+f(m+n)\). 若 \(m=1\) ...
- 30FPS和120FPS在游戏中的区别
30FPS和120FPS的区别: 从动画上,时间尺度更小,渲染的时候物体单帧移动距离更小从物理引擎计算上,每一次的迭代更细致,计算更精确从渲染上:从触摸事件上,响应更及时,从触摸到屏幕,到系统捕捉,到 ...
- ssh 转发 和 切换图形化
适用环境 宿主机连接到一台服务器是,服务器系统里面的浏览器点击http网页卡顿,那么这时可以通过ssh将端口转发到宿主机 使用宿主机的浏览器点击,则不会很卡顿. [root@foundation1 ~ ...
- canvas实现截图功能
开篇 最近在做一个图片截图的功能. 因为工作时间很紧张, 当时是使用的是一个截图插件. 周末两天无所事事,来写一个简单版本的截图功能. 因为写的比较简单,如果写的不好,求大佬轻一点喷 读取图片并获取图 ...
- vue pinia sessionstorage 数据存储不上的原因
vue pinia sessionstorage 的坑 默认的配置是开始 localStorage 如果用 sessionstorage 则发现数据存储不上 ,是因为缺少了序列化和反序列化 impor ...
- 【SpringBoot】08 探索配置方式 Part4 优先加载的路径
配置文件的加载位置: SpringBoot启动会扫描i以下为位置的applicationproperties 或者application.yml文件,作为springboot的默认配置文件 优先级从高 ...
- 【Project】原生JavaWeb工程 02 登陆业务的流程(第一阶段样例)
1.对用户信息的描述 首先用户有一些基本信息: 最简单的: 用户名称 + 用户密码 然后是用户状态,例如封号,注销,停用,等等 用户名称 + 用户密码 + 账号状态 接着为了防止脚本攻击,又产生了图形 ...
- AI的技术发展:记忆与想象力 —— 【人工智能】记忆、想象与AI | 查兰·兰加纳特 | 心理学与神经科学家 | 人脑如何记忆 | 内部模型 | 稳定可塑性难题 | 想象力的由来 | AI内容传播 | 脑机接口BCI
原文地址: https://www.youtube.com/watch?v=cHYKbVP1GTQ 加利福尼亚大学戴维斯分校教授.心理学家兼神经科学家查兰·兰加纳特Charan Ranganath,最 ...