2024-08-15

在Web前端中,我们可以使用CSS3来创建一些炫酷的效果,如文字的流光渐变、背景模糊以及边框两边伸展等。以下是一个简单的示例,展示如何实现文字的流光渐变效果。

HTML部分:




<div class="text-gradient">流光渐变文字</div>

CSS部分:




.text-gradient {
  font-size: 36px;
  font-weight: bold;
  color: #fff;
  background: -webkit-linear-gradient(45deg, #00e0ff, #00a0ff);
  background: linear-gradient(45deg, #00e0ff, #00a0ff);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  text-fill-color: transparent;
}

在这个例子中,我们使用了linear-gradient来创建一个颜色渐变的背景,并通过background-clip属性设置为text,使得渐变背景仅应用在文字上。-webkit-text-fill-colortext-fill-color属性设置文字填充颜色为透明,以显示出渐变效果。这样就实现了流光渐变的文字效果。

2024-08-15

CSS3提供了border-radius属性,可以用来创建圆角。

基本语法如下:




/* 所有四个角的圆角 */
border-radius: 10px;
 
/* 分别设置四个角的圆角 */
border-radius: 10px 20px 30px 40px;
 
/* 分别设置水平和垂直半径 */
border-radius: 10px 20px;
 
/* 分别设置左上角和右下角、右上角和左下角的圆角 */
border-radius: 10px 20px 30px 40px / 50px 60px 70px 80px;
 
/* 分别设置四个角的圆角(水平半径和垂直半径) */
border-radius: 10px 20px 30px 40px / 50px;

实例代码:




.box {
  width: 200px;
  height: 100px;
  background-color: skyblue;
  border-radius: 15px; /* 所有角都是15px的圆角 */
}

HTML部分:




<div class="box"></div>

这段代码会创建一个宽度为200px、高度为100px的蓝色方块,四个角都被圆角化为15px的圆角。

2024-08-15

CSS3 中有许多新增的属性,以下是一些常见的:

  1. 边框(borders):

    • border-radius: 创建圆角边框。
    • border-image: 使用图片作为边框。
  2. 背景(backgrounds):

    • background-size: 背景图片的尺寸。
    • background-origin: 背景图片的定位区域。
    • background-clip: 背景的裁剪区域。
  3. 文字(text):

    • text-shadow: 文字阴影。
    • word-wrap: 自动换行。
    • text-overflow: 文字溢出时的处理。
  4. 转换(transforms):

    • transform: 包括旋转(rotate)、缩放(scale)、移动(translate)、倾斜(skew)等功能。
  5. 动画(animations):

    • @keyframes: 定义动画序列。
    • animation: 应用动画到元素上。
  6. 伪类(pseudo-classes)和伪元素(pseudo-elements):

    • :first-child, :last-child, :nth-child() 等用于选择特定元素。
    • ::before, ::after 用于在元素前后添加内容。
  7. 用户界面(user interface):

    • resize: 控制元素是否可调整大小。
    • box-sizing: 控制元素的盒模型的计算方式。
  8. 多列(multi-column):

    • column-count, column-gap, column-rule 等用于多列布局。
  9. 过渡(transitions):

    • transition: 变换属性的过渡效果。

这些是CSS3中的一些常用属性,具体使用时需要根据具体场景来选择。

示例代码:




/* 圆角边框 */
div {
  border: 2px solid #000;
  border-radius: 10px; /* 创建圆角 */
}
 
/* 背景尺寸 */
div {
  background-image: url('image.jpg');
  background-size: cover; /* 背景图片覆盖整个元素 */
}
 
/* 文字阴影 */
p {
  color: #333;
  text-shadow: 2px 2px 2px #aaa; /* 文字阴影效果 */
}
 
/* 关键帧动画 */
@keyframes example {
  from {background-color: red;}
  to {background-color: yellow;}
}
 
/* 应用动画 */
div {
  animation: example 4s infinite;
}
 
/* 伪元素添加内容 */
p::before {
  content: "#";
  color: blue;
}
 
/* 可调整大小的文本框 */
input[type="text"] {
  resize: both;
  overflow: auto;
}
 
/* 多列布局 */
div {
  column-count: 3;
  column-gap: 20px;
  column-rule: 1px solid #ccc;
}
 
/* 属性过渡效果 */
div {
  transition: background-color 0.5s ease-in-out;
}
2024-08-15

在HTML中,可以使用<blockquote>标签来表示一块引用自其他来源的文本。通常,这些文本会以斜体显示,并且还可以添加一个引号标记(通常是一个大的引号字符)来表示这是一个引用。

下面是一个使用<blockquote>的例子:




<blockquote>
  这是一个示例引用。这段文本将以斜体显示,并且在左右两边有装饰性的引号。
</blockquote>

在CSS中,可以使用::before::after伪元素来添加引号标记。下面是一个简单的CSS样式示例,它将给<blockquote>添加装饰性的引号:




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Blockquote Example</title>
<style>
blockquote {
  display: block;
  font-size: 16px;
  line-height: 1.6;
  margin: 20px 0;
  padding: 10px 20px;
  position: relative;
  quotes: '" "' '';
}
 
blockquote::before {
  content: open-quote;
  position: absolute;
  left: 5px;
  top: 5px;
  color: #666;
  font-size: 3em;
}
 
blockquote::after {
  content: close-quote;
  position: absolute;
  right: 5px;
  bottom: 5px;
  color: #666;
  font-size: 3em;
}
</style>
</head>
<body>
<blockquote>
  这是一个示例引用。这段文本将以斜体显示,并且在左右两边有装饰性的引号。
</blockquote>
</body>
</html>

在这个例子中,blockquote选择器定义了块引用的基本样式,而blockquote::beforeblockquote::after伪元素分别添加了开始和结束的引号。content属性使用了open-quoteclose-quote值,它们引用了quotes属性定义的值。

2024-08-15



import * as THREE from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
import { CSS3DRenderer, CSS3DObject } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
 
let camera, scene, renderer, labelRenderer, controls;
let mesh;
 
init();
animate();
 
function init() {
    camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.01, 10);
    camera.position.set(0.5, 0.5, 0.5);
 
    scene = new THREE.Scene();
 
    mesh = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1));
    scene.add(mesh);
 
    renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setPixelRatio(window.devicePixelRatio);
    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);
 
    controls = new OrbitControls(camera, labelRenderer.domElement);
 
    // 创建CSS3DObject并关联HTML元素
    const label = new CSS3DObject(document.createElement('div'));
    label.element.style.width = '100px';
    label.element.style.height = '100px';
    label.element.style.background = 'red';
    label.position.set(0.5, 0.5, 0);
    scene.add(label);
 
    // 创建一个新的CSS3DObject并关联另一个HTML元素
    const anotherLabel = new CSS3DObject(document.createElement('div'));
    anotherLabel.element.style.width = '50px';
    anotherLabel.element.style.height = '50px';
    anotherLabel.element.style.background = 'blue';
    anotherLabel.position.set(-0.5, 0.5, 0);
    scene.add(anotherLabel);
}
 
