0

0

css如何使用id与class来控制元素样式的实例分析

黄舟

黄舟

发布时间:2017-07-20 09:13:47

|

2268人浏览过

|

来源于php中文网

原创

   现在有这么一个实例要求:

   1)画五个盒子,分别用红、紫、橙、绿、蓝字体颜色来表示;

   2)鼠标点击其中一个盒子时,边框加粗并显示与盒子字体颜色一致的颜色;

   效果如下图:

   

立即学习前端免费学习笔记(深入)”;

                       (图1)盒子效果图

   下面是具体的实现思路:

   一、html内容构建

     首先利用html内容表达五个盒子内容,代码如下:

  • 绿

  二、原始样式实现

     利用css来表达上述需求1的样式要求,css代码如下:

body{
  
  font-size: 10px;

}

#levelGroup{

	list-style: none;
	border: 1px solid gray;
	height: 40px;
	width: 200px;
	overflow: hidden;
	padding: 10px;

}

#level1{

	border: 1px solid gray;
	width: 20px;
	height: 20px;
	float: left;
	color: red;
	margin-right: 5px;
	text-align: center;
	padding-top: 5px;
}


#level2{

	border: 1px solid gray;
	width: 20px;
	height: 20px;
	float: left;
	color: purple;
    margin-right: 5px;
	text-align: center;
	padding-top: 5px;

}

#level3{

	border: 1px solid gray;
	width: 20px;
	height: 20px;
	float: left;
	color: orange;
    margin-right: 5px;
	text-align: center;
	padding-top: 5px;

}
#level4{

	border: 1px solid gray;
	width: 20px;
	height: 20px;
	float: left;
	color: green;
    margin-right: 5px;
	text-align: center;
	padding-top: 5px;

}
#level5{

	border: 1px solid gray;
	width: 20px;
	height: 20px;
	float: left;
	color: blue;
    margin-right: 5px;
	text-align: center;
	padding-top: 5px;

}

        至此可以完成图1的效果。

 三、交互样式实现

Copy.ai
Copy.ai

Copy.ai 是一个人工智能驱动的文案生成器

下载

       接下来通过分析需求2,我们发现只要在点击每个li元素时,为该元素赋予一个线框加粗而且颜色改变的样式即可实现。那么如何添加样式呢,通常我们的做法就是为每个li添加一个class(类)属性,并设置该class的css样式(边框加粗、颜色改变),具体css代码如下:

.level1_selected{

  border: 2px solid red !important;

}

.level2_selected{

	border: 2px solid purple !important;
}
.level3_selected{

	border: 2px solid orange !important;
}
.level4_selected{

	border: 2px solid green !important;
}
.level5_selected{

	border: 2px solid blue !important;
}

      接着,利用js控制交互样式的代码如下:

$("#levelGroup li").click(function()
   
      //首先获取该元素的索引
      var index = $(this).index();


      //接着为该li添加相应的css交互样式
       var para_index = index+1;
       $(this).addClass("level"+para_index+"_selected");


     //同时也要将其他li元素的样式还原为初始状态
     $("#levelGroup li").each(function(){
        var curIndex = $(this).index();
        if(curIndex !=index){
             
             curIndex = curIndex+1;
             $(this).removeClass("level"+curIndex+"_selected");


       }

    });
});

最终实现的效果如图2所示:


                 图(2)交互效果图a                                                                     交互效果图b

   四、代码优化

       问题:通过观察上面代码的实现方式,读者可能会很快发现一个问题:js中的代码操作繁琐,还要遍历,整体效率低

       分析:那么如何改进和优化呢?通过分析我们发现,js中的代码之所以复杂,是因为每个li元素的需求1原始样式由id控制,如#level1{......},而需求2的交互样式由class属性控制,如.level1_selected{......},,而且每个li元素的原始样式和交互样式都不一样,所以造成交互时必须进行索引定位和遍历实现样式的改变。

       解决方法:既然是css样式设置方式的问题,那么如何设计改变呢,其实这里我们可以遵循这样一个理念:尽量少的去增加新的控制类,以减少后续的js操作。比如上述的方法就是在需求2的解决方法中为每个li增加了一个“选中类”,如类level1_selected、类level2_selected......。这里理想的解决方法是只增加一个类selected,但是selected类要通过与每个li的id结合使用,从而保证每个selected类的具有不同样式。可能有些同学到这里没怎么看懂,没关系!看下面代码就知道了。

      重新设计需求2的交互(选中)

#level1.selected{

	border: 2px solid red;

}

#level2.selected{

	border: 2px solid purple;
}
#level3.selected{

	border: 2px solid orange;
}
#level4.selected{

	border: 2px solid green;
}
#level5.selected{

	border: 2px solid blue;
}

      那么接下来,我们可以看下js的中的代码是如何改变的呢,读者也可以根据我改变的样式类自己先写一下js的操作代码,是否与我下面写的一样呢?

$("#levelGroup li").click(function(){
   
      $(this).addClass("selected").siblings().removeClass("selected");

});


       看完代码的你,是不是感觉跟我一样开心,毕竟只是改变了一下css的添加类方式,就可以让后续的js代码如此简洁!所以这里得出的一个结论就是(上面已经提到过):尽量少的去增加新的控制类,以减少后续的js操作。
 

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

84

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

24

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

35

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

56

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

16

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

26

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
前端系列快速入门课程
前端系列快速入门课程

共4课时 | 0.4万人学习

react hooks实战移动端企业级项目
react hooks实战移动端企业级项目

共59课时 | 6.4万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号