2024-08-07



<!DOCTYPE html>
<html>
<head>
    <style>
        .button {
            display: inline-block;
            border-radius: 4px;
            background-color: #f4511e;
            border: none;
            color: #FFFFFF;
            text-align: center;
            font-size: 28px;
            padding: 20px;
            width: 200px;
            transition: all 0.5s;
            cursor: pointer;
            margin: 5px;
            text-decoration: none;
        }
 
        .button span {
            cursor: pointer;
            display: inline-block;
            position: relative;
            transition: 0.5s;
        }
 
        .button span:after {
            content: '\00bb';
            position: absolute;
            opacity: 0;
            top: 0;
            right: -20px;
            transition: 0.5s;
        }
 
        .button:hover span {
            padding-right: 20px;
        }
 
        .button:hover span:after {
            opacity: 1;
            right: 0;
        }
    </style>
</head>
<body>
 
<a href="https://www.example.com" class="button" target="_blank">
    <span>点击这里</span>
</a>
 
</body>
</html>

这段代码使用了CSS样式创建了一个立体感超链接按钮,当鼠标悬停在按钮上时,右侧会出现箭头符号,增加了界面的交互感。

2024-08-07



// 定义一个简单的函数来模拟 CSS3 calc() 函数的功能
function calc(expression) {
  // 使用正则表达式来匹配 calc() 函数中的运算符和操作数
  const regex = /(-?\d+(\.\d+)?)(px|em|rem|vh|vw|%)?\s?([+-])\s?(-?\d+(\.\d+)?)(px|em|rem|vh|vw|%)?/;
  const match = regex.exec(expression);
 
  if (!match) {
    throw new Error('Invalid expression');
  }
 
  // 提取出操作数和单位,并转换为相应的数字
  const [, num1, unit1, operator, num2, unit2] = match;
  const value1 = parseFloat(num1) + (unit1 || '');
  const value2 = parseFloat(num2) + (unit2 || '');
 
  // 根据不同的运算符执行不同的运算
  switch (operator) {
    case '+':
      return parseFloat(value1) + parseFloat(value2);
    case '-':
      return parseFloat(value1) - parseFloat(value2);
    default:
      throw new Error('Unsupported operator');
  }
}
 
// 使用示例
console.log(calc("10px + 5px")); // 输出: 15px
console.log(calc("10em - 2em")); // 输出: 8em

这段代码提供了一个简单的JavaScript函数 calc,它接收一个字符串表达式,并尝试解析它以执行加法或减法运算。它使用正则表达式来匹配数字和单位,并根据提供的运算符进行计算。这个函数可以作为一个简单的模拟工具,帮助理解CSS calc() 函数的工作原理和JavaScript的正则表达式处理能力。

2024-08-07

CSS盒子模型的border-radius属性用于设置元素的圆角。通过设置不同的参数,可以创建完美的圆形、椭圆形或者椭圆角矩形。

以下是一些示例代码:

  1. 创建一个具有圆角的矩形:



.box {
  width: 200px;
  height: 100px;
  background-color: #4CAF50;
  border-radius: 25px;
}
  1. 创建一个正圆形:



.circle {
  width: 100px;
  height: 100px;
  background-color: #4CAF50;
  border-radius: 50%;
}
  1. 创建一个椭圆形,水平方向和垂直方向的圆角半径不同:



.oval {
  width: 200px;
  height: 100px;
  background-color: #4CAF50;
  border-radius: 50px / 30px;
}
  1. 创建具有单独圆角的矩形:



.box {
  width: 200px;
  height: 100px;
  background-color: #4CAF50;
  border-radius: 15px 30px 45px 60px; /* 顺序为左上角、右上角、右下角、左下角 */
}
  1. 创建具有单独圆角的矩形,每个角可以是不同的值:



.box {
  width: 200px;
  height: 100px;
  background-color: #4CAF50;
  border-radius: 15px 30px 45px 60px / 20px 50px 80px 70px; /* 水平和垂直方向分别设置 */
}

以上代码可以直接应用于HTML元素,例如:




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

这些CSS类将应用圆角边框和背景色到对应的HTML元素上。

2024-08-07

在CSS中,实现盒子不确定宽高的上下左右居中有很多种方法,以下是八种常见的居中方法:

  1. 使用flex布局
  2. 使用grid布局
  3. 使用绝对定位和transform
  4. 使用绝对定位和margin auto
  5. 使用line-height(适合单行文本)
  6. 使用table-cell和vertical-align(适合内部元素是单行的情况)
  7. 使用after伪元素和vertical-align(适合内部元素是单行的情况)
  8. 使用margin负值(适合已知宽高)

以下是每种方法的示例代码:

  1. Flex布局



.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}



<div class="parent">
  <div class="child">Content</div>
</div>
  1. Grid布局



.parent {
  display: grid;
  place-items: center;
}



<div class="parent">
  <div class="child">Content</div>
