import * as THREE from 'three';
import { CSS3DRenderer, CSS3DObject } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
let scene, camera, renderer, labelRenderer;
let mesh, label;
init();
animate();
function init() {
scene = new THREE.Scene();
scene.background = new THREE.Color(0xeeeeee);
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 2, 5);
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
labelRenderer = new CSS3DRenderer();
labelRenderer.setSize(window.innerWidth, window.innerHeight);
labelRenderer.domElement.style.position = 'absolute';
labelRenderer.domElement.style.top = 0;
document.body.appendChild(labelRenderer.domElement);
// 加载GLTF模型(假设有一个包含全景图的模型)
const loader = new GLTFLoader();
loader.load('path/to/model.gltf', (gltf) => {
mesh = gltf.scene;
scene.add(mesh);
// 创建CSS3DObject对象,并关联全景图标签
label = new CSS3DObject(document.querySelector('.panorama-label'));
label.position.set(0, 0, 0);
scene.add(label);
// 更新全景图标签的位置与模型对齐
function updateLabelPosition() {
const position = mesh.position;
label.position.set(position.x, position.y, position.z);
label.rotation.set(mesh.rotation.x, mesh.rotation.y, mesh.rotation.z);
}
mesh.addEventListener('update', updateLabelPosition);
updateLabelPosition();
});
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize(window.innerWidth, window.innerHeight);
labelRenderer.setSize(window.innerWidth, window.innerHeight);
}
window.addEventListener('resize', onWindowResize, false);
}
function animate() {
requestAnimationFrame( 以下是使用CSS3和HTML5实现跑马灯效果的示例代码:
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Marquee Effect</title>
<style>
.marquee {
width: 100%;
white-space: nowrap;
overflow: hidden;
box-sizing: border-box;
}
.marquee:before, .marquee:after {
position: absolute;
top: 0;
width: 50%;
height: 100%;
content: '';
}
.marquee:before {
left: 0;
background-image: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%);
}
.marquee:after {
right: 0;
background-image: linear-gradient(to left, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%);
animation: marquee 10s linear infinite;
}
@keyframes marquee {
0% { transform: translateX(100%); }
100% { transform: translateX(-100%); }
}
</style>
</head>
<body>
<div class="marquee">
这是一个跑马灯效果的文本信息,可以连续滚动显示。
</div>
</body>
</html>这段代码会创建一个带有跑马灯效果的div元素,文本内容会不断循环滚动。通过CSS3的动画(@keyframes)特性实现滚动效果,并通过伪元素::before和::after来实现滚动时的渐变效果,增强视觉效果。
在HTML和CSS3的帮助下,我们可以创建各种网页动画。以下是一些例子:
- 创建一个简单的淡入淡出动画:
HTML:
<div class="fade">淡入淡出动画</div>CSS:
.fade {
animation: fadeInOut 2s infinite;
}
@keyframes fadeInOut {
0% {opacity: 0;}
50% {opacity: 1;}
100% {opacity: 0;}
}- 创建一个移动动画:
HTML:
<div class="move">移动动画</div>CSS:
.move {
animation: moveRight 2s infinite;
position: relative;
}
@keyframes moveRight {
0% {left: 0;}
100% {left: 200px;}
}- 创建一个旋转动画:
HTML:
<div class="rotate">旋转动画</div>CSS:
.rotate {
animation: rotate 2s infinite linear;
}
@keyframes rotate {
0% {transform: rotate(0deg);}
100% {transform: rotate(360deg);}
}- 创建一个缩放动画:
HTML:
<div class="scale">缩放动画</div>CSS:
.scale {
animation: scale 2s infinite;
}
@keyframes scale {
0% {transform: scale(1);}
50% {transform: scale(1.5);}
100% {transform: scale(1);}
}以上代码展示了如何使用CSS3的@keyframes规则和animation属性来创建简单的动画。这些动画可以应用于任何HTML元素,并可以通过调整时长、迭代次数和其他属性来控制动画的行为。
在Java中,CSS3的特性并不直接支持,因为CSS3是一种用于描述网页样式语言,而Java主要用于后端开发。不过,如果你想在Java Web应用中使用CSS3特性,你可能需要使用JavaScript来处理这些特性。
以下是一些CSS3的特性示例代码:
- 3D转换:
div {
transform: rotateX(120deg) rotateY(180deg);
}- 过渡效果:
div {
transition: width 2s, height 2s, transform 2s;
}
div:hover {
width: 200px;
height: 200px;
transform: rotate(180deg);
}- 关键帧动画:
@keyframes example {
from {background-color: red;}
to {background-color: yellow;}
}
@-webkit-keyframes example {
from {background-color: red;}
to {background-color: yellow;}
}
div {
animation-name: example;
animation-duration: 4s;
}- 弹性布局(伸缩盒):
.container {
display: flex;
width: 100%;
}
.item {
flex: 1; /* 等同于 flex: 1 1 0; 表示放大、缩小、不设最小宽度 */
}这些代码示例展示了如何在CSS中应用3D转换、过渡、关键帧动画和伸缩盒布局。在Java Web应用中,你可以通过JavaScript或者jQuery来绑定这些样式,从而在用户与页面交互时触发这些效果。
要使用CSS制作鼠标经过时变成立体按钮的效果,可以使用CSS3的3D转换和过渡效果。以下是一个简单的示例:
HTML:
<button class="button">Hover Over Me</button>CSS:
.button {
background-color: #4CAF50;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
transition: box-shadow 0.3s, transform 0.3s; /* 过渡效果 */
}
.button:hover {
box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24), 0 17px 50px 0 rgba(0,0,0,0.19);
transform: translateY(0) rotateX(0deg); /* 3D转换 */
}这段代码中,.button:hover 选择器定义了鼠标悬停在按钮上时的样式。box-shadow 属性增加了按钮的阴影,transform 属性使按钮在X轴(旋转)和Y轴(平移)上进行3D变换,从而创建立体效果。
在CSS中,可以使用伪元素来美化滚动条。以下是一些基本的CSS规则,用于更改滚动条的外观:
/* 为所有滚动条设置样式 */
::-webkit-scrollbar {
width: 12px; /* 设置滚动条的宽度 */
}
/* 滚动条轨道 */
::-webkit-scrollbar-track {
background: #f1f1f1; /* 轨道颜色 */
}
/* 滚动条滑块 */
::-webkit-scrollbar-thumb {
background: #888; /* 滑块颜色 */
}
/* 滑块hover效果 */
::-webkit-scrollbar-thumb:hover {
background: #555; /* 滑块hover颜色 */
}这段代码将会在支持Webkit内核的浏览器中(如Chrome、Safari),将滚动条的宽度设置为12px,并给轨道和滑块设置了背景色。滑块在鼠标悬停时会变成另一种颜色。
请注意,这些伪元素的兼容性主要限于基于Webkit的浏览器,并且在不同浏览器和操作系统上可能会有所不同。对于Firefox或者IE浏览器,可以使用对应的伪类如scrollbar-shadow-color和scrollbar-face-color等来进行样式设置。
CSS3 转换 (transform) 是一种在 2D 或 3D 空间中改变元素位置、大小、角度等特性的方法。以下是一些使用 CSS3 转换的例子:
- 旋转 (rotate):
.rotate-30deg {
transform: rotate(30deg);
}- 缩放 (scale):
.scale-2x {
transform: scale(2, 2);
}- 平移 (translate):
.translate-right-50 {
transform: translateX(50px);
}
.translate-down-50 {
transform: translateY(50px);
}- 倾斜 (skew):
.skew-45deg {
transform: skew(45deg);
}- 3D 转换:
.rotate-3d {
transform: rotateX(45deg) rotateY(45deg);
}CSS3 转换可以通过 transition 属性与用户的交互相结合,创建平滑的动画效果。例如,当鼠标悬停时旋转一个元素:
.element {
transition: transform 0.5s ease-in-out;
}
.element:hover {
transform: rotate(360deg);
}以上代码在鼠标悬停时使得元素在半秒内平滑地旋转360度。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Rem Layout Example</title>
<style>
/* 基本字体大小设置为10px,方便后续计算 */
html {
font-size: 10px;
}
/* 使用rem单位设置元素宽度、高度、边距、填充等属性 */
.box {
width: 6rem; /* 60px */
height: 4rem; /* 40px */
margin: 1.5rem; /* 15px */
padding: 1rem; /* 10px */
border: 0.1rem solid #000; /* 1px */
font-size: 1.4rem; /* 14px */
line-height: 1.6rem; /* 16px */
}
/* 响应式视口宽度大于640px时,重置基本字体大小为16px */
@media (min-width: 640px) {
html {
font-size: 16px;
}
}
</style>
</head>
<body>
<div class="box">这是一个使用rem单位布局的盒子</div>
</body>
</html>这个例子中,我们设置了html的基本字体大小为10px,并且在样式中使用rem单位来设置元素的宽度、高度、边距、填充和文本大小。同时,我们添加了一个媒体查询,当屏幕宽度大于640px时,将html的字体大小重置为16px,这样可以保证在大屏幕上的显示效果。这个例子展示了如何使用rem单位进行移动端WEB开发的布局。
/* 使用CSS3的appearance属性来重置输入框的样式,
使其看上去像一个原生控件 */
input[type="text"],
input[type="password"],
input[type="email"],
input[type="number"],
input[type="date"],
input[type="time"],
input[type="datetime-local"],
input[type="search"],
input[type="tel"],
input[type="url"] {
-webkit-appearance: none; /* 针对WebKit浏览器,如Chrome、Safari */
-moz-appearance: none; /* 针对Gecko浏览器,如Firefox */
-ms-appearance: none; /* 针对Trident内核浏览器,如IE */
-o-appearance: none; /* 针对Presto内核浏览器,如Opera */
appearance: none; /* 标准属性 */
/* 添加一些自定义样式 */
background-color: #fff;
border: 1px solid #ccc;
padding: 5px;
border-radius: 4px;
}
/* 重置按钮的样式 */
button::-moz-focus-inner,
input::-moz-focus-inner {
border: none;
padding: 0;
}这段代码展示了如何使用CSS3的appearance属性来重置输入框和按钮的样式,使它们看上去更接近原生控件的样式。同时,去除了Firefox特有的焦点边框,确保跨浏览器的一致性。这是一个简单而实用的CSS技巧,可以增强表单输入的原生感。
以下是一个简单的HTML页面布局示例,使用了HTML5和CSS3,采用了“三行模式”布局:头部(header)、侧边栏(sidebar)和内容区(content)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>三行模式页面布局</title>
<style>
body {
margin: 0;
font-family: Arial, sans-serif;
}
header, nav, section, aside, footer {
margin: 5px;
padding: 10px;
border: 1px solid #ddd;
}
header {
background-color: #f8f8f8;
text-align: center;
padding: 20px 0;
}
nav {
text-align: center;
background-color: #f2f2f2;
}
section {
text-align: center;
background-color: #e6e6e6;
}
aside {
text-align: center;
background-color: #d0d0d0;
}
footer {
background-color: #f8f8f8;
text-align: center;
padding: 20px 0;
}
</style>
</head>
<body>
<header>
<h1>页头</h1>
</header>
<nav>
<ul>
<li><a href="#">导航链接1</a></li>
<li><a href="#">导航链接2</a></li>
</ul>
</nav>
<section>
<h2>主要内容</h2>
<p>这里是主要内容区域...</p>
</section>
<aside>
<h3>侧边信息</h3>
<p>这里是侧边信息...</p>
</aside>
<footer>
<p>页脚信息</p>
</footer>
</body>
</html>这个示例展示了如何使用HTML5和CSS3创建一个基本的三行模式布局,具有头部、侧边栏和内容区。通过CSS样式,我们设定了不同区域的背景色和边框,以便更好地展示页面布局。