Css—实现3D导航栏

news2024/11/29 17:12:19

一、背景

        最近在其他的网页中看到了一个很有趣的3d效果,这个效果就是使用css3中的3D转换实现的,所以今天的内容就是3D的导航栏效果。那么话不多说,直接开始主要内容的讲解。

二、效果展示

 三、思路解析

1、首先我们需要将这个导航使用一个大的盒子包裹,方便管理整体;

2、每一块的效果都是独立的,所以需要单独设置其效果;

3、这个效果是当鼠标悬浮的时候,会向上翻动,鼠标离开自动弹回

基本的思路已经介绍完了,那么接下来就开始代码的实现和解析。

四、 代码总览

1、html部分

<div class="box">
      <ul class="box_nav">
        <li>
          <div class="nav_front">Home</div>
          <div class="nav_top">Home</div>
        </li>
        <li>
          <div class="nav_front">Services</div>
          <div class="nav_top">Services</div>
        </li>
        <li>
          <div class="nav_front">Products</div>
          <div class="nav_top">Products</div>
        </li>
        <li>
          <div class="nav_front">Blog</div>
          <div class="nav_top">Blog</div>
        </li>
        <li>
          <div class="nav_front">Contact</div>
          <div class="nav_top">Contact</div>
        </li>
        <li>
          <div class="nav_front">About Us</div>
          <div class="nav_top">About Us</div>
        </li>
      </ul>
    </div>

        首先我们就来介绍一下我的实现思路,先从结构说起,通过上边的效果展示不难看出,这里一定是有两个面的,或者说是至少需要两个面才可以实现这个效果,在这里我选择了使用无序列表来充当最外层的大盒子,来实现3d的效果,然后每个li就是一个独立的个体,在li中包裹了两个div来实现两个平面,这样基本的结构元素就齐全了。

那么接下来我们就需要想一下如何实现翻转的效果,第一步就需要将这两个盒子重叠起来,然后通过3d属性来设置他们的位置,目前先抛开动态效果不说,我们想来实现一下,解下来就来看一下css部分

 2、CSS部分

