十个响应式页面项目

十个响应式页面项目

上接 53 个特效:

  • 53 个 CSS 特效 1
  • 53 个 CSS 特效 2
  • 53 个 CSS 特效 3(完)

照例,预览地址在 http://www.goldenaarcher.com/html-css-js-proj/,git 地址: https://github.com/GoldenaArcher/html-css-js-proj

所有的 app 除了最后一个 Paypal Clone 之外都只有一个页面

关于加载不同样式的 css,如果想要优化,可以用 How to load different css file depending on window width: smaller size not recognized 这里的一个答案去获取当前页面的 viewport 然后下载对应的 CSS:

<head><link href="themes/default/primary.css" rel="stylesheet" type="text/css" /><link href="themes/default/secondary.css" rel="stylesheet" type="text/css" /><link href="themes/default/tertiary.css" rel="stylesheet" type="text/css" /><linkhref="/static/mobile.css"media="(max-width: 500px)"rel="stylesheet"type="text/css"/><linkhref="/static/main.css"media="(min-width: 500px)"rel="stylesheet"type="text/css"/>
</head>

相对而言说可以减少一些下载代码的内容,不过如果把文件切太多份的话, HTML 发送请求也会对后端造成一定的压力……虽然说静态页面+图片不是太多的网站,这样的问题一般不是很大就是了。

Food Application

整个页面分成了四个部分,具体来说是比较简单的实现,对于 responsive 的调试,基本上也就是字体大小、padding、换行之类的差别

proj 1 landing page

这个实现挺简单的,并且小屏幕模式下其实和首页没什么特别大的区别

这里的实现就是分为一个 navbar(position 为 fixed),然后一组跳动的 icons(skew + transformation) 实现,这块需要搭配 JS 实现。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

navbar 的位移和 hover 都使用了过渡,这点在之前的小特效里面已经写过很多了,就不多赘述

menu

这里也是大屏幕和小屏幕基本没什么差别,唯一的区别就在于排版(flex-wrap 设置为 wrap,然后控制 card 的大小)

在这里插入图片描述

在这里插入图片描述

gallery

同上,不过这里的 menu 的 hover 特效还是挺好看的

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

边框的实现通过控制 box-shadow,scale 和 blur 完成:

.food-img {width: 24vw;height: 15vw;object-fit: cover;box-shadow: 0.3rem 0.3rem 0.1rem #e92929, 0.5rem 0.5rem 0.1rem #a2e946,0.7rem 0.7rem 0.1rem #297ce9, 0.9rem 0.9rem 0.1rem #e92999;transition: all 0.5s;
}.gallery-link:hover .food-img {box-shadow: 1rem 1rem 0.1rem #e92929, 2rem 2rem 0.1rem #a2e946,3rem 3rem 0.1rem #297ce9, 4rem 4rem 0.1rem #e92999;transform: scale(1.1);filter: blur(0.5rem);opacity: 0.5;
}

proj1 footer

footer 没什么好说的了

在这里插入图片描述

Creative Design

这里主要是在 HTML 那里加了个 scroll-behavior: smooth,这样可以让通过 nav 跳转页面的过程变得柔和一些,而不是直接刷的一下页面背景就跳了。另一个是 landing page 的波纹特效。

另外我个人觉得这个背景的配色是非常有问题的,我试了一下对比度的测试:

在这里插入图片描述

这个对比度肯定是不合格的,做页面设计最好还是跟一下 accessibility 测试和 WCAG AAA 标准比较好……

pro2 landing

整个首页效果如下:

在这里插入图片描述

在这里插入图片描述

波纹的效果如下:

在这里插入图片描述

实现原理是让两个正方形旋转的速度不一致上的视觉差而形成的

在这里插入图片描述

正方形本身倒是没有形变,只是单纯地旋转,这个技巧真的挺巧的

Customer

在这里插入图片描述

这里的小技巧是,border 可以使用 box0shadow 来实现,能够形成更加柔和的边框,以及这种 align,如果只是 3 张卡片,可以用 flex+ align flex-end or flex-start 的方式形成

然后……对比度真的太重要了……我在笔记本上就基本看不到 customers 这几个字,盯着看的时候感觉跟要瞎了一样……

