Bootstrap4如何动态切换主题
本文阅读大约需要1.99分钟
bootstrap4有个网站叫做bootswatch(文末给出链接),其中已经设计了一些很美的主题:
要想使用也是很简单的,只需要下载其中的bootstrap.css或者bootstrap.min.css并覆盖到自己项目的对应文件就行了。如果你想动态切换的话,现在提供的思路是:
用JavaScript写一个函数响应页面上一个按钮的点击,这个函数主要是获取页面导入css的链接 < link >
标签,修改它的 href
值就行了。
当然如果你想让整个网站都应用上同一个动态修改后的主题,下文也用到了,主要是采用cookies记录的方式解决。
下面的代码来自Django,在HTML页面上的一些语法和大家常见的JavaEE不大相同,但本文涉及的内容只和JavaScript和Bootstrap有关,无需在意哈。但我要说一下我Django网站上各页面都有的一个特点,那就是每个HTML页面都继承于或被包含于一个基础页面,这样的话,便只需要修改基础页面的css或js就行了,相信JavaEE那边也是这样做的。
网页上涉及到的代码
(代码若显示不全,请向左滑动)
<link rel="stylesheet" href="{% static 'bootstrap4.0.0/css/bootstrap.min.css' %}" id="default-theme">
切换时主要针对上面 < link >
标签的 href
和 id
进行修改,一个 href
对应一个 id
。本程序用到两个主题版本的css文件,其id和文件名的对应为:
id |
同目录下的css文件名 |
---|---|
default-theme |
bootstrap.min.css |
gray-theme |
bootstrap_gray.min.css |
这样就清晰明了了哈哈哈,下面是切换的按钮,触发changeTheme()方法:
<!--切换主题的按钮-->
<input id="change-theme-btn" type="button" class="btn btn-light" onclick="changeTheme()" value="切换主题"/>
涉及的JavaScript代码
代码实现比较简单,具体说明请看注释:
// 按钮触发的切换主题方法
function changeTheme() {
var link = document.getElementsByTagName("link")[0];
//判断目前页面上的link的id是哪个,如果是默认主题的话,就传送新主题的id给change()函数,否则亦然
if (link.id === "default-theme") {
change("dark-theme");
} else {
change("default-theme");
}
}
//真正的切换主题方法
function change(themeName){
var link = document.getElementsByTagName("link")[0];
if(themeName === "default-theme"){
link.id = "default-theme";
link.href = '/static/bootstrap4.0.0/css/bootstrap.min.css';
//记录新的主题到cookies,这里一定要写上path=/,否则就不是修改cookies而是在不同页面创建cookies了
document.cookie = "themeCookies=default-theme;path=/";
}else if(themeName === "dark-theme"){
link.id = "dark-theme";
link.href = '/static/bootstrap4.0.0/css/bootstrap_gray.min.css';
document.cookie = "themeCookies=dark-theme;path=/";
}
}
// 获取cookie中当前主题的id,没有则返回默认的default-theme
function getThemeName() {
var themeCookies = "themeCookies=";
var allCookies = document.cookie.split(';');
for(var i=0; i<allCookies.length; i++){
var c = allCookies[i].trim();
if(c.indexOf(themeCookies) === 0)
return c.substring(themeCookies.length, c.length);
}
return "default-theme";
}
// 让网页每次进入时都先检查一下主题是哪个$(document).ready(function () {
change(getThemeName());
});
今日作者: 米国队长
时间太瘦,指缝太宽
点击“阅读原文”查看Bootswatch网站:https://bootswatch.com/
- 常用翻译技巧
- ScintillaNET 需要帮助
- Windows Live Writer工具
- WPF/XML 资源及相关开源项目
- Android应用底部导航栏(选项卡)实例
- 有关 ASMX 2.0、WSE 3.0 和 WCF 的内容
- 微信小程序游戏其实一般,我也就站在寒风里玩了一个小时
- beagle MONO 应用的desktop search
- Python3与OpenCV3.3 图像处理(一)-环境搭建与简单DEMO
- winform中利用正则表达式得到有效的电话/手机号
- 浅述RDF,畅想一下FOAF应用
- 数据源控件参数类Parameter
- 我们来继续研究 mybatis 框架sql映射文件的属性
- 开源.NET邮件服务器
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- Laravel框架之解决前端显示图片问题
- thinkPHP5.1框架中Request类四种调用方式示例
- Python TestSuite生成测试报告过程解析
- PHP goto语句用法实例
- laravel5.5安装jwt-auth 生成token令牌的示例
- Windows环境下安装PHP Pear的方法图文教程
- php菜单/评论数据递归分级算法的实现方法
- 关于laravel5.5的定时任务详解(demo)
- 用PHP做了一个领取优惠券活动的示例代码
- Laravel 自定命令以及生成文件的例子
- 深入了解Python 变量作用域
- Laravel5.5 数据库迁移:创建表与修改表示例
- python代码能做成软件吗
- php适配器模式简单应用示例
- Python 解析简单的XML数据