样式操作之className和classList的差异

614 阅读1分钟

样式操作之className和classList的差异

通过clsaaName操作css

​ 如果需要通过js来修改样式,且修改的样式比较多,可以通过clssName来操作css

语法:

元素.className = '类名'

注意:

  • 由于class是关键字,所以使用className来替代
  • className是使用新值换旧值,会替换掉之前的类名,如果需要多添加一个类,则需要保留之前的类名

案例:

<!DOCTYPE html>
<html lang="en"><head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>改个字</title>
    <style>
        .divborder {
            border: 1px solid #ccc;
        }
        
        .mydiv {
            width: 400px;
            height: 400px;
            background-image: url(./images/1.jpg);
            background-size: contain;
            background-repeat: no-repeat;
        }
    </style>
</head><body>
    <button>改背景</button>
    <div class="divborder">我是内容</div>
​
    <script>
        let div = document.querySelector('.divborder')
        let btn = document.querySelector('button')
        btn.addEventListener('click', function() {
            // clssName 会新值换旧值,如需要添加一个类,需要保留之前的类名
            div.className = 'divborder mydiv'
        })
    </script>
</body></html>

通过classList操作css

​ 为了解决className 容易覆盖以前的类名,我们可以通过classList方式追加和删除类名

语法:


//追加一个类
Element.classList.add('类名')
//删除一个类
Element.classList.remove('类名')
//切换一个类
Element.classList.toggle('类名')
//判断当前元素是否包含一个指定名称的类名,返回一个布尔值
Element.classList.contains('类名')

注意:

  • classList.add()在追加一个类名时,“不影响”其他样式,若新添加的类有相同的样式时,会导致样式覆盖
  • classList.remove()在去除一个类名时,不影响其他样式
  • classList.toggle() 如果有该类名就移除,如果没有该类名就添加
  • classList.contains()会返回一个布尔值

案例:


<!DOCTYPE html>
<html lang="en"><head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
    <style>
        .red {
            color: red;
        }
        
        .size50 {
            font-size: 50px;
        }
        
        .underline {
            text-decoration: underline;
        }
    </style>
</head><body>
    <button>添加一个字体大小样式</button>
    <button class="second">移除一个字体大小样式</button>
    <button>切换一个字体大小样式</button>
    <button>判断元素是否有某个样式</button>
    <p class="red">我是百变p元素</p>
​
    <script>
        let btn1 = document.querySelector('button')
        let btn2 = document.querySelector('.second')
        let btn3 = document.querySelector('button:nth-of-type(3)')
        let btn4 = document.querySelectorAll('button')[3]
        let p = document.querySelector('p')
​
        btn1.addEventListener('click', function() {
            // classList.add()追加指定名称的类名 “不影响”元素之前的样式
            p.classList.add('size50', 'underline')
        })
        btn2.addEventListener('click', function() {
            // classList.remove()移除指定名称的类名 不影响其他样式类名
            p.classList.remove('size50')
        })
        btn3.addEventListener('click', function() {
            // classList.toggle()切换一个类名,如果有就移除,如果没有就添加
            p.classList.toggle('size50')
        })
        btn4.addEventListener('click', function() {
            // classList.contains 判断当前元素是否包含一个指定名称的类名,返回一个布尔值,如果是返回真,如果否返回假
            let flag = p.classList.contains('size50')
            console.log(flag);
        })
    </script>
</body></html>