Team

在这里插入图片描述

布局技巧跟 card 一样,这里出现的特效还是有点意思的:

在这里插入图片描述

通过 skew+改变 transform-origin+实现,因为有了一个 border-radius 的设置,所以背景要比卡片大一些,然后也需要 overflow:hidden。

Contact

这里有一个 3d 的效果,用的不多但是挺巧的:

在这里插入图片描述

Business Agency

这里整体来说一些 JS 的使用挺有趣的,CSS 方面技巧性不是特别多,前面或是之前的特效基本提过了

proj3 landing

在这里插入图片描述

这里首页有个字跳动的 CSS 效果:

在这里插入图片描述

这也使用 animation+animation delay 实现的。

proj3 about us

这里 video 倒是没有用原生 video 提供的 control,而是用 JS+fontawesome 的 icon+HTML/CSS 写的控制:

在这里插入图片描述

CSS 部分没什么好说的,主要就是一些定位上的实现,JS 部分用的是 video 提供的一些 attributes 进行的计算对进度条进行重绘:

完整控制流程如下:

const video = document.querySelector('.video');
const btn = document.querySelector('.buttons button i');
const bar = document.querySelector('.video-bar');const playPause = () => {if (video.paused) {video.play();btn.className = 'far fa-pause-circle';video.style.opacity = '.7';} else {video.pause();btn.className = 'far fa-play-circle';video.style.opacity = '.3';}
};btn.addEventListener('click', () => {playPause();
});video.addEventListener('timeupdate', () => {const barWidth = video.currentTime / video.duration;bar.style.width = `${barWidth * 100}%`;if (video.ended) {btn.className = 'far fa-play-circle';video.style.opacity = '.3';}
});

在这里插入图片描述

proj3 pricing

在这里插入图片描述

pricing 用的是 swiperjs 实现的,我这里跟着教程写发现不行,需要添加 backface-visibilit 才行,否则前后显示的内容都是一样的

.pricing-card-back,
.pricing-card-front {backface-visibility: hidden;
}

在这里插入图片描述

proj3 contact

没什么特别大的区别

在这里插入图片描述

Apple eCommerce

这个项目的特效真的挺有意思的,不过对 JS 的依赖有些高

这里有一个小 tip,如果修改字体颜色会修改元素的站位,让 CSS 产生形变,可以考虑用 scale 进行放大缩小

proj5 landing

这个是移动端和桌面版差距比较大的视频

在这里插入图片描述

在这里插入图片描述

可以看到桌面版的互动更多,移动端这里旋转的 iPhone 就变成了背景,这里一定是开了 3D 特效的,互动的效果如下:

在这里插入图片描述

这里同样也通过 JS 实现,上下控制的是 x 轴,左右 y,斜的是 z,实现如下:

document.querySelector('.top-x-control').addEventListener('click', () => {cube.style.transform = `rotateX(${(x += 20)}deg) rotateY(${y}deg) rotateZ(${z}deg)`;
});document.querySelector('.bottom-x-control').addEventListener('click', () => {cube.style.transform = `rotateX(${(x -= 20)}deg) rotateY(${y}deg) rotateZ(${z}deg)`;
});document.querySelector('.left-y-control').addEventListener('click', () => {cube.style.transform = `rotateX(${x}deg) rotateY(${(y -= 20)}deg) rotateZ(${z}deg) `;
});document.querySelector('.right-y-control').addEventListener('click', () => {cube.style.transform = `rotateX(${x}deg) rotateY(${(y += 20)}deg) rotateZ(${z}deg) `;
});document.querySelector('.top-z-control').addEventListener('click', () => {cube.style.transform = `rotateX(${x}deg) rotateY(${y}deg) rotateZ(${(z -= 20)}deg) `;
});document.querySelector('.bottom-z-control').addEventListener('click', () => {cube.style.transform = `rotateX(${x}deg) rotateY(${y}deg) rotateZ(${(z += 20)}deg) `;
});

总体来说 CSS 的框架搭好了,JS 这里就好写

iphone

比较简单的实现,背景通过 skew 实现

在这里插入图片描述

macbook

在这里插入图片描述

这个开机动画纯 CSS 写的,是真的厉害:

