css画布背景

在本教程中,我们将介绍一种简单而有效的方法,以使用HTML,CSS和JavaScript创建画布菜单。

要初步了解我们将要构建的内容,请查看相关的CodePen演示(请查看较大的版本以获得更好的体验):

注意 :本教程不会重点介绍如何使画布菜单可访问或响应,因此,这些步骤当然是有效的。

1.从标记开始

我们的标记包含两个包装器元素:

  • .top-banner元素
  • .top-nav元素

这是HTML代码:

<section class="top-banner">
<div class="top-banner-overlay">
<!-- content here -->
</div>
</section>
<nav class="top-nav">
<div class="menu-wrapper">
<!-- content here -->
</div>
<div class="fixed-menu">
<!-- content here -->
</div>
</nav>

2.接下来,我们需要一些CSS

准备好标记后,接下来让我们检查菜单所需的最重要的样式。

注意 :为了便于阅读,此CSS代码未进行优化-您会注意到重复的属性,您可能希望在自己的版本中删除这些属性。

设置顶部横幅元素

.top-banner元素如下所示:

关于其样式,我们执行以下操作:

  • 将其宽度设置为等于窗口宽度减去.menu-wrapper元素的宽度。
  • 将其高度设置为等于窗口高度。
  • 将其定义为flex容器。 这将强制其覆盖覆盖整个父级高度。
  • 使用flexbox将叠加层的内容垂直居中。

这是我们实现所有这些所需的样式:

.top-banner {
display: flex;
width: calc(100% - 150px);
height: 100vh;
transform: translateX(150px);
background: url(IMAGE_PATH) no-repeat center / fixed;
}
.top-banner-overlay {
display: flex;
flex-direction: column;
justify-content: center;
width: 350px;
padding: 20px;
transition: transform .7s;
color: white;
background: rgba(0, 0, 0, .7);
}

设置顶级导航元素

.top-nav元素如下所示:

在这种情况下,我们将执行以下操作:

  • 将直接子元素指定为覆盖窗口高度的固定位置的元素。
  • 使用flexbox垂直对齐.fixed-menu元素。
  • 默认情况下隐藏.menu-wrapper元素。 为此,我们不给它提供诸如display: none的属性值。 实际上,我们使用了translate()函数将其向左移动200px。 请记住,元素的宽度为350px,因此它的一部分仍在视口内。 但是,它不可见,因为该元素位于.fixed-menu元素下方。
  • 隐藏菜单列表。

看看下面相应CSS样式:

.top-nav .menu-wrapper {
position: fixed;
top: 0;
left: 0;
bottom: 0;
width: 350px;
padding: 20px;
transform: translateX(-200px);
transition: transform .7s;
background: #B1FFE5;
}
.top-nav .menu-wrapper .menu {
opacity: 0;
transition: opacity .4s;
}
.top-nav .fixed-menu {
position: fixed;
top: 0;
left: 0;
bottom: 0;
display: flex;
flex-direction: column;
width: 150px;
padding: 20px;
background: aquamarine;
}

3.现在购买一些JavaScript

在这一点上,我们将使用一些简单JavaScript代码来操纵画布外菜单的状态。

让我们描述必要的操作:

  • 单击.menu-open按钮时,菜单应显示为具有良好的滑入效果,并且应同时向右推动覆盖层。 (可选)我们可以在此状态下做更多的事情。 在我们的示例中,我们在叠加层的::before伪元素::before添加了框阴影,并使用淡入效果显示了菜单列表。
  • 单击.menu-close按钮时,菜单应消失,并具有良好的滑出效果,并且应同时向左推覆盖层。

这是实现此行为JavaScript代码:

const menuOpen = document.querySelector(".top-nav .menu-open");
const menuClose = document.querySelector(".top-nav .menu-close");
const menuWrapper = document.querySelector(".top-nav .menu-wrapper");
const topBannerOverlay = document.querySelector(".top-banner-overlay");
function toggleMenu() {
menuOpen.addEventListener("click", () => {
menuWrapper.classList.add("is-opened");
topBannerOverlay.classList.add("is-moved");
});
menuClose.addEventListener("click", () => {
menuWrapper.classList.remove("is-opened");
topBannerOverlay.classList.remove("is-moved");
});
}
toggleMenu();

在下面,您将找到关联CSS样式:

.top-banner-overlay.is-moved {
transform: translateX(350px);
}
.top-banner-overlay.is-moved::before {
content: '';
position: absolute;
top: 0;
bottom: 0;
right: 100%;
width: 20px;
box-shadow: 0 0 10px black;
}
.top-nav .menu-wrapper.is-opened {
transform: translateX(150px);
}
.top-nav .menu-wrapper.is-opened .menu {
opacity: 1;
transition-delay: .6s;
}

4.浏览器支持

该演示仅在桌面浏览器上可以正常运行。 移动设备将需要不同的页面布局,但这超出了本教程的范围。 和往常一样,我们使用Babel将ES6代码编译为ES5。

我在测试时遇到的唯一小问题是动画叠加层时发生的文本呈现更改。 尽管我尝试了在不同的Stack Overflow线程中提出的各种方法,但我无法找到适用于所有操作系统和浏览器的直接解决方案。 因此请记住,在动画叠加时,您可能会看到小的字体渲染问题。

