CSS3:hover&demo

简介: 本文介绍了CSS中`hover`伪类的基本用法,包括改变元素自身样式、影响子元素及相邻或后续兄弟元素样式的技巧。同时,还探讨了`:before`和`:after`伪元素的使用方法,以及如何通过CSS实现边框流动效果、创建登录页面、设计轮盘游戏界面和平滑处理文本溢出等实用案例。每个示例都配有代码块,便于理解和实践。

前言:

在网页设计中,CSS hover 伪类为用户交互提供了丰富的视觉反馈,使得界面更加生动和吸引人。本文将深入探讨 hover 伪类的基本用法,包括如何改变元素自身的样式、影响子元素以及相邻或后续兄弟元素的样式。此外,我们还将介绍 :before 和 :after 伪元素的使用方法,这些伪元素可以在不增加额外 HTML 元素的情况下,丰富页面的样式。

hover

hover用法

这个表示的是:当鼠标悬浮在a这个样式上的时候,a的背景颜色设置为黄色

a:hover

background-color:yellow;

}

这个是最普通的用法了,只是通过a改变了style

2

A元素:hover  B元素  鼠标悬停在A元素时,改变A元素的子元素B的样式

<style>
        .main {
            width: 400px;
            height: 400px;
            border: 1px solid black;
        }
        .main:hover .box1 {
            background-color: black;
            height: 100px;
            width: 100px;
        }
    </style>
</head>
<body>
    <div class="main">
        <div class="box1">
        </div>
    </div>
</body>

3

A元素:hover + B元素 鼠标悬停在A元素时,改变与A相邻的兄弟元素B的样式(A必须与B 相邻)

<style>
        .main {
            width: 400px;
            height: 400px;
            border: 1px solid black;
        }
        .main:hover+.box1 {
            background-color: black;
            height: 100px;
            width: 100px;
        }
    </style>
</head>
<body>
    <div class="main">
    </div>
    <div class="box1">
    </div>
</body>

4

A元素:hover ~ B元素 鼠标悬停在A元素时,改变A的指定兄弟元素B的样式表示(A B可以不相邻,但B必须在A元素之后。)

<style>
        .main {
            width: 400px;
            height: 400px;
            border: 1px solid black;
        }
        .main:hover~.box2 {
            background-color: black;
            height: 100px;
            width: 100px;
        }
    </style>
</head>
<body>
    <div class="main">
    </div>
    <div class="box1">
    </div>
    <div class="box2">
    </div>
</body>


::after 和 ::before

“:before” 伪元素可以在元素的内容前面插入新内容。

“:after” 伪元素可以在元素的内容之后插入新内容。

::before或::after都必须和content属性结合使用,content不能没有,内容至少为空;伪元素的display默认为inline,可以自己改.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            position: relative;
            width: 200px;
            height: 50px;
            background-color: pink;
        }

        .box::before {
            position: absolute;
            content: "";
            width: 12px;
            height: 12px;
            border: 1px solid black;
            border-bottom-color: transparent;
            border-right-color: transparent;
            transform: translate(-50%, -50%) rotate(-45deg);
            left: 20px;
            top: 50%;
        }
        .box::after {
            position: absolute;
            content: "";
            width: 12px;
            height: 12px;
            border: 1px solid black;
            border-bottom-color: transparent;
            border-right-color: transparent;
            transform: translate(-50%, -50%) rotate(135deg);
            right: 20px;
            top: 50%;
        }
    </style>
</head>

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

</html>

小demo

边框流动

<template>
  <div class="box">
    <h2>CSS</h2>
  </div>