在这里插入图片描述

实现步骤如下:

  1. 使用合适的图片创造出 mac 屏幕半开的状态

    在这里插入图片描述

    这同样通过两张图片实现,以键盘远离人的那一侧作为 x 轴对屏幕进行就 x 轴的旋转,就能实现开关屏幕的状态

  2. 显示黑屏和 loading 的状态

    这里主要还是通过 animation delay 创造的时间差,黑屏本身和 loading bar 的实现都不是很难,但是 animation-delay 要设置好

  3. 显示开机的状态

    关键同样是 animation-delay 的设置

实现起来难度其实不是很高,主要是这个巧思很妙

iwatch

在这里插入图片描述

在这里插入图片描述

这一块的实现主要也是依赖于 JS,不过真的挺有意思的,不知道是苹果本身的实现,还是 up 想的,我还特地到苹果官方看了一下,最近的实现都是基于视频做的了。

主要也是根据点击时间修改对应的 margin,实现如下:

watchTopControl.addEventListener('click', () => {watchCases.style.marginTop = `${(axisY -= 70)}rem`;hideControl();
});watchBottomControl.addEventListener('click', () => {watchCases.style.marginTop = `${(axisY += 70)}rem`;hideControl();
});watchRightControl.addEventListener('click', () => {watchBands.style.marginRight = `${(axisX += 70)}rem`;hideControl();
});watchLeftControl.addEventListener('click', () => {watchBands.style.marginRight = `${(axisX -= 70)}rem`;hideControl();
});

CSS 部分再加一个对 margin 的 transition。

airpods

在这里插入图片描述

在这里插入图片描述

这个没啥特别的点,主要就是修改了移动端的布局。

footer

icons 应该是从 apple 上扒下来的

在这里插入图片描述

个人网页

这里的技巧基本都说过了,就直接贴图好了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

移动端布局没什么特别大的差别,无非就是卡片摊平了而已。

这里个人技能有用 JS 做一个百分比的计算,然后实现了一个 transition,不过类似的有些过很多了。

nav 的高亮通过对比当前的 scrollY 和 div 的 scrollY 实现。

顺便这种技能的百分比……究竟怎么计算的……

Cars

同样也没什么特别难的点,都是比较简单的 CSS,JS 部分用的也不多,主要就是 navbar 点击事件,贴个图完事儿

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里的 shelf 特效需要加一个 transform-style: preserve-3d; 或者用 perspective 单独创建一个 3D 环境,不知道 3D 环境是不是变了,愿教程的代码里没有用这个……

video gallery 这里有一个 mouseover 播放视频的操作,这个和上面的 click 没什么区别,这里就不重复了,换一个点击事件就可以了

Architect

这个项目有几个地方还挺有意思的,所以稍微说一说

proj7 landing page

在这里插入图片描述

这个页面移动端和电脑端没差太多,主要就是有一个图片渐变式放大的效果:

在这里插入图片描述

这个也是通过 transition 实现的,不需要 infinite,过渡一段时间就行了。如果用 scale 的话倒是不用控制太多,如果用 left/position 的话,对 bg 的定位还是比较重要的

About Us

在这里插入图片描述

这个是现实挺有趣的,因为用 grid+place-item 实现的:

在这里插入图片描述

我刚开始还以为使用定位写的,也是没想到……

不过为了实现方便,到 large device 以下就平铺了:

在这里插入图片描述

Our Team

在这里插入图片描述

这里有一个 tilt 的实现,不过是用 tilt.js 完成的,效果如下:

在这里插入图片描述

相关效果可以查看他们的官网:

在这里插入图片描述

Contact

在这里插入图片描述

没什么特点的一个 section

Tours

也是有几个比较 neat 的点

proj8 landing

在这里插入图片描述

这里有两个点,第一个是 logo(字)会跳动,这个也使用 transition+delay 就可以实现了

在这里插入图片描述

第二个就是气球的一个动态,要实现这个效果需要开启 3D 环境,让 png 按序延着 xyz 轴进行移动就可以了(使用 keyframe),最后的选择可以让气球飘回来,重复循环,或者是让气球停留在某个地方

tour list

在这里插入图片描述

在这里插入图片描述