</div>
  1. 绝对定位和transform



.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}



<div class="parent">
  <div class="child">Content</div>
</div>
  1. 绝对定位和margin auto



.parent {
  position: relative;
}
.child {
  width: 100px;
  height: 100px;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
}



<div class="parent">
  <div class="child">Content</div>
</div>
  1. line-height(适合单行文本)



.parent {
  height: 100px;
  line-height: 100px;
}
.child {
  display: inline-block;
  vertical-align: middle;
}



<div class="parent">
  <div class="child">Content</div>
</div>
  1. table-cell和vertical-align(适合内部元素是单行的情况)



.parent {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}



<div class="parent">
  <div class="child">Content</div>
</div>
  1. after伪元素和vertical-align(适合内部元素是单行的情况)



.parent {
  position: relative;
}
.parent::after {
  content: "";
  display: inline-block;
  height: 100%;
  vertical-align: middle;
}
.child {
  display: inline-block;
  vertical-align: middle;
}



<div class="parent">
  <div class="child">Content</div>
</div>
  1. 使用margin负值(适合已知宽高)



.child {
  width: 100px;
  height: 100px;
  position: relative;
  top: 50%;
  left: 50%;
  margin-left: -50px;
  margin-top: -50px;
}



<div class="parent">
  <div class="child">Content</div>
</div>

以上每种方法都有各自的使用场景,你可以根据实际情况选择合适的方法。

2024-08-07

HTML5和CSS3是现代网页设计的核心技术。以下是一个简单的HTML5和CSS3提升导读的示例:




<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>提升导读 - HTML5CSS3</title>
    <style>
        .raised-box {
            width: 200px;
            height: 200px;
            background-color: #4CAF50;
            border: 1px solid #333;
            box-shadow: 0px 5px 5px rgba(0,0,0,0.3);
            border-radius: 10px;
            margin: 30px;
            transition: box-shadow 0.3s ease-in-out;
        }
        .raised-box:hover {
            box-shadow: 0px 8px 10px rgba(0,0,0,0.4);
        }
    </style>
</head>
<body>
    <div class="raised-box"></div>
</body>
</html>

这段代码展示了如何使用CSS3的box-shadow属性和border-radius属性来创建一个带有阴影效果的方框,并且使用了CSS3的过渡效果transition来增强互动体验。当鼠标悬停在方框上时,盒子的阴影会变得更大更复杂,增强了元素的3D效果,从而提升了导读。

2024-08-07

以下是一个简单的HTML和CSS代码示例,演示如何使用CSS3创建一个3D立方体旋转特效:




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3D立方体旋转特效</title>
<style>
  .stage {
    width: 200px;
    height: 200px;
    margin: 50px auto;
    perspective: 1000px;
  }
 
  .cube {
    width: 100%;
    height: 100%;
    transform-style: preserve-3d;
    animation: rotate 10s infinite linear;
  }
 
  .cube div {
    position: absolute;
    width: 100%;
    height: 100%;
    background: #ccc;
    opacity: 0.7;
  }
 
  .cube .face1 {
    transform: rotateY(0deg) translateZ(50px);
  }
 
  .cube .face2 {
    transform: rotateX(90deg) translateZ(50px);
  }
 
  .cube .face3 {
    transform: rotateY(180deg) translateZ(50px);
  }
 
  .cube .face4 {
    transform: rotateX(-90deg) translateZ(50px);
  }
 
  .cube .face5 {
    transform: rotateY(-90deg) translateZ(50px); rotateZ(90deg);
  }
 
  .cube .face6 {
    transform: rotateY(90deg) translateZ(50px); rotateZ(90deg);
  }
 
  @keyframes rotate {
    0% {
      transform: rotateX(0deg) rotateY(0deg);
    }
    100% {
      transform: rotateX(360deg) rotateY(360deg);
    }
  }
</style>
</head>
<body>
<div class="stage">
  <div class="cube">
    <div class="face1"></div>
    <div class="face2"></div>
    <div class="face3"></div>
    <div class="face4"></div>
    <div class="face5"></div>
    <div class="face6"></div>
  </div>
</div>
</body>
</html>

这段代码定义了一个名为.stage的容器,它设置了视口,并且包含了一个.cube的div,它是由6个面.face1-.face6组成的。CSS中的.cube类使用transform-style: preserve-3d;来开启3D空间,并且定义了一个无限循环的动画rotate,来使得立方体不断旋转。每个面都被放置在正确的位置,并通过translateZ函数推进到观众的面前。

2024-08-07

CSS3的浏览器私有前缀用于让某些特定的浏览器(如WebKit内核的浏览器,如Chrome和Safari;Gecko内核的浏览器,如Firefox)支持一些尚未成为标准的CSS3特性。一旦这些特性成为了标准,浏览器厂商会逐渐停止支持私有前缀。

以下是一些常见的CSS3属性的私有前缀示例:




