前言

学完了 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

CSS – Transition & Animation

这里我的做法和视频不同, 视频是用 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的更多相关文章

  1. 2015年最佳的12个 CSS 开发工具推荐

    CSS所能做的就是改变网页的布局.排版和调整字间距等,但编写 CSS 并不是一项容易的任务,当你接触新的 CSS3 属性及其各自的浏览器前缀的时候,你会发现很伤脑经.值得庆幸的是一些优秀的开发人员提供 ...

  2. Github上的1000多本免费电子书重磅来袭!

    Github上的1000多本免费电子书重磅来袭!   以前 StackOverFlow 也给出了一个免费电子书列表,现在在Github上可以看到时刻保持更新的列表了. 瞥一眼下面的书籍分类目录,你就能 ...

  3. Github 的一个免费编程书籍列表

    Index Ada Agda Alef Android APL Arduino ASP.NET MVC Assembly Language Non-X86 AutoHotkey Autotools A ...

  4. Matplotlib数据可视化(3):文本与轴

      在一幅图表中,文本.坐标轴和图像的是信息传递的核心,对着三者的设置是作图这最为关心的内容,在上一篇博客中虽然列举了一些设置方法,但没有进行深入介绍,本文以围绕如何对文本和坐标轴进行设置展开(对图像 ...

  5. css best practice for big team and project

    推荐查看以下文章: https://segmentfault.com/a/1190000000704006 关于BEM,SMACSS,OOCSS的通俗易懂的介绍 http://philipwalton ...

  6. css grid layout in practice

    css grid layout in practice https://caniuse.com/#search=grid subgrid https://caniuse.com/#search=cal ...

  7. 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 ...

  8. HTML和xhtml,CSS

    索引: 初学者入门书籍 高级进阶书籍 W3C官方手册 网站架构 移动平台网站开发 视频资源 开发工具 初学者入门书籍: 中文电子书    深入浅出html pdf中文版 魅丽的网页设计 JAVA WE ...

  9. ConCurrent in Practice小记 (3)

    ConCurrent in Practice小记 (3) 高级同步技巧 Semaphore Semaphore信号量,据说是Dijkstra大神发明的.内部维护一个许可集(Permits Set),用 ...

  10. ConCurrent in Practice小记 (2)

    Java-ConCurrent2.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0 ...

随机推荐

  1. tp5生命周期

    https://www.kancloud.cn/manual/thinkphp5/118011 1.入口文件 用户发起的请求都会经过应用的入口文件,通常是 public/index.php文件.当然, ...

  2. .NET科普:.NET简史、.NET Standard以及C#和.NET Framework之间的关系

    最近在不少自媒体上看到有关.NET与C#的资讯与评价,感觉大家对.NET与C#还是不太了解,尤其是对2016年6月发布的跨平台.NET Core 1.0,更是知之甚少.在考虑一番之后,还是决定写点东西 ...

  3. AT_agc019_b 题解

    洛谷链接&Atcoder 链接. 题目简述 给定一个字符串 \(A\),可以选择区间 \([i,j]\) 翻转一次,求能得到多少本质不同的字符串.(\(A\) 的长度不超过 \(2 \time ...

  4. ElementUI Dialog 结合Vue实现对话框body“二分”布局

    Dialog 结合Vue实现对话框body"二分"布局 需求描述 如下图, 把对话框body内容部分,分成上下两部分,其中上部分高度根据窗口大小动态调整,如果内容过多,则出现滚动条 ...

  5. vue table表格实现无缝滚动 鼠标进入可悬停

    <el-table ref="table" :data="tableData" :header-cell-style="{background: ...

  6. centos8配置网络环境及阿里云网络yum源

    一.centos8配置网络环境 1.修改配置网卡配置文件 [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens18 TYPE ...

  7. 12、SpringMVC之拦截器

    12.1.环境搭建 创建名为spring_mvc_interceptor的新module,过程参考9.1节和9.5节 12.1.1.页面请求示例 <a th:href="@{/test ...

  8. 【Vue】使用iframe解决多应用整合问题(微前端)

    一.需求背景 有老系统需要重构,新做的系统需要做一个大一统的整合,类似一个分类栏目 在菜单位置罗列出有什么子系统应用,点击对应的应用菜单,展示区跳转到相应的子系统应用中 我用Excel简单描述了下系统 ...

  9. 【Java】SPI机制

    SPI全称: 服务供应商接口 Service Provider Interface 服务发现机制 入门概念视频来自于: https://www.bilibili.com/video/BV1E44y1N ...

  10. 使用 C# 和 ONNX 來玩转Phi-3 SLM

    LLM 席卷世界刷新 AI 的认知之后,由于 LLM 需要的硬件要求实在太高,很难在普通设备上运行,因此 SLM 逐漸受到重視,Phi-3 SLM 是由 Microsoft 所开发的模型,可以在你的电 ...