HTML5如何在网页中实现3D效果

CSS3除了为开发者提供二维变形之外,还将动画从二维平面推动到了三维立体状态,能够实现真正的三维特效。

三维变形和二维变形一样,均使用的是transform属性。想要触发三维变形有两种方式:一种方式是通过语法告知浏览器“请采用三维方式进行变形处理”,另一种方式是直接使用CSS3三维变形的语法。

触发方法1:告知浏览器变形方式

-webkit-transform-style:preserve-3d;

Tips:IE不支持三维变形,在移动端,绝大多数的浏览器均为WebKit内核,因此,在此句代码之前需要书写-webkit-的前缀内核。

Tips:不要为body元素设置-webkit- transform-style: preserve 3d,否则会对position:fixed定位的元素造成布局影响。在开发当中,如果当前元素属于body的子级元素,又希望应用三维变形,则在body和当前元素之间多嵌套一层结构,并为这层元素应用三维变形即可。

触发方法2:直接使用CSS3变形语法

<!DOCTYPE html>

<head>

    <meta charset=”UTF-8″>

    <title>言成科技/title>

    <style>

        .box1 {

            width: 150px;

            height: 150px;

            border: 2px solid blue;

        }

        .box1 div {

            height: 150px;

            background: rgba(0, 0, 0, 0.5);

            -webkit-transform: translate3d(30px, 60px, 20px) rotateX(30deg);

            transform: translate3d(30px, 60px, 20px) rotateX(30deg);

        }

    </style>

</head>

<body>

    <div class=”box1″>

        <div></div>

    </div>

</body>

</html>

具体三维变形的具体属性详见《CSS3-3D相关知识详解—视角以及变形方向》

3D效果制作

需求

制作一个立方体,并进行旋转

代码实例

<!DOCTYPE HTML>

<html>

<head>

 <meta charset=”utf-8″ />

 <title>言成科技</title>

 <link rel=”stylesheet” type=”text/css” href=”” />

 <style>

  .main-bac { -webkit-perspective:1500; } /*设定透视距离*/

  .main{

   width:200px; 

   height:200px; 

   margin: 0 auto;

   position:relative;

   -webkit-transform-style:preserve-3d;

   -webkit-transition:-webkit-transform 2s ease 0s;/*过渡时间*/

  }

  /*基本样式*/

  .main p{

   position: absolute; 

   margin: 0; 

   padding: 0; 

   width: 200px; 

   height: 200px;  

   text-align: center; 

   line-height: 200px; 

   font-size: 26px; 

   opacity:0.5;

  }

  /*将第一个元素Z轴向前移动100px,形成第一个面(正面)*/

  .main p:nth-of-type(1) {

   background-color:red;

   -webkit-transform:translateZ(100px);

  }

  /*将第一个元素Z轴向前移动100px,绕x轴旋转90度形成上面的面*/

  .main p:nth-of-type(2) {

   background-color:orange; 

   -webkit-transform:rotateX(90deg) translateZ(100px);

  }

  /*将第一个元素Z轴向前移动100px,绕x轴旋转-90度形成下边的面*/

  .main p:nth-of-type(3) {

   background-color:yellow;

   -webkit-transform:rotateX(-90deg) translateZ(100px);

  }

  /*将第一个元素Z轴向前移动100px,绕y轴旋转90度形成右侧的面*/

  .main p:nth-of-type(4) {

   background-color:green;

   -webkit-transform:rotateY(90deg) translateZ(100px);

  }

  /*将第一个元素Z轴向前移动100px,绕y轴旋转-90度形成左侧的面*/

  .main p:nth-of-type(5) {

   background-color:#b435bf;

   -webkit-transform:rotateY(-90deg) translateZ(100px);

  }

  /*将第一个元素Z轴向前移动100px,绕y轴旋转180度形成后面(背面)*/

  .main p:nth-of-type(6) {

   background-color:blue;

   -webkit-transform:rotateY(180deg) translateZ(100px);

  }

  /*鼠标移入时绕Y轴旋转180度,绕Z轴旋转180度*/

  .main:hover {-webkit-transform:rotateY(180deg) rotateZ(180deg); }   

 </style>

</head>