这里有个卡片的前后置换效果,也是用比较简单的 3D 就能

review

在这里插入图片描述

这里布局没什么好说的,背景用 video 进行播放,代码如下:

<div class="video-container"><video class="bg-video" autoplay muted loop><source src="images/video.mp4" type="video/mp4" /></video>
</div>

这里移动端就回到了正常的布局节省一点空间,而不是继续使用 skew 凹造型:

在这里插入图片描述

contact

在这里插入图片描述

这个 contact 的页面不是很难,但是背景色会不断的渐变,这一点还是有点氛围感的

footer

在这里插入图片描述

这里也是比较普通的设计

wine house

这个整体做成的是一个 ppt 式的结构,原本是打算用鼠标的滚轮和点击事件完成,我试了一下,用笔记本的手势也可以,但是因为没有实现对应的手势,所以 JS 切图真快基本上是崩了,有的时候会一下子滑过四五张图片。

布局方面大概都是这种样子的:

在这里插入图片描述

换的也就背景图和中间的内容,大概也是一两张图和字这样。

除此之外 CSS 就挺简单的,大量使用 position:absolute 去完成定位,内容也挺简单的,没什么好多说,难度比较高的就是 JS 实现了:

let counter1 = 0;
let counter2 = 1;
let bool = true;const sections = document.querySelectorAll('section');
const progress = document.querySelector('.progress h2');
const circles = document.querySelectorAll('.circle');
const menu = document.querySelector('.menu');
const section1wrapper = document.querySelector('.section-1-wrapper');
const section5wrapper = document.querySelector('.section-5-wrapper');section1wrapper.style.transform = 'scale(1)';const progressCounter = () => {progress.textContent = `${counter2}/${sections.length}`;Array.from(circles).forEach((circle) => {circle.style.backgroundColor = 'transparent';});document.querySelector(`.circle-${counter2}`).style.backgroundColor = '#ddd';
};const pageController = () => {bool = true;if (counter1 === 5) {Array.from(sections).forEach((section) => {section.style.left = '0';});counter1 = 0;counter2 = 1;section1wrapper.style.transform = 'scale(1)';section5wrapper.style.transform = 'scale(1.5)';progressCounter();bool = false;}if (counter1 === -1) {Array.from(sections).forEach((section) => {if (section.classList[0] === 'section-5') {return;}section.style.left = '-100vw';});counter1 = 4;counter2 = 5;section1wrapper.style.transform = 'scale(1.5)';section5wrapper.style.transform = 'scale(1)';progressCounter();bool = false;}progressCounter();return bool;
};window.addEventListener('wheel', (e) => {const deltaY = e.deltaY > 0;if (deltaY) {counter1++;counter2++;} else {counter1--;counter2--;}pageController();progressCounter();console.log(counter1, counter2);if (bool) {document.querySelector(`.section-${deltaY ? counter1 : counter2}`).style.left = `${deltaY ? '-100vw' : '0'}`;document.querySelector(`.section-${deltaY ? counter1 : counter2}-wrapper`).style.transform = `scale(${deltaY ? '1.5' : '1'})`;document.querySelector(`.section-${deltaY ? counter1 + 1 : counter2 + 1}-wrapper`).style.transform = `scale(${deltaY ? '1' : '1.5'})`;}
});document.querySelector('.left-btn').addEventListener('click', () => {counter1--;counter2--;pageController() &&(document.querySelector(`.section-${counter2}`).style.left = '0');if (bool) {document.querySelector(`.section-${counter2}-wrapper`).style.transform ='scale(1)';document.querySelector(`.section-${counter2 + 1}-wrapper`).style.transform ='scale(1.5)';}
});document.querySelector('.right-btn').addEventListener('click', () => {counter1++;counter2++;pageController() &&(document.querySelector(`.section-${counter1}`).style.left = '-100vw');if (bool) {document.querySelector(`.section-${counter2}-wrapper`).style.transform ='scale(1)';document.querySelector(`.section-${counter1}-wrapper`).style.transform ='scale(1.5)';}
});document.querySelector('.grapes-img').addEventListener('mouseover', () => {document.querySelector('.section-3-wrapper').style.opacity = '.5';
});document.querySelector('.grapes-img').addEventListener('mouseout', () => {document.querySelector('.section-3-wrapper').style.opacity = '1';
});menu.addEventListener('click', () => {document.querySelector('.navbar').classList.toggle('change');
});

