Hello Blazor:(8)启用深色模式

前言

上次,在“集成Tailwind CSS”时,我发现tailwind.config.js配置文件有这样一个选项:

darkMode: false, // or 'media' or 'class'

查看官方文档,原来这是用来启用深色模式的配置。

既然深色模式几乎成了所有网站和软件的标配,那么我们Blazor也不能落后了。

media方式

修改tailwind.config.js:

module.exports = {darkMode: 'media',// ...
}

修改Index.razor代码:

@page "/"<div class="bg-white dark:bg-gray-800"><h1 class="text-gray-900 dark:text-white">My IO</h1>
</div>

运行后,修改Windows的“设置”->“颜色”,改成“深色”,可以看到“My IO”从灰色变成了白色: 

class方式

但是,如果能让用户控制,是否手工启用深色模式才更有意义。 

修改tailwind.config.js:

module.exports = {darkMode: 'class',// ...
}

修改NavMenu.razor:

<div class="ml-10"><span class="ml-1 text-blue-200">WebApplication1</span><button  @onclick="ToggleDarkMode"><img src=@(darkMode?"light.svg":"dark.svg") alt="颜色切换" /></button>
</div><ul class="hidden md:flex overflow-x-hidden mr-10"><li class="mr-6 p-1"><NavLink class="text-white hover:text-blue-300" href="" Match="NavLinkMatch.All">Home</NavLink></li><li class="mr-6 p-1"><NavLink class="text-white hover:text-blue-300" href="counter">Counter</NavLink></li>
</ul>@code {private bool darkMode = false;[Parameter]public EventCallback OnDarkModeToggled { get; set; }private void ToggleDarkMode(){darkMode = !darkMode;OnDarkModeToggled.InvokeAsync();}
}

该组件提供了一个颜色切换按钮,并通过EventCallback向外传达是否切换深色模式。

修改MainLayout.razor:

@inherits LayoutComponentBase<div class="flex flex-col h-screen @dark"><div class="flex justify-between items-center py-4 bg-blue-900 dark:bg-gray-900"><NavMenu OnDarkModeToggled="@ToggleDarkMode" /></div><div class="flex flex-grow bg-white dark:bg-gray-700">@Body</div>
</div>@code
{private string dark = "";private void ToggleDarkMode(){dark = dark==""?"dark":"";}
}

使用NavMenu.razor,并为OnDarkModeToggled参数分配了一个处理程序,切换顶部div加入darkclass,对应DOM树下所有元素都将应用深色模式。

现在,如果我们单击按钮,则可以在浅色/深色模式之间无缝切换: 

结论

在本文中,我们介绍了如何使用Tailwind CSS在Blazor应用程序中启用深色模式,并可以基于操作系统设置或用户手工切换

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?

全世界只有3.14 % 的人关注了青少年数学之旅今年8月的华为开发者大会上&#xff0c;鸿蒙OS正式亮相&#xff0c;这是全世界第一个基于微内核的全场景分布式操作系统。余承东曾表示&#xff1a;华为手机优先使用安卓生态&#xff0c;一旦受实体名单影响安卓不能用&#xff0c;一…

关于 .NET 与 JAVA 在 JIT 编译上的一些差异

最近因为公司的一些原因&#xff0c;我也开始学习一些 JAVA 的知识。虽然我一直是以 .NET 语言为主的程序员&#xff0c;但是我并不排斥任何其它语言。在此并不讨论 JAVA .NET 的好坏&#xff0c;仅仅是对 .NET 跟 JAVA 程序的编译执行过程进行一些简单的介绍跟比较。因为有些内…

在鹅厂,我作为一个Java 程序员每天都在摸鱼!!!

作为一名 在大、中、小微企业都待过 的 Java 开发者&#xff0c;今天和大家分享下自己在不同公司的工作日常和收获。包括一些个人积累的工作提升经验&#xff0c;以及一些 Java 学习的方法和资源。 先从我的第一份 Java 开发实习工作说起吧~ 实习生工作日常 我是在大二暑期开…

心中一万只草泥马在奔腾是种怎样的体验?| 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源横店街道办主任&#xff0c;侵权删&#xff09;

iOS工程中的info.plist文件的完整研究

原地址&#xff1a;http://blog.sina.com.cn/s/blog_947c4a9f0100zf41.html 们建立一个工程后&#xff0c;会在Supporting files下面看到一个"工程名-Info.plist"的文件&#xff0c;这个是对工程做一些运行期配置的文件&#xff0c;很重要&#xff0c;不能删除。 如果…

不会自动化UI测试?不会编程?没问题,会造句就行!

上次&#xff0c;我们介绍了用于Web应用程序自动化测试的工具Playwright for .NET。但是直接使用它来编写测试用例&#xff0c;代码比较凌乱&#xff0c;后期也不好维护。因此&#xff0c;我们利用SpecFlow让测试用例更好理解和维护。1.SpecFlow介绍SpecFlow是.Net平台下用于行…

鼠标手势识别 [Flash]