结论

就是这样,伙计们! 我们设法用相对简单的代码构建了一个有用的画布菜单。

希望您喜欢最终的结果,并以此为灵感来创建更强大的画布菜单。 当然,如果您构建了任何一个,请不要忘记与我们分享!

翻译自: https://webdesign.tutsplus.com/tutorials/how-to-build-an-off-canvas-menu-with-css-and-a-touch-of-javascript--cms-30354

css画布背景

css画布背景_如何使用CSS和触摸JavaScript构建画布外菜单相关推荐

  1. css 圆形背景icon_我写CSS的常用套路(附demo的效果实现与源码)

    前言 本文是笔者写CSS时常用的套路.不论效果再怎么华丽,万变不离其宗.1.交错动画 有时候,我们需要给多个元素添加同一个动画,播放后,不难发现它们会一起运动,一起结束,这样就会显得很平淡无奇.那么如 ...

  2. css样式教程---css控制背景图片-背景相关的css

    最近做网站的时候,感觉css使用并不是那么轻松,于是从网上找了点教程看看,感觉还是挺重要的,一个好的CSS代码,只要你熟悉了,以后拿过来之间套上就行了, 真是方面,但是看的那CSS代码总叫人感觉头大, ...

  3. css中背景颜色用哪个,CSS 背景颜色

    颜色背景 CSS中背景颜色由background-color决定,这里的背景颜色会渲染padding和content,不会渲染border和margin部分. 在css3中可以通过background ...

  4. css 动画使用_如何在CSS中使用动画

    css 动画使用 使用CSS动画 (Using CSS Animations) CSS animations add beauty to the webpages and make transitio ...

  5. vue css 应用变量_如何使用CSS Grid和CSS变量快速为应用创建原型

    vue css 应用变量 CSS Grid and CSS Variables are both huge wins for front-end developers. The former make ...

  6. css 透明叠加_细品CSS(二)

    写在前面CSS盒子模型与怪异盒模型 盒子模型(Box Modle)可以用来对元素进行布局,包括内边距,边框,外边距,和实际内容这几个部分. 盒子模型分为两种 第一种是W3c标准的盒子模型(标准盒模型) ...

  7. css用网络图片做背景图片,css 网页背景图片 怎样用CSS实现大背景网页效果

    在网页设计制作中经常会遇到这样的问题:用图片做背景时,由于显示器分辨率太大或者图片尺寸太小,在页面的两边或者下部了没有背景图片.例如:在小于1024*768分辨率时,是没有问题的.但是假如你的显示器的 ...

  8. css:css样式背景图片设置透明度,css如何设置背景图片的透明度

    1. 了解css如何设置背景图片的透明度 注意: css中无法直接给背景图片加 opacity 属性,可以使用下面的方法来给background-image加上我们想要的透明度opacity. 2. ...

  9. php怎么加css和背景图,如何使用css中:after伪元素实现背景图片的叠加层?

    在网页设计中我们发现越来越多的文本会放在图像之上,通常情况下,这不太好操作,因为图像具有动态颜色和光照,文本大部分是一种颜色.这通常对于可读性和可访问性的不太有利的,可能会让文本看起来不太清楚. 这意 ...

最新文章

  1. 使用Canu对三代测序进行基因组组装
  2. 批处理start命令学习
  3. 关于VMware虚拟机的复制注意事项
  4. springcloud出现org.springframework.boot.context.properties.ConfigurationPropertie错误
  5. outlook 未安装信息服务器,Outlook Web Access 未初始化并且在客户端访问服务器上的应用程序日志中记录了事件 ID 64...
  6. python爬取的信息条数比页面显示多_Python爬取分析北京二手房数据?数据结果真的太吓人了...
  7. 关于Linux下的umask
  8. gcc编译器_2020好用的C++编译器有哪些?这几款值得下载
  9. matlab2c使用c++实现matlab函数系列教程-hilb函数
  10. x264 编码数配置
  11. RN 0.26 引用方式中哪些属于React,哪些属于React Native
  12. HTTP Content-type整理
  13. 2021年下半年信息安全工程师上午真题及答案解析
  14. DNSPod十问党霏霏:充电桩是披着高科技外皮的传统基建?
  15. c语言代码后return0表示什么意思,return 0是什么意思 ?
  16. 论文写作---word单独设置页眉页脚
  17. photon 服务器操作系统,PhotonServer游戏服务器端教程
  18. android8 twrp 小米6,小米6 第三方twrp中文Recovery3.2.3-0刷入工具|支持ROOT|自动解密data分区...
  19. 人生不相见,动如参与商
  20. 用计算机画画内容,用计算机画画的教案

热门文章

  1. 【基于obs插件-6】-滤镜效果插件
  2. Java基础学习 100 问
  3. JSON 与 BSON 区别
  4. SuperSocket框架实现服务器和Winform客户端
  5. 已知子网掩码,确定ip地址范围
  6. MindFusion JS Chart 2.0 Crack
  7. HTML测试题及答案
  8. 测试人员不可不知的7个浏览器小技巧
  9. Noah的学习笔记之Python篇:装饰器
  10. Unable to get image data from canvas because the canvas has been tainted by cross-origin data.