Paypal Clone

因为有参考原型,所以这个也没很花里胡哨

稍微有点意思的事 navbar 的变化,大屏幕下是展开的,小屏幕下用的是 hamburger icon,主要就是使用了 media query 然后选择哪个 div 进行 display 而已,其他部分就是登录注册两个表单,也没什么好说的。

少图好像是因为我上传图片到上限了,现在 csdn 上图片上传不上去……之前是等了两个小时才能发几张图,现在又失败了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/99197.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt creater11 翻译国际化教程教程:

先出效果图。 闲聊几句&#xff1a;qt这个翻译很方便&#xff0c;能直接导出项目里所有文字。 具体步骤如下&#xff1a; 在Qt中&#xff0c;我们可以使用QTranslator类来实现多语言切换。以下是一般步骤&#xff1a; 1. 在你的源代码中&#xff0c;所有需要翻译的字符串都…

Python的io模块

io 模块提供了 Python 用于处理各种 I/O 类型的主要工具。三种主要的 I/O类型分别为: 文本 I/O, 二进制 I/O 和 原始 I/O。 io.open() 是内置的 open() 函数的别名. 语法&#xff1a; open(file,moder,buffering-1,encodingNone,errorsNone,newlineNone,closefdTrue,openerN…

算法训练 第一周

一、合并两个有序数组 本题给出了两个整数数组nums1和nums2&#xff0c;这两个数组均是非递减排列&#xff0c;要求我们将这两个数组合并成一个非递减排列的数组。题目中还要求我们把合并完的数组存储在nums1中&#xff0c;并且为了存储两个数组中全部的数据&#xff0c;nums1中…

Spark 环境安装与案例演示

Spark 环境安装 一、准备工作 1、hadoop成功安装 2、防火墙关闭 二、解压安装 1、上传 spark 安装包到/tools 目录&#xff0c;进入 tools 下&#xff0c;执行如下命令&#xff1a; tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz -C /training/由于 Spark 的脚本命令和 Hadoop…

linux信号量

通过学习linux的信号量&#xff0c;对linux的信号量进行了编程。

Docker常用命令以及详解

Docker常用命令以及详解 一、基础命令&#xff1a; docker version 功能&#xff1a;显示 docker 客户端和服务器的版本信息。docker info 功能&#xff1a;显示 docker 系统的详细信息docker --help 功能&#xff1a;显示 Docker 命令的帮助信息。示例输出&#xff1a;这个…

数据库-多表设计

概述&#xff1a; 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互关联&#xff0c;所以各个表结构之间也存在着各种联系&#xff0c;基本分为三种&#xff1a; 一对…

MyBatis-Plus实现普通查询/分页查询[MyBatis-Plus系列] - 第484篇

历史文章&#xff08;文章累计480&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 E…

kali 安装cpolar内网穿透实现 ssh 远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过cpolar 内网穿透软件实现ssh 远程连接kali! 1. 启动kali ssh 服务 默认新安装的kali系统会关闭ssh 连接服务,我们通…

【GPT引领前沿】GPT4技术与AI绘图

推荐阅读&#xff1a; 1、遥感云大数据在灾害、水体与湿地领域典型案例实践及GPT模型应用 2、GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。例如在科研编程…

内网隧道代理技术(二十)之 CS使用HTTP代理上线不出网机器

CS使用HTTP代理上线不出网机器 CS工具自带上线不出网机器 如图A区域存在一台中转机器,这台机器可以出网,这种是最常见的情况。我们在渗透测试的过程中经常是拿下一台边缘机器,其有多块网卡,边缘机器可以访问内网机器,内网机器都不出网。这种情况下拿这个边缘机器做中转,…

Promise常用方法笔记

mixin.methods.getList(xxx) 是axios的二次封装 是通过Promise进行基本封装 let a mixin.methods.getList(toosSet.gettype);let b mixin.methods.getList(toosSet.gettypes);let c mixin.methods.getList(toosSet.gettypess);Promise.all([a, b, c]).then((res) > {aler…