问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

纯CSS实现多个display:none到display:block切换

发布网友 发布时间:2022-04-06 13:29

我来回答

4个回答

懂视网 时间:2022-04-06 17:50

实现主题切换

这里主题切换的思路是替换link标签的href属性,因此,需要写一个替换函数,在src目录下新建themes.js文件,代码如下:

// themes.js
const createLink = (() => {
 let $link = null
 return () => {
 if ($link) {
 return $link
 }
 $link = document.createElement('link')
 $link.rel = 'stylesheet'
 $link.type = 'text/css'
 document.querySelector('head').appendChild($link)
 return $link
 }
})()
/**
 * 主题切换函数
 * @param {string} theme - 主题名称, 默认default
 * @return {string} 主题名称
 */
const toggleTheme = (theme = 'default') => {
 const $link = createLink()
 $link.href = `./themes/${theme}.css`
 return theme
}
export default toggleTheme

然后,在themes文件下创建default.css和dark.css两个主题文件。创建CSS变量,实现主题化。CSS变量实现主题切换请参考另一篇文章初次接触css变量

兼容性

IE浏览器以及一些旧版浏览器不支持CSS变量,因此,需要使用css-vars-ponyfill,是一个ponyfill,可在旧版和现代浏览器中为CSS自定义属性(也称为“ CSS变量”)提供客户端支持。由于要开启watch监听,所以还有安装MutationObserver.js。

安装:

npm install css-vars-ponyfill mutationobserver-shim --save

然后,在themes.js文件中引入并使用:

// themes.js
import 'mutationobserver-shim'
import cssVars from 'css-vars-ponyfill'
cssVars({
 watch: true
})
const createLink = (() => {
 let $link = null
 return () => {
 if ($link) {
 return $link
 }
 $link = document.createElement('link')
 $link.rel = 'stylesheet'
 $link.type = 'text/css'
 document.querySelector('head').appendChild($link)
 return $link
 }
})()
/**
 * 主题切换函数
 * @param {string} theme - 主题名称, 默认default
 * @return {string} 主题名称
 */
const toggleTheme = (theme = 'default') => {
 const $link = createLink()
 $link.href = `./themes/${theme}.css`
 return theme
}
export default toggleTheme

开启watch后,在IE 11浏览器点击切换主题开关不起作用。因此,每次切换主题时都重新执行cssVars(),还是无法切换主题,原因是开启watch后重新执行cssVars()是无效的。最后,只能先关闭watch再重新开启。成功切换主题的themes.js代码如下:

// themes.js
import 'mutationobserver-shim'
import cssVars from 'css-vars-ponyfill'
const createLink = (() => {
 let $link = null
 return () => {
 if ($link) {
 return $link
 }
 $link = document.createElement('link')
 $link.rel = 'stylesheet'
 $link.type = 'text/css'
 document.querySelector('head').appendChild($link)
 return $link
 }
})()
/**
 * 主题切换函数
 * @param {string} theme - 主题名称, 默认default
 * @return {string} 主题名称
 */
const toggleTheme = (theme = 'default') => {
 const $link = createLink()
 $link.href = `./themes/${theme}.css`
 cssVars({
 watch: false
 })
 setTimeout(function () {
 cssVars({
 watch: true
 })
 }, 0)
 return theme
}
export default toggleTheme

查看所有代码,请移步Github项目地址。

记住主题

实现记住主题这个功能,一是可以向服务器保存主题,一是使用本地存储主题。为了方便,这里主要使用本地存储主题的方式,即使用localStorage存储主题。具体实现请移步Github项目地址。

本文来自PHP中文网,CSS教程栏目,欢迎学习

热心网友 时间:2022-04-06 14:58