html,body{
  margin: 0;
  padding: 0;
}
.box{
  width: 100%;
  height: 100vh;
  background-color: #ccc;
  display: flex;
}
.box_nav{
  margin: auto;
  list-style: none;
  width: 770px;
  height: 35px;
  display: flex;
 
}
.box_nav>li{
  cursor: pointer;
  width: 120px;
  height: 35px;
  line-height: 35px;
  margin: 0px 5px;
  text-align: center;
  transition: all .5s;
  position: relative;
  transform-style: preserve-3d;
  
}
.nav_front{
  width: 120px;
  height: 35px;
  background-color: rgb(48, 172, 164);
  transform: translateZ(17.5px);
  font-size: 14px;
}
.nav_top{
  width: 120px;
  height: 35px;
  background: linear-gradient(to top , #256b65,#38b0a8);
  position: absolute;
  top: 0px;
  left: 0px;
  transform: translateY(17.5px) rotateX(-90deg);
  font-size: 14px;
}
.box_nav>li:hover{
  transform: rotateX(90deg);
}

首先我们先来处理一下之后可能会影响我们布局的内外边距,处理之后我们就来实现,这里我们使用到了flex布局,将li横向排列,实现基本的布局,然后我们需要将nav_front和nav_top设置固定的合适的宽高,注意:这里不必和我设置的一样,我只实现基本的效果

至于将两个面重叠起来,我们就需要使用到定位属性,来将两个面实现分层处理,这个时候我们就可以轻松的发现,我们只需要将在下面的那个盒子旋转为与我们桌子平行的样子就就可以了,注意,这里需要使用translateY()来移动那个面,移动到下边,来充当悬浮后翻起的那个面,这样就可以实现基本的布局。那么说到这里我们现在就差动态的效果了。

        动态效果就全靠这条属性的定义了

.box_nav>li:hover{
  transform: rotateX(90deg);
}

 语义就是,以x轴作为旋转轴将整个li进行旋转90度,这样就可以实现效果了,当然只设置这个就会很僵硬,所以我们呢需要配合过渡属性来缓和效果,这样就实现了基础了3d导航栏的效果。

五、结语

        今天的分享就到这里了,如果您觉得这篇文章还不错,请点赞、分享给更多的朋友吧!同时,也欢迎关注我的博客,获取更多精彩内容。

本人刚刚组件了社区,大家社区中后续会持续更新一些其他的内容,大家可以加入一下。

https://bbs.csdn.net/forums/fe46c651de82465696aeabef266b0476?joinKey=xndsi3pgxkw2-wn5z0y463k-1-446fd82212de589eead88d47f7b7dabbicon-default.png?t=O83Ahttps://bbs.csdn.net/forums/fe46c651de82465696aeabef266b0476?joinKey=xndsi3pgxkw2-wn5z0y463k-1-446fd82212de589eead88d47f7b7dabb

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速理解微服务中Fegin的概念

一.由来 1.在传统的架构里面&#xff0c;我们是通过使用RestTemplate来访问其他的服务&#xff0c;但是这种方式就存在了一个很大的缺陷&#xff0c;也就是被调用方如果发生了服务的迁移(IP和端口发生了变化)&#xff0c;那么调用方也需要同步的在代码里面进行修改&#xff0c;…

【Git】Git 完全指南:从入门到精通

Git 完全指南&#xff1a;从入门到精通 Git 是现代软件开发中最重要的版本控制工具之一&#xff0c;它帮助开发者高效地管理项目&#xff0c;支持分布式协作和版本控制。无论是个人项目还是团队开发&#xff0c;Git 都能提供强大的功能来跟踪、管理代码变更&#xff0c;并保障…

Spring Web MVC(详解中)

文章目录 Spring MVC&#xff08;中&#xff09;RESTFul风格设计RESTFul风格概述RESTFul风格特点RESTFul风格设计规范RESTFul风格好处RESTFul风格实战需求分析RESTFul风格接口设计后台接口实现 基于RESTFul风格练习&#xff08;前后端分离模式&#xff09;案例功能和接口分析功…

什么是GAN?

一、基本概念 生成对抗网络&#xff08;Generative Adversarial Network&#xff0c;GAN&#xff09;是一种由两个神经网络共同组成深度学习模型&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;。这两个网络通过对抗的方式…

Spring |(八)AOP配置管理

文章目录 &#x1f4da;AOP切点表达式&#x1f407;语法格式&#x1f407;通配符 &#x1f4da;AOP通知类型&#x1f407;环境准备&#x1f407;通知类型的使用 &#x1f4da;AOP通知获取数据&#x1f407;环境准备&#x1f407;获取参数&#x1f407;获取返回值&#x1f407;获…

Flink 从入门到实战

Flink中的批和流 批处理的特点是有界、持久、大量&#xff0c;非常适合需要访问全部记录才能完成的计算工作&#xff0c;一般用于离线统计。 流处理的特点是无界、实时, 无需针对整个数据集执行操作&#xff0c;而是对通过系统 传输的每个数据项执行操作&#xff0c;一般用于实…

Ubuntu20.04运行LARVIO

文章目录 1.运行 Toyish 示例程序2.运行 ROS Nodelet参考 1.运行 Toyish 示例程序 LARVIO 提供了一个简化的toyish示例程序&#xff0c;适合快速验证和测试。 编译项目 进入 build 文件夹并通过 CMake 编译项目&#xff1a; mkdir build cd build cmake -D CMAKE_BUILD_TYPER…

小程序-基于java+SpringBoot+Vue的戏曲文化苑小程序设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

mybatis plus如何使用mybatis xml拼接sql

在 MyBatis Plus 中&#xff0c;如果你想使用 MyBatis 的 XML 文件来拼接 SQL&#xff0c;可以结合使用 MyBatis 和 MyBatis Plus 的功能。MyBatis Plus 是一个增强 MyBatis 的工具&#xff0c;它提供了很多便捷的操作&#xff0c;但有时你可能需要使用 XML 文件来定义更复杂的…

【uniapp】轮播图

前言 Uniapp的swiper组件是一个滑块视图容器组件&#xff0c;可以在其中放置多个轮播图或滑动卡片。它是基于微信小程序的swiper组件进行封装&#xff0c;可以在不同的平台上使用&#xff0c;如微信小程序、H5、App等。 效果图 前端代码 swiper组件 <template><vi…

Python爬虫爬取数据报错

报错&#xff1a; Error fetching the URL: (Connection aborted., ConnectionResetError(10054, 远程主机强迫关闭了一个现有的连接。, None, 10054, None)) 报错原因&#xff1a; 目标服务器限制&#xff1a; 目标网站可能已经检测到你的请求来自自动化工具&#xff08;如爬虫…

人工智能与传统控制系统的融合发展

在这个科技快速迭代的时代&#xff0c;人工智能技术正以前所未有的速度改变着我们的生活。在控制系统领域&#xff0c;AI技术的引入为传统控制带来了新的发展机遇和挑战。然而&#xff0c;这并不意味着传统控制将被完全取代&#xff0c;相反&#xff0c;AI与传统控制的深度融合…

shell综合

声明&#xff01; 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&#…

什么是串联谐振

比如有一个由电阻、电容和电感的串联电路中&#xff0c;存在一个频率能使这个电路的电流最大&#xff0c;这个现象就叫谐振。 那么这个频率是多少呢&#xff1f; 交流电频率与电路固有频率一致时&#xff0c;它就能发生谐振&#xff0c;此时这个电路的电流是最大的 这个固有频…

韦东山stm32hal库--定时器喂狗模型按键消抖原理+实操详细步骤

一.定时器按键消抖的原理: 按键消抖的原因: 当我们按下按键的后, 端口从高电平变成低电平, 理想的情况是, 按下, 只发生一次中断, 中断程序只记录一个数据. 但是我们使用的是金属弹片, 实际的情况就是如上图所示, 可能会发生多次中断,难道我们要记录3/4次数据吗? 答:按键按下…

雨云服务器搭建docker且用docker部署kali服务器教程

雨云 - 新一代云服务提供商 介绍 大家好今天教大家如何使用雨云的服务器安装docker并且用docker搭建kali服务器&#xff0c;实现大家做黑客的梦。 性价比比较高的云服务器提供参考&#xff1a;雨云 - 新一代云服务提供商 优惠码&#xff1a;MzkxODI4 什么是kali Kali L…

SQL进阶——JOIN操作详解

在数据库设计中&#xff0c;数据通常存储在多个表中。为了从这些表中获取相关的信息&#xff0c;我们需要使用JOIN操作。JOIN操作允许我们通过某种关系&#xff08;如相同的列&#xff09;将多张表的数据结合起来。它是SQL中非常重要的操作&#xff0c;广泛应用于实际开发中。本…

分析JHTDB数据库的Channel5200数据集的数据(SciServer服务器)

代码来自https://github.com/idies/pyJHTDB/blob/master/examples/channel.ipynb %matplotlib inline import numpy as np import math import random import pyJHTDB import matplotlib.pyplot as plt import time as ttN 3 T pyJHTDB.dbinfo.channel5200[time][-1] time …

数据分析:彩票中奖号码分析与预测

预测双色球彩票的中奖号码是一个典型的随机事件&#xff0c;因为每个号码的出现概率是独立的&#xff0c;且历史数据并不能直接用于预测未来的开奖结果。然而&#xff0c;我们可以通过统计分析来了解号码的分布规律&#xff0c;从而提供一些可能的参考。 样例数据【点击下载】…

详细分析 npm run build 基本知识 | 不同环境不同命令

目录 前言1. 基本知识2. 构建逻辑 前言 关于部署服务器的知识推荐阅读&#xff1a;npm run build部署到云服务器中的Nginx&#xff08;图文配置&#xff09; 1. 基本知识 npm run 是 npm 的一个命令&#xff0c;用于运行 package.json 中定义的脚本&#xff0c;可以通过 “s…