算法&#xff1a;演示&#xff1a;源代码&#xff1a;http://www.foxaweb.com/demos/mousegesture/mouse_gesture_v1_0.zip转载于:https://www.cnblogs.com/boringlamb/archive/2008/05/20/1203115.html

Java交流|面试最后一问:你有什么问题想问我吗?

尽管&#xff0c;我们之前做了这么多的面试准备&#xff0c;然而&#xff0c;最后这个90%可见的最后一问可能直接让你功亏一篑。这么厉害的最后一问&#xff1a;”你有什么问题想问我吗&#xff1f;“ 看似平淡无奇的问题&#xff0c;但是却蕴含着多方面的含义。这个问题表面上…

基于MapWinGis的开发探索(三)--改善缩放、渲染、显示文本

继续对MapWinGis进行研究探索&#xff0c;紧接上一篇文章。MapWinGis自身有很多功能&#xff0c;此篇主要也是基于其内在方法来写的。除了第二点显示文本是根据其源代码进行扩展的。原图:一、改善缩放功能上一版本放大缩小都必须点击下工具栏的放大、缩小。是鼠标处于缩放状态&…

T-SQL利用Row_Number函数实现分页

SQL: CREATE PROCEDURE PagingViewTest (currentPageIndex INT, --页序号pageSize INT, --页大小pageCount INT OUTPUT --返回值&#xff0c;总记录数 ) AS BEGIN--取总记录数 SELECT pageCountCOUNT(OrderID) FROM dbo.sale_Order; --利用CTE以提高执行效率 WITH Result AS (…

程序员没有女朋友的原因,我终于找到了!

全世界只有3.14 % 的人关注了青少年数学之旅程序员没有女朋友的原因▼程序员大脑里想的▼每天要学习太多语言&#xff0c;程序员太忙了▼女朋友 VS 编译器▼程序员sao起来&#xff0c;还需要女朋友吗&#xff1f;▼电脑才是程序员的女朋友▼互道晚安后&#xff0c;会不会偶遇在…

dotNet 5 中执行 Node.js

在低代码产品中为了扩展功能&#xff0c;我们在业务编排中会扩展代码块的功能&#xff0c;允许用户直接在界面中进行代码&#xff08;Node.js、 Python&#xff09;的编写&#xff0c;来实现取数或者赋值的一些功能。本文简单介绍下在 dotNET 5 中怎么样进行 Node.js 的调用以及…

为什么会有蟑螂这种反人类的动物出现?

全世界只有3.14 % 的人关注了青少年数学之旅相信很多人都听过南北蟑螂的故事&#xff0c;即使是一个可以打死老虎的北方人在南方蟑螂面前也会惊慌失措。除此之外&#xff0c;我们日常生活里和蟑螂的故事还有很多&#xff0c;比如&#xff1a;当你打开灯的时候&#xff0c;会有一…

Ajax使用初步

Ajax定义为“Asynchronous JavaScript XML”的简称&#xff0c;也就是异步的JavaScript和XML处理。从原理上看&#xff0c;主要是Ajax可以通过调用HttpRequest实现与服务器的异步通讯&#xff0c;并最终在网页中实现丰富友好的用户界面Ajax使用初步&#xff0c;配置步骤1.把Aj…

WPF 如何流畅地滚动ScrollViewer

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 前言看了看原生UWP的ScrollViewer&#xff0c;滑动很流畅(例如 开始菜单)&#xff0c;但是WPF自带的ScrollViewer滚动十分生硬..突发奇想&#x…

10岁吊打职业教师的天才,仅用10篇论文称霸数学界160多年,40岁英年早逝却迄今无人超越...

全世界只有3.14 % 的人关注了青少年数学之旅今天超模君就给大家讲讲黎曼。人类历史上最伟大的数学天才的德国数学家是十九世纪数学界的巅峰——节选自《数学之旅 闪耀人类的54个数学家》1826年&#xff0c;黎曼作为家中的老二在德国汉诺威的布雷斯伦茨村出生了。他的父亲是村里…

面试可以,但别打扰我睡觉! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源科技九洲君&#xff0c;侵权删&#xff09;

基于事件驱动架构构建微服务第3部分:Presenters, Views和Controllers

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part3-presenters-views-and-controllers/在本文中&#xff0c;我将实现Presentation(展示层)。这里的展示层不是指用户界面而是Web API。也可以在实现展示层之前先实现r…

牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!

反射概述 什么是反射 将类的各个组成部分封装为其他对象的过程就叫做 反射&#xff0c;其中 组成部分 指的是我们类的 成员变量&#xff08;Field&#xff09;、构造方法&#xff08;Constructor&#xff09;、成员方法&#xff08;Method&#xff09;。 使用反射的优缺点 …

拿破仑最欣赏的数学家,师从拉格朗日,撕逼泊松,一生痴迷热学最后却死于热学...

全世界只有3.14 % 的人关注了 青少年数学之旅 这几天&#xff0c;终于变凉了&#xff0c;超模君再也不用被热死了。 但炎热夏日的离去&#xff0c;也让超模君想起了那个和热脱不了关系的数学家——傅里叶。 “对自然界的深入研究是数学发现最丰富的源泉” ——节选自 《数学之旅…