纯CSS实现tab切换:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CSS_Tab</title>
<style type="text/css">
body{margin:0; font-size:12px; background:#666;}
#box{width:400px; height:300px; margin:100px auto 0;}
#tab_nav{margin:0; padding:0; height:25px; line-height:24px;}
#tab_nav li{float:left; margin:0 3px; list-style:none; border:1px solid #999; border-bottom:none; height:24px; width:60px; text-align:center; background:#FFF;}
a{font:bold 14px/24px "微软雅黑", Verdana, Arial, Helvetica, sans-serif; color:green; text-decoration:none;}
a:hover{color:red;}
#tab_content{width:398px; height:273px; border:1px solid #999; font:bold 4em/273px "微软雅黑", Verdana, Arial, Helvetica, sans-serif; text-align:center; background:#FFF; overflow:hidden;}
#t_1,#t_2,#t_3{width:100%; height:273px;}
</style>
</head>

<body>
<div id="box">
<ul id="tab_nav">
<li><a href="#t_1">tab_1</a></li>

<li><a href="#t_2">tab_2</a></li>
<li><a href="#t_3">tab_3</a></li>
</ul>
<div id="tab_content">
<div id="t_1">tab_壹</div>
<div id="t_2">tab_贰</div>
<div id="t_3">tab_叁</div>

</div>
</div>
</body>
</html>

参考资料:http://omiga.org/lab/css_tab.html

热心网友 时间:2022-04-06 16:16

类似于这样的效果,建议你用js或者jquery实现,简单而且效果好,用css写出来可能会不兼容,也不是很好写,

热心网友 时间:2022-04-06 17:51

纯CSS的话不太好解决吧。
还是用JS更容易点。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...爱你你是我的罗密欧 , 我愿意变成你的朱丽叶' 谁知 有句歌词是“我爱你你是我的朱丽叶,我愿意变成你的梁山伯”是哪... 为什么打印出来的文档页码和原来的不一样 ...两台电脑用路由器上网一台是W7一台是XP如何实现两台电脑共享文件 win7怎么联另一台电脑win7怎么让网络和另一台电脑共享 w7的系统怎么共享电脑w7系统里面文件怎么共享另一台电脑 共享win7电脑w7系统里面文件怎么共享另一台电脑 翡翠有收藏价值吗,我们玩家如何去投资 价格一两万元的翡翠如何挑选 ppt怎么转换成视频?简单四步法,轻松搞定ppt微课录制 支付宝卡号是什么啊,怎么用啊 iphone苹果6不见了怎么定位找回 快递没时间去拿被退回去了怎么办? 快递被退回快递费怎么处理 快递一般放几天会被退回? 应客户要求快件正在被退回是什么意思 快递已签收但由于疫情防控原因被停派退回是什么意思? 显示快件被退回,然后又是这样,,这是什么意思啊 淘宝里的快件已被退回件代签收什么意思? 寄出去的快递被退回是什么原因 快递地址填错了改了之后快递被退回是什么意思? 我的快递信息上写的问题件被退回什么意思 快递还没收到就被退回去了是什么意思 如何在电脑上看小米摄像头 快递为什么半路被退回? 卖家已发货中途中快递又被退回怎么回事? 物流显示包裹退回中是什么意思? 快递被退回是什么原因? 快递才收件就显示“快件被退回,派件不成功”是啥意思? 快递在我不知道的情况下被退回了,到底是怎么回事呀? 别人用查找我的iphone登陆我的ID我的苹果手机会有显示吗? 泰安装饰公司哪家好?推荐这四家 威海有哪些比较有名气的室内设计公司? 山东尚渡装饰设计有限公司怎么样? 山东见端装饰设计有限公司怎么样? 山东大锤装修设计有限公司怎么样? 山东安格空间装饰设计有限公司怎么样? 山东艺辉装饰设计工程有限公司怎么样? 山东圣匠装饰设计有限公司怎么样? 济南禾辰室内设计有限公司怎么样? 山东轩岩装饰设计工程有限公司怎么样? 神都夜行录星盘怎么开 有个男的发*动态图片给我老婆,是不是说明老婆会与对方聊性? 做爱动态图 隔壁的情侣晚上经常四五点爱爱,声音还很大,怎么办? 爱爱的时候总觉得有种“咕呲咕呲”的声音,听着很尴尬啊…… 爱普生打印机连接好怎么从微信直接打印试卷? 谁有没有贝蒂跟大力水手性生活的动态图片? 每天晚上我按时去偷看不远处一加工厂男女爱爱、我想知道时间若长了会被发现吗? 和老公爱爱的时候下身老是发出像打屁一样的声音?