<body>

 <div class=”main-bac”>

  <div class=”main”>

   <p>言成科技</p>

   <p>3D立方体</p>

   <p>HTML5学堂</p>

   <p>3D立方体</p>

   <p>码匠</p>

   <p>JavaScript</p>

  </div>              

 </div>

</body>

</html>

代码解析

当鼠标移入的时候,立方体逐渐的发生旋转(非突变),围绕X轴旋转45度的同时,围绕Y轴旋转45度。

当鼠标移出立方体时,立方体恢复到初始状态。在最开始状态时,并没有采用无限远的视角,设置一定的视角,让刚开始时直视立方体时,不会觉得是一个平面。

3D效果制作-目标效果图

以上资料来源:《HTML5布局之路》

HTML5翻页效果文字特效怎么实现

首先是HTML代码,非常简单,列出我们需要渲染的文字:

<div class=”foo”>

  <span class=”letter” data-letter=”A”>A</span>

  <span class=”letter” data-letter=”B”>B</span>

  <span class=”letter” data-letter=”C”>C</span>

  <span class=”letter” data-letter=”D”>D</span>

  <span class=”letter” data-letter=”E”>E</span>

  <span class=”letter” data-letter=”F”>F</span>

  <span class=”letter” data-letter=”G”>G</span>

  <span class=”letter” data-letter=”H”>H</span>

  <span class=”letter” data-letter=”I”>I</span>

  <span class=”letter” data-letter=”L”>L</span>

  <span class=”letter” data-letter=”M”>M</span>

  <span class=”letter” data-letter=”N”>N</span>

  <span class=”letter” data-letter=”O”>O</span>

  <span class=”letter” data-letter=”P”>P</span>

  <span class=”letter” data-letter=”Q”>Q</span>

  <span class=”letter” data-letter=”R”>R</span>

  <span class=”letter” data-letter=”S”>S</span>

  <span class=”letter” data-letter=”T”>T</span>

  <span class=”letter” data-letter=”U”>U</span>

  <span class=”letter” data-letter=”V”>V</span>

  <span class=”letter” data-letter=”Z”>Z</span>

</div>

CSS3

.letter{

  display: inline-block;

  font-weight: 900;

  font-size: 8em;

  margin: 0.2em;

  position: relative;

  color: #00B4F1;

  transform-style: preserve-3d;

  perspective: 400;

  z-index: 1;

}

这样我们就让这些字母安安静静的排列起来,并有了自己的背景颜色,等待强大的CSS3来渲染。

      接下来我们要让文字在鼠标滑过的时候产生翻转倾斜的动画。

.letter:before, .letter:after{

  position:absolute;

  content: attr(data-letter);

  transform-origin: top left;

  top:0;

  left:0;

}

.letter, .letter:before, .letter:after{

  transition: all 0.3s ease-in-out;

}

.letter:before{

  color: #fff;

  text-shadow:

    -1px 0px 1px rgba(255,255,255,.8),

    1px 0px 1px rgba(0,0,0,.8);

  z-index: 3;

  transform:

    rotateX(0deg)

    rotateY(-15deg)

    rotateZ(0deg);

}

.letter:after{

  color: rgba(0,0,0,.11);

  z-index:2;

  transform:

    scale(1.08,1)

    rotateX(0deg)

    rotateY(0deg)

    rotateZ(0deg)

    skew(0deg,1deg);

}

.letter:hover:before{

  color: #fafafa;

  transform:

    rotateX(0deg)

    rotateY(-40deg)

    rotateZ(0deg);

}

.letter:hover:after{

  transform:

    scale(1.08,1)

    rotateX(0deg)

    rotateY(40deg)

    rotateZ(0deg)

    skew(0deg,22deg);

}

html怎么css设置的文本特效

文本虚拟化效果可以通过css的text-shadow来实现。

text-shadow语法:

text-shadow : none | <length> none | [<shadow>, ] * <shadow> 或none | <color> [, <color> ]*

也就是:

text-shadow:[颜色(Color) x轴(X Offset) y轴(Y Offset) 模糊半径(Blur)],[颜色(color) x轴(X Offset) y轴(Y Offset) 模糊半径(Blur)]…

或者

text-shadow:[x轴(X Offset) y轴(Y Offset) 模糊半径(Blur) 颜色(Color)],[x轴(X Offset) y轴(Y Offset) 模糊半径(Blur) 颜色(Color)].