/* WebKit内核浏览器,如Chrome和Safari */
.element {
  -webkit-border-radius: 10px; /* 圆角 */
  -webkit-transform: rotate(30deg); /* 旋转 */
  -webkit-box-shadow: 5px 5px 10px #000; /* 盒子阴影 */
  -webkit-transition: all 0.3s ease; /* 过渡效果 */
}
 
/* Gecko内核浏览器,如Firefox */
.element {
  -moz-border-radius: 10px; /* 圆角 */
  -moz-transform: rotate(30deg); /* 旋转 */
  -moz-box-shadow: 5px 5px 10px #000; /* 盒子阴影 */
  -moz-transition: all 0.3s ease; /* 过渡效果 */
}
 
/* 注意:对于Transition和Animation的私有前缀,还需要一个标准的前缀版本,以及可能的无前缀版本。 */
.element {
  transition: all 0.3s ease; /* 标准语法 */
  transform: rotate(30deg); /* 无前缀语法 */
}

在编写CSS3代码时,应该总是包括标准前缀和私有前缀,以确保最大的兼容性。随着时间的推移,随着标准的推广和浏览器厂商逐步废弃对私有前缀的支持,私有前缀会逐渐不再需要。

2024-08-07

由于篇幅限制,下面仅展示3D旋转相册的核心函数,其中包含了HTML结构和CSS样式的关键部分。




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>3D旋转相册</title>
<style>
  .gallery {
    perspective: 1000px;
  }
  .gallery-item {
    position: relative;
    width: 250px;
    height: 150px;
    margin: 10px;
    transform-style: preserve-3d;
    transition: transform 1s;
  }
  .gallery-item img {
    width: 100%;
    height: 100%;
    position: absolute;
    backface-visibility: hidden;
  }
  .gallery-item.flip {
    transform: rotateY(180deg);
  }
</style>
</head>
<body>
<div class="gallery">
  <div class="gallery-item">
    <img src="image1.jpg" alt="Image 1">
    <div class="back">
      <img src="image1-back.jpg" alt="Image 1 Back">
    </div>
  </div>
  <!-- 其他相册项 -->
</div>
 
<script>
// 这里应该包含前端面试长问到的“点击相册项时翻转”的逻辑
document.querySelectorAll('.gallery-item').forEach(item => {
  item.addEventListener('click', () => {
    item.classList.toggle('flip');
  });
});
</script>
</body>
</html>

这个简化版的HTML和CSS代码展示了如何创建一个基本的3D旋转相册,其中.gallery是相册容器,.gallery-item是每个相册项的容器,它们通过CSS的transform-style: preserve-3d;属性开启3D空间,并通过JavaScript监听点击事件来切换.flip类以实现翻转效果。这个简化版本的代码示例教学意义更为明显,并且可以作为面试官提问的一个基础。

2024-08-07

CSS3是CSS技术的一个版本,于2011年被广泛采用,它引入了许多新特性,如阴影、渐变、变换、动画等。以下是一些常见的CSS3知识点和相应的示例代码:

  1. 阴影效果:



div {
  box-shadow: 5px 5px 10px #888888;
}
  1. 圆角效果:



div {
  border-radius: 10px;
}
  1. 渐变背景:



div {
  background: linear-gradient(to right, red, yellow);
}
  1. 2D转换:



div:hover {
  transform: rotate(360deg) scale(1.5);
}
  1. 动画效果:



@keyframes example {
  from {background-color: red;}
  to {background-color: yellow;}
}
 
div {
  animation-name: example;
  animation-duration: 4s;
}
  1. 多列布局:



div {
  column-count: 3;
}
  1. 用户界面样式:



input[type="range"] {
  -webkit-appearance: none;
  width: 100%;
}
 
input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none;
  height: 10px;
  width: 10px;
  background: #000;
}

这些是CSS3的一些基本特性,每个特性都可以通过不同的属性和值来实现各种各样的视觉效果。CSS3的学习需要时间和实践,但一旦掌握,你将能创建出令人惊叹的网页设计。

2024-08-07

以下是一个简单的示例,展示了如何使用CSS3创建一个鼠标悬停时的动画效果,包括旋转、放大和缩小以及移动:




<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSS3 Animation Example</title>
<style>
  .box {
    width: 100px;
    height: 100px;
    background-color: #f00;
    margin: 30px;
    transition: transform 0.5s, background-color 0.5s; /* 过渡效果 */
  }
 
  .box:hover {
    transform: rotate(360deg) scale(1.2) translate(20px, 20px); /* 变换效果 */
    background-color: #0f0;
  }
</style>
</head>
<body>
 
<div class="box"></div>
 
</body>
</html>

在这个例子中,.box 类定义了一个方框,并设置了基本的过渡效果。当鼠标悬停在方框上时,:hover 伪类触发,方框会旋转360度、放大1.2倍,并沿x轴和y轴各移动20像素,同时背景色改变为绿色。