function animate() {
    requestAnimationFrame(animate);
    render();
}
 
function render() {
    mesh.rotation.x += 0.01;
    mesh.rotation.y += 0.005;
    controls.update();
    renderer.render(scene, camera);
    labelRenderer.render(scene, camera);
}

这段代码初始化了Three.js场景,包括相机、场景、灯光、物体以及渲染器。使用CSS3DRenderer渲染了一个红色的HTML DIV标签和一个蓝色的HTML DIV标签,并且它们会随着物体旋转而旋转。这是一个Three.js中CSS3DRenderer的基本使用案例。

2024-08-15

以下是一个使用HTML和CSS3实现的简单新年倒计时示例:




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>New Year Countdown</title>
<style>
  .countdown {
    font-size: 48px;
    font-weight: bold;
    text-align: center;
  }
  .day {
    animation: day-countdown 1s infinite;
  }
  @keyframes day-countdown {
    0% {
      color: #ff0;
    }
    100% {
      color: #f0f;
    }
  }
</style>
</head>
<body>
<div class="countdown day">01</div>
 
<script>
// JavaScript 控制倒计时
const newYear = new Date('2023-01-01T00:00:00'); // 请将日期更改为新的一年开始的时间
 
function countdown() {
  const now = new Date();
  const distance = newYear - now;
 
  if (distance < 0) {
    clearInterval(intervalId);
    document.querySelector('.countdown').textContent = '00';
  } else {
    const days = Math.floor(distance / (1000 * 60 * 60 * 24));
    document.querySelector('.countdown').textContent = days.toString().padStart(2, '0');
  }
}
 
countdown(); // 初始运行
const intervalId = setInterval(countdown, 1000); // 每秒更新
</script>
</body>
</html>

这段代码会在网页上显示一个倒计时天数,从1开始,并且每秒更新。JavaScript 脚本负责计算剩余时间,并更新页面上的数字。CSS3 中的 @keyframes 用于创建颜色变化的动画效果。这个示例简单易懂,适合作为新手学习CSS动画的入门项目。

2024-08-15

CSS3 2D变形、过渡和动画是一个强大的工具,可以用来创建动态的用户界面和富媒体内容。以下是一个简单的示例,展示了如何将2D变形、过渡和动画应用于一个简单的HTML元素。

HTML:




<div class="box"></div>

CSS:




.box {
  width: 100px;
  height: 100px;
  background-color: blue;
  margin: 30px;
  /* 2D变形 */
  transform: rotate(0deg) scale(1);
  /* 过渡效果 */
  transition: transform 0.5s ease-in-out;
}
 
.box:hover {
  /* 鼠标悬停时的变形 */
  transform: rotate(360deg) scale(1.5);
}
 