例子:

.demo {background: #666666;width: 440px;padding: 30px; font: bold 55px/100% “微软雅黑”, “Lucida Grande”, “Lucida Sans”, Helvetica, Arial, Sans;color: #fff;text-transform: uppercase;}

.HTML标记符号可以实现网页特效吗?

不可以

在很久以前还有一个 marquee 标签可以实现跑马灯效果,但是已经被废弃。单纯的HTML只是描述网页结构。要特效得配合CSS和JavaScript来实现。

HTML5动画特效怎么做

主要思想:

首先要准备一张有连续帧的图片,然后利用HTML5 Canvas的draw方法在不同的时间间隔绘制不同的帧,这样看起来就像动画在播放。

关键技术点:

JavaScript 函数setTimeout()有两个参数,第一个是参数可以传递一个JavaScript方法,

另外一个参数代表间隔时间,单位为毫秒数。代码示例:

setTimeout( update, 1000/30);

Canvas的API-drawImage()方法,需要指定全部9个参数:

ctx.drawImage(myImage, offw, offh, width,height, x2, y2, width, height);

其中offw, offh是指源图像的起始坐标点,width, height表示源图像的宽与高,x2,y2表

示源图像在目标Canvas上的起始坐标点。

<!DOCTYPE html> 

<html> 

<head> 

<meta http-equiv=”X-UA-Compatible” content=”chrome=IE8″> 

<meta http-equiv=”Content-type” content=”text/html;charset=UTF-8″> 

<title>Canvas Mouse Event Demo</title> 

<link href=”default.css” rel=”stylesheet” /> 

<script> 

var ctx = null; // global variable 2d context 

var started = false; 

var mText_canvas = null; 

var x = 0, y =0; 

var frame = 0; // 22 5*5 + 2 

var imageReady = false; 

var myImage = null; 

var px = 300; 

var py = 300; 

var x2 = 300; 

var y2 = 0; 

window.onload = function() { 

var canvas = document.getElementById(“animation_canvas”); 

console.log(canvas.parentNode.clientWidth); 

canvas.width = canvas.parentNode.clientWidth; 

canvas.height = canvas.parentNode.clientHeight; 

if (!canvas.getContext) { 

console.log(“Canvas not supported. Please install a HTML5 compatible browser.”); 

return; 

// get 2D context of canvas and draw rectangel 

ctx = canvas.getContext(“2d”); 

ctx.fillStyle=”black”; 

ctx.fillRect(0, 0, canvas.width, canvas.height); 

myImage = document.createElement(‘img’); 

myImage.src = “../robin.png”; 

myImage.onload = loaded(); 

function loaded() { 

imageReady = true; 

setTimeout( update, 1000/30); 

function redraw() { 

ctx.clearRect(0, 0, 460, 460) 

ctx.fillStyle=”black”; 

ctx.fillRect(0, 0, 460, 460); 

// find the index of frames in image 

var height = myImage.naturalHeight/5; 

var width = myImage.naturalWidth/5; 

var row = Math.floor(frame / 5); 

var col = frame – row * 5; 

var offw = col * width; 

var offh = row * height; 

// first robin 

px = px – 5; 

py = py – 5; 

if(px < -50) { 

px = 300; 

if(py < -50) { 

py = 300; 

//var rate = (frame+1) /22; 

//var rw = Math.floor(rate * width); 

//var rh = Math.floor(rate * height); 

ctx.drawImage(myImage, offw, offh, width, height, px, py, width, height); 

// second robin 

x2 = x2 – 5; 

y2 = y2 + 5; 

if(x2 < -50) { 

x2 = 300; 

y2 = 0; 

ctx.drawImage(myImage, offw, offh, width, height, x2, y2, width, height); 

function update() { 

redraw(); 

frame++; 

if (frame >= 22) frame = 0; 

setTimeout( update, 1000/30); 

</script> 

</head> 

<body> 

<h1>HTML Canvas Animations Demo – By Gloomy Fish</h1> 

<pre>Play Animations</pre> 

<div id=”my_painter”> 

<canvas id=”animation_canvas”></canvas> 

</div> 

</body> 

</html>