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,一经查实,立即删除!

相关文章

初学ASP.NET 必看

初学者必看&#xff01; 所有的关键字和运算等一切有关的关键词的集合HTML文件标记<html><head><!--><title><body>文字排版标记<br/><nobr><p><pre> 原始文字样式<center><blockquote> 向内…

Java字符串的压缩与解压缩的两种方法

应用场景 当字符串太长&#xff0c; 需要将字符串值存入数据库时&#xff0c;如果字段长度不够&#xff0c;则会出现插入失败&#xff1b; 或者需要进行Http传输时&#xff0c;由于参数长度过长造成http传输失败等。 字符串压缩与解压方法 方法一&#xff1a;用 Java8中的…

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

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

Java网页开发中model实现Serializable接口的原因

Object serialization的定义&#xff1a;Object serialization 允许你将实现了Serializable接口的对象转换为字节序列&#xff0c;这些字节序列可以被完全存储以备以后重新生成原来的对象。 serialization不但可以在本机做&#xff0c;而且可以经由网络操作&#xff08;RMI&…

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

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

病毒加壳技术与脱壳杀毒方法解析

壳是什么&#xff1f;脱壳又是什么&#xff1f;这是很多经常感到迷惑和经常提出的问题&#xff0c;其实这个问题一点也不幼稚。当你想听说脱壳这个名词并试着去了解的时候&#xff0c;说明你已经在各个安全站点很有了一段日子了。下面&#xff0c;我们进入“壳”的世界吧。 一、…

java初学必看

今天又看到了这篇文章&#xff0c;不过今天看来&#xff0c;比当初有了更多的感受&#xff0c;对于初学者&#xff0c;的确是篇好文章&#xff0c;应该静下心来好好看看很多网友问我学习Java有没有什么捷径,我说"无他&#xff0c;唯手熟尔"。但是我却很愿意将自己学习…

在鹅厂,我作为一个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 的调用以及…

求职学习笔记|并发编程知识点常见问题总结(一)

1. 什么是阻塞队列&#xff1f;阻塞队列的实现原理是什么&#xff1f; 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 这两个附加的操作是&#xff1a;在队列为空时&#xff0c;获取元素的线程会等待队列变为非空。当队列满时&#xff0c;存储元素的线程会等待队列可…

实验——Windows常用网络测试命令

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1.Ipconfig该命令可以检查网络接口配置。如果用户系统不能到达远程主机&#xff0c;而同一系统的其他主机可以到达&#xff0c;那么用该命令对这种故障进行判断是有必要的。当主机…

Protel中的快捷键使用(网上资源)

Protel中的快捷键使用&#xff08;网上资源&#xff09; 使用快捷键之前&#xff0c;将输入法切换至中文&#xff08;中国&#xff09;状态 Enter——选取或启动 Esc——放弃或取消F1——启动在线帮助窗 Tab——启动浮动图件的属性窗口Page Up——放大…