</template>
<script setup>
</script>
<style scoped lang="less">
.box {
  position: relative;
  width: 180px;
  height: 250px;
  background: rgba(0, 0, 0, 0.8);
  border-radius: 20px;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow: hidden;
  h2 {
    color: white;
    font-size: 4em;
    text-shadow: 2px 2px pink;
    z-index: 1;
  }
  &::before {
    content: '';
    position: absolute;
    width: 120px;
    height: 120%;
    background: linear-gradient(#00ccff, #d500f9);
    animation: rotate 5s linear infinite;
  }
  &::after {
    content: '';
    position: absolute;
    background: #0e1238;
    inset: 5px;
    border-radius: 20px;
  }
}
@keyframes rotate {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
</style>


一个登录页面


<div>
        <form action="" class="login">
            <p>Login</p>
            <input type="text" placeholder="username">
            <input type="password" placeholder="password">
            <input type="submit" class="btn" value="Login">
        </form>
    </div>
* {
            user-select: none;
        }
        body {
            background: url(./res/computer.webp) no-repeat;
            background-size: cover;
            background-attachment: fixed;
        }
        .login {
            position: absolute;
            top: 50%;
            margin-top: -200px;
            left: 50%;
            margin-left: -200px;
            background-color: whitesmoke;
            width: 400px;
            height: 400px;
            border-radius: 25px;
            text-align: center;
            padding: 5px 40px;
            box-sizing: border-box;
        }
        p {
            font-size: 42px;
            font-weight: 600;
        }
        input {
            background: whitesmoke;
            width: 100%;
            height: 48px;
            margin-bottom: 10px;
            border: none;
            border-bottom: 2px solid silver;
            outline: none;
            font-size: 20px;
        }
        .btn {
            background: #59c2c5;
            width: 38%;
            height: 48px;
            border-radius: 8px;
            margin-top: 40px;
            font-size: 28px;
            font-weight: 300;
            color: white;
        }
        .btn:hover {
            background-color: #59c2a0;
        }


轮盘

<script setup >
import {onMounted, ref} from "vue";
onMounted(()=>{
})
let d = 0;
let line=ref()
const start=()=>{
  line.value.style.transform=`rotate(0)`
  const rotate=setInterval(()=>{
    d++
    let a = d +"deg"
    line.value.style.transform=`rotate(${a})`
  },10)
  // let time =  (Math.random()*10)
 // let time =(Math.floor(Math.random()*5)+1)*(Math.random().toFixed(2))*1000
// 生成3到5之间的随机数
  const time = (Math.floor(Math.random() * 3) + 5)*(Math.random().toFixed(2))*1000;
  console.log(time)
  setTimeout(()=>{
    clearInterval(rotate)
  },time)
}
</script>
<template>
  <div>
    <div class="circle">
  <div class="box1 box"></div>
  <div class="box2 box"></div>
  <div class="box3 box"></div>
  <div class="box4 box"></div>
      <div class="line" ref="line"></div>
    </div>
    <div>
  <el-button @click = start>start</el-button>
      </div>
  </div>
</template>
<style scoped lang="scss">
.circle{
  width: 400px;
  height: 400px;
  overflow: hidden;
  .box{
    height: 200px;
    width: 200px;
    transform: rotate(0deg) !important;
  }
  .box1{
    background: red;
    border-top-left-radius:100%;
  }
  .box2{
    position: relative;
    background: yellow;
    top: -200px;
    left: 200px;
    border-top-right-radius:100%;
  }  .box3{
   position: relative;
         background: green;
    top: -200px;
         border-bottom-left-radius:100%;
     }
  .box4{
    background: #1c37e1;
    position: relative;
    top: -400px;
    left: 200px;
    border-bottom-right-radius:100%;
  }
  .line{
    height: 8px;
    width: 150px;
    background: #af09e3;
    position: fixed;
    top: 205px;
    left: 207px;
    border-radius: 10px;
    transform-origin: left ;
    //transform: rotate(45deg);
  }
}
</style>


页面上可以平滑

用 自动 换行 ,强制 不换行,强制 换行 超出显示省略号

white-space: nowrap;
  nowrap 不换行 
wrap  换行   包裹 的英文 意思   会 自动 换行  
换行
p { word-wrap:break-word; }
断行  注意:设置强制将英文单词断行,需要将行内元素设置为块级元素。
p { word-break:break-all; }
超出显示省略号:
p{text-overflow:ellipsis;overflow:hidden;}
white-space: normal|pre|nowrap|pre-wrap|pre-line|inherit; 
white-space: 属性设置如何处理元素内的空白
normal: 默认。空白会被浏览器忽略。
pre: 空白会被浏览器保留。其行为方式类似 HTML 中的 pre 标签。
nowrap: 文本不会换行,文本会在在同一行上继续,直到遇到 br 标签为止。
pre-wrap: 保留空白符序列,但是正常地进行换行。
pre-line: 合并空白符序列,但是保留换行符。
inherit: 规定应该从父元素继承 white-space 属性的值。
word-wrap: normal|break-word; 
word-wrap: 属性用来标明是否允许浏览器在单词内进行断句,这是为了防止当一个字符串太长而找不到它的自然断句点时产生溢出现象。
normal: 只在允许的断字点换行(浏览器保持默认处理)
break-word: 在长单词或URL地址内部进行换行
<!doctype html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8" />  
    <title>Document</title>  
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />  
    <style>  
        .horizontal-scroll {  
            width: 100%;  
            height: 200px;  
            overflow-x: auto; /* 改为 overflow-x 以允许水平滚动 */  
            overflow-y: hidden; /* 确保垂直方向不出现滚动条 */  
            scrollbar-width: none; /* Firefox */  
            -ms-overflow-style: none; /* IE 10+ */  
        }  
        /* 隐藏滚动条,但允许内容滚动(WebKit) */  
        .horizontal-scroll::-webkit-scrollbar {  
            display: none;  
        }  
        /* 其他样式保持不变 */  
        .scroll-container {  
            white-space: nowrap;  
        }  
        .display-item {  
            width: 200px;  
            height: 200px;  
            display: inline-block;  
        }  
        .box1{  
            background-color: black;  
        }  
        .box2{  
            background-color: blue;  
        }  
        .box3{  
            background-color: green;  
        }  
        .box4{  
            background-color: red;  
        }  
    </style>  
</head>  
<body>  
    <div class="horizontal-scroll">  
        <div class="scroll-container">  
            <div class="display-item box1">  
            </div>  
            <div class="display-item box2">  
            </div>  
            <div class="display-item box3">  
            </div>  
            <div class="display-item box4">  
            </div>  
        </div>  
    </div>  
</body>  
</html>


相关文章
|
5月前
|
前端开发 JavaScript
css之伪类hover改变自身、子元素、其他元素的样式
css之伪类hover改变自身、子元素、其他元素的样式
93 0
|
前端开发
css改input变输入框光标颜色demo效果示例(整理)
css改input变输入框光标颜色demo效果示例(整理)
|
2天前
|
前端开发 UED
如何使用css给一个盒子加上好看的hover阴影效果
如何使用css给一个盒子加上好看的hover阴影效果
7 1
|
26天前
|
JavaScript 前端开发
JS配合CSS3实现动画和拖动小星星小Demo
本文通过代码示例展示了如何使用JavaScript和CSS3实现动画效果和拖动小星星的交互效果,包括文字掉落动画和鼠标拖动产生小星星动画的实现方法。
32 0
JS配合CSS3实现动画和拖动小星星小Demo
|
3月前
|
前端开发
前端 CSS 经典:图层放大的 hover 效果
前端 CSS 经典:图层放大的 hover 效果
35 0
|
3月前
|
前端开发 JavaScript
前端 CSS 经典:3D Hover Effect 效果
前端 CSS 经典:3D Hover Effect 效果
43 0
|
10月前
|
前端开发
CSS改变图标颜色(filter一行代码解决hover变换颜色问题)
CSS改变图标颜色(filter一行代码解决hover变换颜色问题)
220 0
|
10月前
|
XML 前端开发 小程序
css实例(一)鼠标hover下拉菜单
红框标注位置,有一个小尖尖角,这个使用样式是这样实现的。 css 复制代码
135 0
|
11月前
|
前端开发 JavaScript
CSS: hover选择器控制子元素的出现和隐藏
CSS: hover选择器控制子元素的出现和隐藏
88 0
|
12月前
css3 hover效果
css3 hover效果
49 0