/* 使用关键帧动画 */
@keyframes growShrink {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.5);
  }
  100% {
    transform: scale(1);
  }
}
 
.box.animated {
  /* 触发动画 */
  animation: growShrink 2s infinite alternate;
}

在这个例子中,.box 元素在没有鼠标悬停时保持正常大小和旋转角度,当鼠标悬停时,它会旋转和放大。通过.animated 类,可以触发一个无限循环的动画,该动画会在大小和正常状态之间切换。这个例子演示了如何结合使用过渡和关键帧动画来创造更生动的用户界面元素。

2024-08-15

要使用CSS3实现一个图片瀑布流,可以使用CSS3的column-widthcolumn-gap属性来创建列,并使用break-inside: avoid来避免图片被拆分到不同列中。下面是一个简单的示例:

HTML:




<div class="waterfall">
  <div class="waterfall-item">
    <img src="image1.jpg" alt="Image 1">
  </div>
  <div class="waterfall-item">
    <img src="image2.jpg" alt="Image 2">
  </div>
  <!-- 更多 .waterfall-item -->
</div>

CSS:




.waterfall {
  column-count: 3; /* 固定列数 */
  column-gap: 1em; /* 列间隔 */
}
 
.waterfall-item {
  break-inside: avoid; /* 避免图片被拆分 */
  margin-bottom: 1em; /* 列间的间隔 */
  width: 100%; /* 列宽 */
}
 
.waterfall-item img {
  width: 100%; /* 图片宽度 */
  height: auto; /* 图片高度 */
  display: block; /* 阻止下方出现空隙 */
}

这个例子中,.waterfall是包含图片的容器,.waterfall-item是每个图片的容器。通过设置.waterfallcolumn-count为3,可以创建固定的列数。如果需要根据屏幕宽度调整列数,可以使用CSS媒体查询来动态改变column-count的值。

2024-08-15

在Vue中使用Three.js时,如果你在更改浏览器大小时遇到CSS3DObject的位置偏移问题,可能是因为相机的aspect ratio没有正确更新导致的。

解决方法:

  1. 监听浏览器的resize事件,并在事件触发时更新Three.js的相机和渲染器的尺寸。
  2. 更新相机的aspect ratio,它是相机的可视宽度与可视高度的比例。

以下是一个简化的代码示例:




// 在Vue组件的mounted钩子中
mounted() {
  this.initThreeJS();
  window.addEventListener('resize', this.handleWindowResize);
},
 
methods: {
  initThreeJS() {
    // 初始化Three.js场景、相机、渲染器和物体等
    // ...
 
    this.camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
    this.renderer = new THREE.WebGLRenderer();
    this.renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(this.renderer.domElement);
 
    // 假设你有一个CSS3DObject
    // this.cssObject = new THREE.CSS3DObject(someDivElement);
    // scene.add(this.cssObject);
 
    // 初始渲染
    this.renderer.render(this.scene, this.camera);
  },
 
  handleWindowResize() {
    this.camera.aspect = window.innerWidth / window.innerHeight;
    this.camera.updateProjectionMatrix();
 
    this.renderer.setSize(window.innerWidth, window.innerHeight);
 
    // 渲染新的画面
    this.renderer.render(this.scene, this.camera);
  }
},
 
beforeDestroy() {
  // 清理资源和事件监听器
  window.removeEventListener('resize', this.handleWindowResize);
  // dispose objects, renderer, scene etc.
}

确保你的CSS3DObject是通过将DOM元素传递给new THREE.CSS3DObject(element)来创建的,并且在handleWindowResize方法中不要忘记调用renderer.render来更新渲染结果。

这段代码提供了一个框架,确保在浏览器大小改变时,Three.js场景中的相机和渲染器都能正确地更新尺寸,并重新渲染场景。

2024-08-15

为了创建一个CSS3雷达扫描效果,我们可以使用关键帧动画和CSS3的transform属性。以下是一个简单的实现示例:

HTML:




<div class="scanner">
  <div class="scanner-line"></div>
</div>

CSS:




.scanner {
  position: relative;
  width: 200px;
  height: 50px;
  margin: 50px;
}
 
.scanner-line {
  position: absolute;
  bottom: 0;
  width: 100%;
  height: 5px;
  background-color: #333;
  animation: scan 3s linear infinite;
}
 
@keyframes scan {
  0% {
    transform: translateY(0);
    opacity: 0.5;
  }
  50% {
    transform: translateY(-20px);
    opacity: 1;
  }
  100% {
    transform: translateY(-50px);
    opacity: 0.5;
  }
}

这段代码会创建一个垂直上下扫描的效果,通过改变transformtranslateY值可以调整扫描的起始和终点位置,animation属性中的3s表示动画周期,可以根据需要调整时长。这个示例是一个基本的开始,你可以根据需要添加更多样式和动画效果来完善这个雷达扫描效果。