前端技术
HTML
CSS
Javascript
前端框架和UI库
VUE
ReactJS
AngularJS
JQuery
NodeJS
JSON
Element-UI
Bootstrap
Material UI
服务端和客户端
Java
Python
PHP
Golang
Scala
Kotlin
Groovy
Ruby
Lua
.net
c#
c++
后端WEB和工程框架
SpringBoot
SpringCloud
Struts2
MyBatis
Hibernate
Tornado
Beego
Go-Spring
Go Gin
Go Iris
Dubbo
HessianRPC
Maven
Gradle
数据库
MySQL
Oracle
Mongo
中间件与web容器
Redis
MemCache
Etcd
Cassandra
Kafka
RabbitMQ
RocketMQ
ActiveMQ
Nacos
Consul
Tomcat
Nginx
Netty
大数据技术
Hive
Impala
ClickHouse
DorisDB
Greenplum
PostgreSQL
HBase
Kylin
Hadoop
Apache Pig
ZooKeeper
SeaTunnel
Sqoop
Datax
Flink
Spark
Mahout
数据搜索与日志
ElasticSearch
Apache Lucene
Apache Solr
Kibana
Logstash
数据可视化与OLAP
Apache Atlas
Superset
Saiku
Tesseract
系统与容器
Linux
Shell
Docker
Kubernetes
[CSS-in-JS样式处理与Materi...]的搜索结果
这里是文章列表。热门标签的颜色随机变换,标签颜色没有特殊含义。
点击某个标签可搜索标签相关的文章。
点击某个标签可搜索标签相关的文章。
Material UI
如何给Material-UI的Stepper组件添加自定义步骤指示器? 在前端开发中,Material-UI作为一款基于Google Material Design设计规范的React UI组件库,因其丰富的组件和高度可定制性而备受开发者喜爱。这篇文儿呢,咱们要重点聊聊Material-UI里的Stepper组件,而且会掰扯得明明白白的,教你如何给这个Stepper组件加上个性化的自定义步骤指示器,让你在各种场景下都能玩转它,满足你的独特需求。 1. Stepper组件简介 Material-UI的Stepper组件是一种用于线性流程展示的强大工具,常用于表单填写、多步骤操作等场景。它默认提供了多种样式(如vertical和horizontal)以及步骤状态管理功能。不过,自带的那个步骤指示器样式可能跟你的项目设计不太对味儿,这时候我们就得亲自出手,给它来个定制化的变身。 2. 默认的Stepper组件与步骤指示器 首先,让我们通过一个简单的代码示例来看看Stepper组件及其默认步骤指示器的使用: jsx import { Stepper, Step, StepLabel } from '@material-ui/core'; function App() { return ( Step 1 Step 2 Step 3 ); } 上述代码创建了一个基本的水平方向Stepper,每个步骤都有一个默认的步骤指示器,显示为一个小圆点或一条横线,具体样式取决于步骤的状态。 3. 自定义步骤指示器 思路与方法 ① 定义自定义指示器 为了实现自定义步骤指示器,我们可以利用Stepper组件的StepIconComponent属性,传入一个自定义的React组件来替换默认的指示器。 ② 创建自定义指示器组件 下面是一个自定义步骤指示器组件的例子,我们将使用一个自定义图标替代原有的小圆点: jsx import React from 'react'; import CheckCircleIcon from '@material-ui/icons/CheckCircle'; import CircleIcon from '@material-ui/icons/Circle'; const CustomStepIcon = ({ active, completed }) => { const icon = completed ? : ; return ( {icon} {active && Now Active!} ); }; 上述代码中,我们根据步骤的active和completed状态显示不同的图标,并在步骤激活时额外显示文本提示。 ③ 将自定义指示器应用于Stepper组件 现在,我们将这个自定义指示器应用到之前的Stepper组件上: jsx function App() { return ( {/ ...steps... /} ); } 通过以上代码,你会发现Stepper组件中的每个步骤现在都已使用了我们自定义的步骤指示器。 4. 深度定制 拓展思考 实际上,对Stepper组件的自定义并不仅限于步骤指示器。你可以调整每个步骤的内容、样式,甚至可以进一步控制其交互行为。比如说,你完全可以按照实际的业务需求,灵活地给步骤换个颜色、改个大小,甚至玩转各种动画效果啥的。这完全就是Material-UI API的拿手好戏,只要咱们深入研究并熟练运用它,一切都不在话下! 总结来说,Material-UI赋予我们强大的灵活性,使得我们可以轻松地为Stepper组件添加自定义步骤指示器,从而更好地适应项目的设计需求。这种定制化的经历更像是一个边探险边创新的旅程,每一步都得我们像解密者一样深入理解各个组件是怎么运作的,然后再像个魔术师那样,把它们巧妙地融入到实际场景中,尽情挥洒创意。所以,不妨在实践中不断尝试,让Material-UI成为你前端开发道路上的得力助手吧!
2024-02-10 10:53:38
258
昨夜星辰昨夜风
Material UI
从零开始:搭建Material UI开发环境 1. 引言 嘿,亲爱的开发者朋友们!如果你正寻找一种优雅且高效的方式来构建你的Web应用程序界面,并希望它拥有美观、响应迅速且易于定制的特点,那么Material-UI绝对是个值得你深入了解并尝试的绝佳选择。今天,咱们就一起挽起袖子,从头开始捣鼓Material-UI的开发环境搭建,亲自体验一把这款源自Google Material Design设计宝典的React组件库有多大的魔力! 2. 理解Material UI 在我们跳入安装和配置之前,先来对Material UI有个大致的理解。Material UI,这个家伙可是个React的好伙伴,人家可是在Material Design设计规范的大旗下干活的。它精心准备了一整套琳琅满目的预设样式组件,像是按钮、表单那些小玩意儿,还有布局组件等等,都是它的拿手好戏。这样一来,开发者们就能轻轻松松地打造出既潮又酷,用户体验一级棒的应用程序啦! 3. 准备工作 安装Node.js与npm (1)首先确保你的计算机上已经安装了Node.js环境,因为Material-UI是基于JavaScript的,我们需要使用npm(Node Package Manager)来进行安装。如果尚未安装,请访问[Node.js官网](https://nodejs.org/)下载并安装适合你操作系统的版本。 bash 在终端检查Node.js和npm是否已安装 node -v npm -v (2)确认Node.js和npm成功安装后,我们就有了构建Material UI开发环境的基础工具。 4. 创建React项目并安装Material UI (1)通过create-react-app工具初始化一个新的React项目: bash npx create-react-app my-material-ui-app cd my-material-ui-app (2)接下来,在新创建的React项目中安装Material UI以及其依赖的类库: bash npm install @material-ui/core @emotion/react @emotion/styled 这里,@material-ui/core包含了所有的Material UI基础组件,而@emotion/react和@emotion/styled则是用于CSS-in-JS的样式处理库。 5. 使用Material UI编写第一个组件 (1)现在打开src/App.js文件,我们将替换原有的代码,引入并使用Material UI的Button组件: jsx import React from 'react'; import Button from '@material-ui/core/Button'; function App() { return ( Welcome to Material UI! {/ 使用Material UI的Button组件 /} Click me! ); } export default App; (2)运行项目,查看我们的首个Material UI组件: bash npm start 瞧!一个具有Material Design风格的按钮已经呈现在页面上了,这就是我们在Material UI开发环境中迈出的第一步。 6. 深入探索与实践 到此为止,我们已经成功搭建起了Material UI的开发环境,并实现了第一个简单示例。但这只是冰山的一小角,Material UI真正厉害的地方在于它那满满当当、琳琅满目的组件库,让你挑花眼。而且它的高度可定制性也是一大亮点,你可以随心所欲地调整和设计,就像在亲手打造一件独一无二的宝贝。再者,Material UI对Material Design规范的理解和执行那可是相当深入透彻,完全不用担心偏离设计轨道,这才是它真正的硬核实力所在。接下来,你完全可以再接再厉,试试其他的组件宝贝,像是卡片、抽屉还有表格这些家伙,然后把它们和主题、样式等小玩意儿灵活搭配起来,这样就能亲手打造出一个独一无二、个性十足的用户界面啦! 总的来说,Material UI不仅降低了构建高质量UI的成本,也极大地提高了开发效率。相信随着你在实践中不断深入,你将越发体会到Material UI带来的乐趣与便捷。所以,不妨从现在开始,尽情挥洒你的创意,让Material UI帮你构建出令人眼前一亮的Web应用吧!
2023-12-19 10:31:30
241
风轻云淡
ReactJS
...言 随着React.js的快速发展,越来越多的开发者开始使用React构建复杂的前端应用程序。然而,在我们真正动手开发的时候,为了能把活儿干得又快又好,保证代码既高效又优质,我们可少不了要依靠那些贼牛的第三方UI库和组件库。本篇文章将详细介绍如何在React中使用第三方UI库和组件库。 二、选择适合自己的第三方UI库和组件库 在React中,有许多优秀的第三方UI库和组件库可以选择。想知道自己项目该选哪个UI库或组件库才合适?首先,咱得摸清楚自己的真实需求。比如,你的项目需不需要那种能自动适应不同屏幕大小的响应式设计?或者,你是不是还希望它带有酷炫的动画效果?把这些具体需求都先琢磨透了。其次,你可以根据项目的特点选择一些流行的UI库和组件库,如Material-UI、Ant Design、Element UI等。 三、安装和引入第三方UI库和组件库 一旦确定要使用的UI库或组件库,接下来就是安装和引入了。大多数UI库和组件库都超贴心的,它们准备了详尽到牙齿的文档和教程,就是为了让你能轻松愉快地快速上手,一点也不用担心摸不着头脑。以下是一个简单的安装和引入步骤: 1. 使用npm或yarn安装UI库或组件库。例如,如果你想要安装Material-UI,可以运行以下命令: npm install @material-ui/core 2. 引入UI库或组件库。在你的React组件中,可以通过import语句引入所需的组件。例如,如果你想使用Button组件,可以在组件文件顶部添加以下代码: javascript import Button from '@material-ui/core/Button'; 四、使用第三方UI库和组件库 有了安装和引入UI库和组件库的基础,接下来就可以开始使用它们了。以下是一些基本的使用方法和技巧: 1. 学习和了解UI库或组件库的API文档。大部分UI库和组件库都贴心地给出了详尽的API使用手册,里边涵盖了组件的各种属性设置、方法调用、事件响应啥的一应俱全。熟练掌握这些API文档可以帮助你更好地使用UI库和组件库。 2. 深度定制UI库和组件库。嘿,你知道吗?现在很多界面设计库和组件库都超级贴心,让用户能够随心所欲地进行个性化定制。无论是外观样式、交互效果,还是各种不同的状态显示,通通都能按照你的想法来调整,就像DIY你自己的专属工具箱一样!这样可以让UI库和组件库更加符合项目的需求。 3. 利用CSS-in-JS技术。一些UI库和组件库,如Material-UI和Ant Design,都支持CSS-in-JS技术。这就意味着你能够直接在JavaScript代码里“手绘”CSS样式,再也不用为单独管理CSS文件而费心啦! 五、总结 总的来说,React中使用第三方UI库和组件库是一个非常有用的技术。用上这些UI库和组件库,咱们就能大大加快开发速度,让代码质量噌噌往上涨,而且更妙的是,还能尽情享受各种超赞的UI设计和一流的用户体验,简直是一举多得!当然啦,挑选和运用UI库、组件库也是个技术活儿,需要一些小窍门和实战经验。真心希望各位能积极地去摸索、尝试,亲手实践一番。
2023-06-02 19:06:20
143
风轻云淡-t
Element-UI
...在Vue项目中使用和整合Element-UI与其他框架或库 引言 在前端开发的世界里,选择合适的UI框架对于提升开发效率和保证项目风格一致性至关重要。Element-UI,你可知道这是一款搭建在Vue.js基础上的超赞UI组件库?它就像是个百宝箱,里面装满了各种丰富实用的组件资源,设计风格那叫一个优雅,简直让广大开发者们爱不释手,直击心灵啊!不过,在实际动手开发的时候,咱们可能会遇到这么个情况:得把Element-UI和Bootstrap、React这些不同的框架或是库捏在一起用。就像是做菜一样,你可能需要把几种不同的食材混搭在一道菜里,让它们相互配合,烹调出更丰富的效果。这篇指南会手把手地带你一步步揭秘,如何在Vue项目里灵活运用和完美融合Element-UI以及其他各类框架,让它们像家人一样和睦相处,共同发挥出最大的能量。 1. 安装并引入Element-UI到Vue项目 首先,让我们从最基础的步骤开始——将Element-UI引入到你的Vue项目中: bash 使用npm安装element-ui npm install element-ui --save 在main.js中全局引入Element-UI并应用主题样式 import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); 这样,你就可以在整个Vue项目中方便地调用Element-UI的各种组件了。 2. Element-UI与Bootstrap的整合 虽然Element-UI提供了全面的UI组件,但在某些情况下,你可能仍想利用Bootstrap的CSS样式来丰富项目的视觉效果。这时,你需要做的就是分别引入这两个库,并注意避免样式冲突。 html 需要注意的是,由于Bootstrap和Element-UI都对一些基础样式进行了定义,比如按钮、表格等,因此在具体使用时,你可能需要通过自定义CSS来调整样式层级或者覆盖默认样式,确保两者能够和谐共存。 3. Element-UI与React的交融 尽管Element-UI是为Vue设计的,但这并不意味着它不能与React配合使用。借助vue-reactive-components等库,我们可以实现Element-UI在React项目中的集成。 jsx import { withReact } from 'vue-reactive-components'; import { Button } from 'element-ui'; const ElButton = withReact(Button); function MyReactComponent() { return ( {/ 使用Element-UI的Button组件 /} 点击我 ); } export default MyReactComponent; 在这段代码中,我们将Element-UI的Button组件转换为了可以在React中使用的组件。虽然这种方法并非完美无缝,但足以满足基本需求。当然啦,根据你手头项目的复杂程度和实际需求,你可能还需要深入去解决状态管理啊、事件绑定这些个问题。 4. 结合思考与探讨 在实际开发中,框架与库的整合往往涉及到诸多细节和挑战。就像我们在上面举的例子中见识到的那样,重点其实就一句话:摸透每个框架或者库的核心本领和运作门道,这样咱们才能慧眼识珠,挑出最合适的组合方案。同时呢,这也意味着咱们得有那么点儿随机应变的能耐和脑洞大开的创新思维,好随时对付那些从天而降的技术挑战。 总的来说,无论是Element-UI与Bootstrap还是React的结合,都是为了构建出功能完善且美观的Web应用。在这个过程中,咱们得把各种框架的优点都榨干了用尽,同时还要像玩拼图一样巧妙解决那些可能出现的兼容性小插曲。只有这样,才能真正打造出一个既跑得飞快又稳如磐石的项目来。希望本文能帮助你在实战中更好地驾驭这些工具,让技术服务于业务,创造更大价值。
2023-12-10 16:00:20
389
诗和远方
JQuery插件下载
...Query插件介绍 material-modal是一款专注于提供MaterialDesign风格的纯JavaScript确认框和对话框插件。它的设计简洁高效,通过整合CSS和JavaScript代码,能够轻松地在网页中实现美观且交互性极强的弹窗效果。此插件旨在为开发者提供一种替代浏览器原生确认框和对话框的解决方案,不仅在视觉上提升了用户体验,还增加了网页的个性化与功能性。material-modal的核心优势在于其高度可定制性和灵活性。用户可以根据项目需求自定义弹窗的样式、布局以及动画效果,从而与网站的整体设计风格保持一致。此外,插件支持多种类型的操作,如确认、取消、关闭等,使得在不同场景下都能找到合适的交互模式。使用material-modal极为简单,只需通过引入相应的CDN链接或将其添加到项目中,即可开始创建和配置弹窗。开发者可以轻松地调整弹窗的尺寸、背景颜色、字体样式以及其他UI元素,以满足特定的设计要求。插件还提供了丰富的事件处理功能,允许开发者在用户与弹窗交互时触发特定的逻辑,增强了应用的动态性和响应能力。总之,material-modal是一个强大而易于集成的工具,为开发者提供了构建具有MaterialDesign风格的确认框和对话框的能力,不仅提升了用户体验,也丰富了网页的功能性和美观度。无论是用于信息提示、操作确认还是复杂的数据输入流程,material-modal都是一个值得信赖的选择。 点我下载 文件大小:11.27 KB 您将下载一个JQuery插件资源包,该资源包内部文件的目录结构如下: 本网站提供JQuery插件下载功能,旨在帮助广大用户在工作学习中提升效率、节约时间。 本网站的下载内容来自于互联网。如您发现任何侵犯您权益的内容,请立即告知我们,我们将迅速响应并删除相关内容。 免责声明:站内所有资源仅供个人学习研究及参考之用,严禁将这些资源应用于商业场景。 若擅自商用导致的一切后果,由使用者承担责任。
2024-08-29 21:18:29
71
本站
Element-UI
...凸显。ElementUI作为Vue.js生态中的重要组件库,其动画性能优化的问题也引起了广泛的关注。实际上,不仅仅是ElementUI,其他流行的前端框架如Ant Design、Material-UI等同样面临如何保证动画流畅度的挑战。 日前,Google Chrome团队发布了一篇关于“渲染性能最佳实践”的技术文章,深入探讨了浏览器渲染流水线的工作原理以及如何避免重排重绘以提升CSS动画性能。文中强调了使用will-change属性对动画进行预优化的重要性,并提醒开发者关注动画帧率(FPS)与页面性能的关系。 此外,针对大数据量场景下的动画卡顿问题,业界也涌现出许多创新解决方案。例如,通过Intersection Observer API实现懒加载策略,只在元素进入视口时才开始加载对应数据并渲染动画,有效减轻了初次加载带来的压力,提升了动画流畅度。 同时,Vue 3.x版本推出的Teleport功能也为动画过渡管理提供了新的思路。通过Teleport可以将元素从当前DOM树中移出并在指定位置插入,从而减少不必要的DOM操作,保证动画在状态变更时能够更加平滑地执行。 综上所述,无论是在底层技术优化层面,还是在设计开发策略上,解决前端组件库动画效果不流畅的问题已成为当下提升用户体验的关键环节之一,值得广大开发者持续关注和深入研究。
2023-03-20 20:53:01
463
林中小径
ReactJS
ReactJS , ReactJS是一种由Facebook开发的开源JavaScript库,主要用于构建用户界面(UI)。在本文语境中,ReactJS是实现可复用动画库或组件的核心工具,通过其组件化和状态管理机制,开发者可以方便地定义、封装和复用各种动画效果。 Hooks(useState) , 在React中,Hooks是一种全新的API,允许开发者在函数组件中使用state和其他React特性。文中提到的useState就是一个常用的Hook,它允许我们在无须编写类组件的情况下,管理组件内部的状态,并根据状态变化触发重新渲染以及动画效果更新。 CSS-in-JS , CSS-in-JS是一种在JavaScript中编写CSS样式的现代方法,它将样式与组件逻辑紧密集成在一起,有助于提高代码的模块化和复用性。在React环境中,CSS-in-JS库如styled-components或emotion可以让开发者直接在组件内定义样式,并且能动态地根据组件状态改变样式,从而更好地配合React构建可复用动画组件时的需求。 Concurrent Mode(并发模式) , React Concurrent Mode是一项旨在提升应用响应能力和用户体验的新特性。在动画场景下,它可以优化React组件树的调度和渲染过程,使得动画与其他数据加载或渲染任务能够更高效并行执行,从而避免动画卡顿或阻塞,提供更为流畅的动画体验。 Suspense(悬念) , Suspense是React中用于处理异步加载内容的特性,在动画上下文中,Suspense可以帮助开发者更好地管理和协调动画与异步数据加载之间的关系。当数据尚未准备就绪时,Suspense可以暂时显示预设的加载动画,待数据加载完成后无缝切换到实际内容,保证动画过渡的平滑进行。
2023-03-14 20:38:59
105
草原牧歌-t
转载文章
...:href="@{/css/style.css}"/></head><body class="pg"><div class="page" id="app"><div id="mallPage" class=" mallist tmall- page-not-market "><!-- 头部搜索 --><div id="header" class=" header-list-app"><div class="headerLayout"><div class="headerCon "><!-- Logo--><h1 id="mallLogo"><img th:src="@{/images/jdlogo.png}" alt=""></h1><div class="header-extra"><!--搜索--><div id="mallSearch" class="mall-search"><form name="searchTop" class="mallSearch-form clearfix"><fieldset><legend>天猫搜索</legend><div class="mallSearch-input clearfix"><div class="s-combobox" id="s-combobox-685"><div class="s-combobox-input-wrap"><input v-model="keyword" type="text" autocomplete="off" value="java" id="mq"class="s-combobox-input" aria-haspopup="true"></div></div><button type="submit" @click.prevent="searchKey" id="searchbtn">搜索</button></div></fieldset></form><ul class="relKeyTop"><li><a>狂神说Java</a></li><li><a>狂神说前端</a></li><li><a>狂神说Linux</a></li><li><a>狂神说大数据</a></li><li><a>狂神聊理财</a></li></ul></div></div></div></div></div><el-button @click="download" id="download">下载</el-button><!-- <el-button @click="concurrenceDownload" >并发下载测试</el-button>--><el-button @click="stop">停止</el-button><el-button @click="start">开始</el-button>{ {fileFinalOffset} }{ {contentList} }<el-progress type="circle" :percentage="percentage"></el-progress></div><!--前端使用Vue,实现前后端分离--><script th:src="@{/js/axios.min.js}"></script><script th:src="@{/js/vue.min.js}"></script><!-- 引入样式 --><link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"><!-- 引入组件库 --><script src="https://unpkg.com/element-ui/lib/index.js"></script><script>new Vue({ el: 'app',data: {keyword: '', //搜索关键字results: [] ,//搜索结果percentage: 0, // 下载进度filesCurrentPage:0,//文件开始偏移量fileFinalOffset:0, //文件最后偏移量stopRecursiveTags:true, //停止递归标签,默认是true 继续进行递归contentList: [], // 文件流数组breakpointResumeTags:false, //断点续传标签,默认是false 不进行断点续传temp:[],fileMap:new Map(),timer:null, //定时器名称},methods: {//根据关键字搜索商品信息searchKey(){var keyword=this.keyword;axios.get('/search/JD/search/'+keyword+"/1/10").then(res=>{this.results=res.data;//绑定数据console.log(this.results)console.table(this.results)})},//停止下载stop(){//改变递归标签为falsethis.stopRecursiveTags=false;},//开始下载start(){//重置递归标签为true 最后进行合并this.stopRecursiveTags=true;//重置断点续传标签this.breakpointResumeTags=true;//重新调用下载方法this.download();},// 分段下载需要后端配合download() {// 下载地址const url = "/down?fileName="+this.keyword.trim()+"&drive=E";console.log(url)const chunkSize = 1024 1024 50; // 单个分段大小,这里测试用100Mlet filesTotalSize = chunkSize; // 安装包总大小,默认100Mlet filesPages = 1; // 总共分几段下载//计算百分比之前先清空上次的if(this.percentage==100){this.percentage=0;}let sentAxios = (num) => {let rande = chunkSize;//判断是否开启了断点续传(断点续传没法并行-需要上次请求的结果作为参数)if (this.breakpointResumeTags){rande = ${Number(this.fileFinalOffset)+1}-${num chunkSize + 1};}else {if (num) {rande = ${(num - 1) chunkSize + 2}-${num chunkSize + 1};} else {// 第一次0-1方便获取总数,计算下载进度,每段下载字节范围区间rande = "0-1";} }let headers = {range: rande,};axios({method: "get",url: url.trim(),async: true,data: {},headers: headers,responseType: "blob"}).then((response) => {if (response.status == 200 || response.status == 206) {//检查了下才发现,后端对文件流做了一层封装,所以将content指向response.data即可const content = response.data;//截取文件总长度和最后偏移量let result= response.headers["content-range"].split("/");// 获取文件总大小,方便计算下载百分比filesTotalSize =result[1];//获取最后一片文件位置,用于断点续传this.fileFinalOffset=result[0].split("-")[1]// 计算总共页数,向上取整filesPages = Math.ceil(filesTotalSize / chunkSize);// 文件流数组this.contentList.push(content);// 递归获取文件数据(判断是否要继续递归)if (this.filesCurrentPage < filesPages&&this.stopRecursiveTags==true) {this.filesCurrentPage++;//计算下载百分比 当前下载的片数/总片数this.percentage=Number((this.contentList.length/filesPages)100).toFixed(2);sentAxios(this.filesCurrentPage);//结束递归return;}//递归标签为true 才进行下载if (this.stopRecursiveTags){// 文件名称const fileName =decodeURIComponent(response.headers["fname"]);//构造一个blob对象来处理数据const blob = new Blob(this.contentList);//对于<a>标签,只有 Firefox 和 Chrome(内核) 支持 download 属性//IE10以上支持blob但是依然不支持downloadif ("download" in document.createElement("a")) {//支持a标签download的浏览器const link = document.createElement("a"); //创建a标签link.download = fileName; //a标签添加属性link.style.display = "none";link.href = URL.createObjectURL(blob);document.body.appendChild(link);link.click(); //执行下载URL.revokeObjectURL(link.href); //释放urldocument.body.removeChild(link); //释放标签} else {//其他浏览器navigator.msSaveBlob(blob, fileName);} }} else {//调用暂停方法,记录当前下载位置console.log("下载失败")} }).catch(function (error) {console.log(error);});};// 第一次获取数据方便获取总数sentAxios(this.filesCurrentPage);this.$message({message: '文件开始下载!',type: 'success'});} }})</script></body></html> 本篇文章为转载内容。原文链接:https://blog.csdn.net/kangshihang1998/article/details/129407214。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-01-19 08:12:45
546
转载
Material UI
...ontent这家伙的样式动点手脚,好让它更贴近我们的设计需求,瞧着更顺眼些。那么,我们应该如何在SnackBarContent中添加自定义样式呢?本文将通过实例来讲解。 2. 添加自定义样式的基本步骤 首先,我们需要导入必要的组件,并创建一个新的SnackBar。然后,我们可以设置SnackBarContent的内容和样式。 jsx import React from 'react'; import { makeStyles } from '@material-ui/core/styles'; import Snackbar from '@material-ui/core/Snackbar'; import Button from '@material-ui/core/Button'; const useStyles = makeStyles({ snackbarContent: { backgroundColor: 'f5f5f5', borderRadius: 3, padding: '16px 18px', }, }); export default function CustomSnackbar() { const classes = useStyles(); const [open, setOpen] = React.useState(false); const handleClick = () => { setOpen(true); }; return ( Show Snackbar open={open} autoHideDuration={6000} onClose={() => setOpen(false)} ContentProps={ { 'aria-describedby': 'message-id', className: classes.snackbarContent, } } message={This is a custom styled snackbar.} /> ); } 在这个例子中,我们首先创建了一个名为useStyles的自定义样式的函数,其中包含了我们想要添加的样式。然后,在我们亲手捣鼓出的SnackBar里头,我们把这个自定义样式的类名,就像一个神秘礼物一样,塞进了ContentProps里的className属性中,这样SnackBarContent就能“穿上”我们给它准备的样式啦。 这样,我们就成功地在SnackBarContent中添加了自定义样式。接下来,让我们更深入地了解这些步骤。 3. 使用makeStyles 在Material-UI中,我们可以通过makeStyles来自定义组件的样式。makeStyles,这个听起来可能有点技术感的高阶函数,其实是个挺实用的小工具。它干的活儿就是接收一个对象作为参数,这个对象里的每一个小键值对,都代表着一条CSS样式规则。makeStyles这个小家伙,它干的活儿可有意思啦!当你调用它的时候,它会送你一个函数作为礼物。这个函数有点特别,它喜欢接收一个名叫theme的好朋友。然后呢,它就根据这位theme朋友的“心情”(也就是具体的主题样式),为你精心炮制出一套相应的CSS样式规则,就像魔法师一样神奇。 例如,上面的例子中,我们定义了一个名为snackbarContent的样式: jsx const useStyles = makeStyles({ snackbarContent: { backgroundColor: 'f5f5f5', borderRadius: 3, padding: '16px 18px', }, }); 这个样式包括了背景颜色、边框半径和内填充等属性。然后,我们在SnackBar的ContentProps中使用了这个样式的类名。 4. 结论 总的来说,我们可以在SnackBarContent中添加自定义样式的步骤是:首先,我们需要导入必要的组件并创建一个新的SnackBar;然后,我们可以使用makeStyles来定义自定义样式;最后,我们在SnackBar中将这个样式的类名作为ContentProps中的className属性传递给SnackBarContent。这样,我们就可以成功地在SnackBarContent中添加自定义样式了。 当然,这只是一个基本的示例,实际上我们还可以使用其他方式来调整SnackBarContent的样式,例如使用CSS类名或者媒体查询等。不管咋说,咱都得时刻记着这么个理儿:咱们的目标就是捣鼓出一款让用户称心如意,又能严丝合缝符合设计标准的应用程序。所以呢,咱们就得不断去摸索、学习和实践,好让自己能找到最对味的那个解决方案。就像探险家寻找宝藏那样,咱也得勇往直前,不断尝试,直到找到最适合自己的那条路子。
2023-10-21 13:18:01
264
百转千回-t
转载文章
...Normalize.css 1.3 布局容器 2 栅格系统 2.1 栅格系统简介 2.2 栅格参数 2.3 栅格系统使用 2.4 不同屏幕设置不同宽度 2.5 列偏移 2.6 列位置移动 3 排版 3.1 标题 3.2 突出显示 3.3 对齐 3.4 改变大小写 3.5 引用 3.6 列表 4 代码 4.1 内联代码 4.2 用户输入 4.3 代码块 4.3 变量 4.4 程序输出 5 表格 5.1 基本 5.2 条纹状表格 5.3 带边框的表格 5.4 鼠标悬停 5.5 紧缩表格 5.6 状态类 5.7 响应式表格 6 表单 6.1 基本实例 6.2 内联表单 6.3 水平排列的表单 6.4 表单控件 输入框 文本域 多选和单选框 下拉列表 静态内容 帮助文字 校验状态 添加额外的图标 控件尺寸 7 按钮 7.1 可作为按钮使用的标签或元素 7.2 预定义样式 7.3 尺寸 7.4 激活状态 7.5 禁用状态 8 图片 8.1 响应式图片 8.2 图片形状 9 辅助类 9.1 文本颜色 9.2 背景色 9.3 三角符号 9.4 浮动 9.5 让内容块居中 9.6 清除浮动 9.7 显示或隐藏内容 9.10 图片替换 10 响应式工具 10.1 不同视口下隐藏显示 10.2 打印类 1 BootStrap基础 1 什么是BootStrap 由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架简洁、直观、强悍的前端开发框架,让web开发更迅速、简单。 2 BootStrap的版本 BootStrap2 BootStrap3 BootStrap4 3 BootStrap 下载 用于生产环境的Bootstrap Bootstrap Less 源码Bootstrap Sass 源码 4 CDN服务 <!-- 新 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"><!-- 可选的Bootstrap主题文件(一般不用引入) --><link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap-theme.min.css"><!-- jQuery文件。务必在bootstrap.min.js 之前引入 --><script src="http://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script><!-- 最新的 Bootstrap 核心 JavaScript 文件 --><script src="http://cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 5 目录结构 生产环境版 bootstrap/├── css/│ ├── bootstrap.css│ ├── bootstrap.css.map│ ├── bootstrap.min.css│ ├── bootstrap-theme.css│ ├── bootstrap-theme.css.map│ └── bootstrap-theme.min.css├── js/│ ├── bootstrap.js│ └── bootstrap.min.js└── fonts/├── glyphicons-halflings-regular.eot├── glyphicons-halflings-regular.svg├── glyphicons-halflings-regular.ttf├── glyphicons-halflings-regular.woff└── glyphicons-halflings-regular.woff2 6 基本模板 <!DOCTYPE html><html lang="zh-CN"><head><!-- 上述3个meta标签必须放在最前面,任何其他内容都必须跟随其后! --><title>Bootstrap 101 Template</title><!-- Bootstrap --><link href="css/bootstrap.min.css" rel="stylesheet"><!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --><!-- WARNING: Respond.js doesn't work if you view the page via file:// --><!--[if lt IE 9]><script src="//cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script><![endif]--></head><body><h1>你好,世界!</h1><!-- jQuery (necessary for Bootstrap's JavaScript plugins) --><script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script><!-- Include all compiled plugins (below), or include individual files as needed --><script src="js/bootstrap.min.js"></script></body></html> 7 浏览器支持 手机浏览器 ——- Chrome Firefox Safari Android Supported Supported N/A iOS Supported Supported Supported 桌面浏览器 ——— Chrome Firefox Internet Explorer Opera Safari Mac Supported Supported N/A Supported Supported Windows Supported Supported Supported Supported Not supported 8 浏览器兼容 让 IE8 支持H5新标签 页面中引入respond.js <!-- 注意: 页面必须通过服务器访问 --><script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script> IE兼容模式 页面中添加如下代码 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 国产浏览器切换webkit内核 页面中添加如下代码 <meta name="renderer" content="webkit"> 2 BootStrap布局 1 概览 1.1 移动设备优先 为了确保适当的绘制和触屏缩放,需要在 <head> 之中添加 viewport 元数据标签。 在移动设备浏览器上,通过为视口(viewport)设置 meta 属性为 user-scalable=no 可以禁用其缩放(zooming)功能。这样禁用缩放功能后,用户只能滚动屏幕,就能让你的网站看上去更像原生应用的感觉。注意,这种方式我们并不推荐所有网站使用,还是要看你自己的情况而定! 1.2 Normalize.css BootStrap内置了Normalize.css 1.3 布局容器 Bootstrap 需要为页面内容和栅格系统包裹一个 .container 容器。我们提供了两个作此用处的类。注意,由于 padding 等属性的原因,这两种 容器类不能互相嵌套。 .container 类用于固定宽度并支持响应式布局的容器。 <div class="container">...</div> .container-fluid 类用于 100% 宽度,占据全部视口(viewport)的容器。 <div class="container-fluid">...</div> 2 栅格系统 Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列 2.1 栅格系统简介 栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局,你的内容就可以放入这些创建好的布局中。下面就介绍一下 Bootstrap 栅格系统的工作原理: “行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中,以便为其赋予合适的排列(aligment)和内补(padding)。 通过“行(row)”在水平方向创建一组“列(column)”。 你的内容应当放置于“列(column)”内,并且,只有“列(column)”可以作为行(row)”的直接子元素。 类似 .row 和 .col-xs-4 这种预定义的类,可以用来快速创建栅格布局。Bootstrap 源码中定义的 mixin 也可以用来创建语义化的布局。 通过为“列(column)”设置 padding 属性,从而创建列与列之间的间隔(gutter)。通过为 .row 元素设置负值 margin 从而抵消掉为 .container 元素设置的 padding,也就间接为“行(row)”所包含的“列(column)”抵消掉了padding。 负值的 margin就是下面的示例为什么是向外突出的原因。在栅格列中的内容排成一行。 栅格系统中的列是通过指定1到12的值来表示其跨越的范围。例如,三个等宽的列可以使用三个 .col-xs-4 来创建。 如果一“行(row)”中包含了的“列(column)”大于 12,多余的“列(column)”所在的元素将被作为一个整体另起一行排列。 栅格类适用于与屏幕宽度大于或等于分界点大小的设备 , 并且针对小屏幕设备覆盖栅格类。 因此,在元素上应用任何 .col-md-栅格类适用于与屏幕宽度大于或等于分界点大小的设备 , 并且针对小屏幕设备覆盖栅格类。 因此,在元素上应用任何 .col-lg-不存在, 也影响大屏幕设备。 2.2 栅格参数 超小屏幕 手机 (<768px) 小屏幕 平板 (≥768px) 中等屏幕 桌面显示器 (≥992px) 大屏幕 大桌面显示器 (≥1200px) .container 最大宽度 None (自动) 750px 970px 1170px 类前缀 .col-xs- .col-sm- .col-md- .col-lg- 最大列(column)宽 自动 ~62px ~81px ~97px 2.3 栅格系统使用 使用单一的一组 .col-md- 栅格类,就可以创建一个基本的栅格系统,在手机和平板设备上一开始是堆叠在一起的(超小屏幕到小屏幕这一范围),在桌面(中等)屏幕设备上变为水平排列。所有“列(column)必须放在 ” .row 内。 <div class="row"><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div><div class="col-md-1">.col-md-1</div></div><div class="row"><div class="col-md-8">.col-md-8</div><div class="col-md-4">.col-md-4</div></div><div class="row"><div class="col-md-4">.col-md-4</div><div class="col-md-4">.col-md-4</div><div class="col-md-4">.col-md-4</div></div><div class="row"><div class="col-md-6">.col-md-6</div><div class="col-md-6">.col-md-6</div></div> 2.4 不同屏幕设置不同宽度 <div class="row"><div class="col-xs-12 col-sm-6 col-md-8">.col-xs-12 .col-sm-6 .col-md-8</div><div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div></div><div class="row"><div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div><div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div><!-- Optional: clear the XS cols if their content doesn't match in height --><div class="clearfix visible-xs-block"></div><div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div></div> 2.5 列偏移 使用 .col-md-offset- 类可以将列向右侧偏移。这些类实际是通过使用 选择器为当前元素增加了左侧的边距(margin)。例如,.col-md-offset-4 类将 .col-md-4 元素向右侧偏移了4个列(column)的宽度。 <div class="row"><div class="col-md-4">.col-md-4</div><div class="col-md-4 col-md-offset-4">.col-md-4 .col-md-offset-4</div></div><div class="row"><div class="col-md-3 col-md-offset-3">.col-md-3 .col-md-offset-3</div><div class="col-md-3 col-md-offset-3">.col-md-3 .col-md-offset-3</div></div><div class="row"><div class="col-md-6 col-md-offset-3">.col-md-6 .col-md-offset-3</div></div> 2.6 列位置移动 通过使用 .col-md-push- 和 .col-md-pull- 类就可以很容易的改变列(column)的顺序。 <div class="row"><div class="col-md-9 col-md-push-3">.col-md-9 .col-md-push-3</div><div class="col-md-3 col-md-pull-9">.col-md-3 .col-md-pull-9</div></div> 3 排版 3.1 标题 HTML 中的所有标题标签,<h1> 到 <h6> 均可使用。另外,还提供了 .h1 到 .h6 类,为的是给内联(inline)属性的文本赋予标题的样式。 <h1>h1. Bootstrap heading</h1><h2>h2. Bootstrap heading</h2><h3>h3. Bootstrap heading</h3><h4>h4. Bootstrap heading</h4><h5>h5. Bootstrap heading</h5><h6>h6. Bootstrap heading</h6> 在标题内还可以包含 <small> 标签或赋予 .small 类的元素,可以用来标记副标题。 <h1>h1. Bootstrap heading <small>Secondary text</small></h1><h2>h2. Bootstrap heading <small>Secondary text</small></h2><h3>h3. Bootstrap heading <small>Secondary text</small></h3><h4>h4. Bootstrap heading <small>Secondary text</small></h4><h5>h5. Bootstrap heading <small>Secondary text</small></h5><h6>h6. Bootstrap heading <small>Secondary text</small></h6> 3.2 突出显示 通过添加 .lead 类可以让段落突出显示。 <p class="lead">...</p> 3.3 对齐 <p class="text-left">Left aligned text.</p><p class="text-center">Center aligned text.</p><p class="text-right">Right aligned text.</p><p class="text-justify">Justified text.</p><p class="text-nowrap">No wrap text.</p> 3.4 改变大小写 <p class="text-lowercase">Lowercased text.</p><p class="text-uppercase">Uppercased text.</p><p class="text-capitalize">Capitalized text.</p> 3.5 引用 <blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p></blockquote><blockquote><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p><footer>Someone famous in <cite title="Source Title">Source Title</cite></footer></blockquote><blockquote class="blockquote-reverse">...</blockquote> 3.6 列表 无样式列表 <ul class="list-unstyled"><li>...</li></ul> 内联列表 <ul class="list-inline"><li>...</li></ul> 水平排列的内联列表 <dl class="dl-horizontal"><dt>...</dt><dd>...</dd></dl> 4 代码 4.1 内联代码 通过 <code> 标签包裹内联样式的代码片段。 For example, <code><section></code> should be wrapped as inline. 4.2 用户输入 通过 <kbd> 标签标记用户通过键盘输入的内容。 To switch directories, type <kbd>cd</kbd> followed by the name of the directory.<br>To edit settings, press <kbd><kbd>ctrl</kbd> + <kbd>,</kbd></kbd> 4.3 代码块 多行代码可以使用 <pre> 标签。为了正确的展示代码,注意将尖括号做转义处理。 <pre><p>Sample text here...</p></pre> 还可以使用 .pre-scrollable 类,其作用是设置 max-height 为 350px ,并在垂直方向展示滚动条。 4.3 变量 通过 <var> 标签标记变量。 <var>y</var> = <var>m</var><var>x</var> + <var>b</var> 4.4 程序输出 通过 <samp> 标签来标记程序输出的内容。 <samp>This text is meant to be treated as sample output from a computer program.</samp> 5 表格 5.1 基本 为任意 <table> 标签添加 .table 类可以为其赋予基本的样式 <table class="table">...</table> 5.2 条纹状表格 <table class="table table-striped">...</table> 5.3 带边框的表格 <table class="table table-bordered">...</table> 5.4 鼠标悬停 <table class="table table-hover">...</table> 5.5 紧缩表格 <table class="table table-condensed">...</table> 5.6 状态类 通过这些状态类可以为行或单元格设置颜色。 Class 描述 .active 鼠标悬停在行或单元格上时所设置的颜色 .success 标识成功或积极的动作 .info 标识普通的提示信息或动作 .warning 标识警告或需要用户注意 .danger 标识危险或潜在的带来负面影响的动作 5.7 响应式表格 将任何 .table 元素包裹在 .table-responsive 元素内,即可创建响应式表格,其会在小屏幕设备上(小于768px)水平滚动。当屏幕大于 768px 宽度时,水平滚动条消失。 6 表单 6.1 基本实例 单独的表单控件会被自动赋予一些全局样式。所有设置了 .form-control 类的 <input>、<textarea> 和 <select> 元素都将被默认设置宽度属性为 width: 100%;。 将 label 元素和前面提到的控件包裹在 .form-group 中可以获得最好的排列。 <form><div class="form-group"><label for="exampleInputEmail1">Email address</label><input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email"></div><div class="form-group"><label for="exampleInputPassword1">Password</label><input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password"></div><div class="form-group"><label for="exampleInputFile">File input</label><input type="file" id="exampleInputFile"><p class="help-block">Example block-level help text here.</p></div><div class="checkbox"><label><input type="checkbox"> Check me out</label></div><button type="submit" class="btn btn-default">Submit</button></form> 6.2 内联表单 为 <form> 元素添加 .form-inline 类可使其内容左对齐并且表现为 inline-block 级别的控件。只适用于视口(viewport)至少在 768px 宽度时(视口宽度再小的话就会使表单折叠) 6.3 水平排列的表单 通过为表单添加 .form-horizontal 类,并联合使用 Bootstrap 预置的栅格类,可以将 label 标签和控件组水平并排布局。这样做将改变 .form-group 的行为,使其表现为栅格系统中的行(row),因此就无需再额外添加 .row 了 <form class="form-horizontal"><div class="form-group"><label for="inputEmail3" class="col-sm-2 control-label">Email</label><div class="col-sm-10"><input type="email" class="form-control" id="inputEmail3" placeholder="Email"></div></div><div class="form-group"><label for="inputPassword3" class="col-sm-2 control-label">Password</label><div class="col-sm-10"><input type="password" class="form-control" id="inputPassword3" placeholder="Password"></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label><input type="checkbox"> Remember me</label></div></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><button type="submit" class="btn btn-default">Sign in</button></div></div></form> 6.4 表单控件 输入框 包括大部分表单控件、文本输入域控件,还支持所有 HTML5 类型的输入控件: text、password、datetime、datetime-local、date、month、time、week、number、email、url、search、tel 和 color。 只有正确设置了 type 属性的输入控件才能被赋予正确的样式。 文本域 支持多行文本的表单控件。可根据需要改变 rows 属性。 多选和单选框 默认样式 <div class="checkbox"><label><input type="checkbox" value="">Option one is this and that—be sure to include why it's great</label></div><div class="checkbox disabled"><label><input type="checkbox" value="" disabled>Option two is disabled</label></div><div class="radio"><label><input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>Option one is this and that—be sure to include why it's great</label></div><div class="radio"><label><input type="radio" name="optionsRadios" id="optionsRadios2" value="option2">Option two can be something else and selecting it will deselect option one</label></div><div class="radio disabled"><label><input type="radio" name="optionsRadios" id="optionsRadios3" value="option3" disabled>Option three is disabled</label></div> 内联单选和多选框 <label class="checkbox-inline"><input type="checkbox" id="inlineCheckbox1" value="option1"> 1</label><label class="checkbox-inline"><input type="checkbox" id="inlineCheckbox2" value="option2"> 2</label><label class="checkbox-inline"><input type="checkbox" id="inlineCheckbox3" value="option3"> 3</label><label class="radio-inline"><input type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1"> 1</label><label class="radio-inline"><input type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2"> 2</label><label class="radio-inline"><input type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3"> 3</label> 不带文本的Checkbox 和 radio <label><input type="checkbox" id="blankCheckbox" value="option1" aria-label="..."></label></div><div class="radio"><label><input type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="..."></label></div> 下拉列表 <select class="form-control"><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option></select> 静态内容 如果需要在表单中将一行纯文本和 label 元素放置于同一行,为 <p> 元素添加 .form-control-static 类即可 <form class="form-horizontal"><div class="form-group"><label class="col-sm-2 control-label">Email</label><div class="col-sm-10"><p class="form-control-static">email@example.com</p></div></div><div class="form-group"><label for="inputPassword" class="col-sm-2 control-label">Password</label><div class="col-sm-10"><input type="password" class="form-control" id="inputPassword" placeholder="Password"></div></div></form> 帮助文字 <label class="sr-only" for="inputHelpBlock">Input with help text</label><input type="text" id="inputHelpBlock" class="form-control" aria-describedby="helpBlock">...<span id="helpBlock" class="help-block">A block of help text that breaks onto a new line and may extend beyond one line.</span> 校验状态 Bootstrap 对表单控件的校验状态,如 error、warning 和 success 状态,都定义了样式。使用时,添加 .has-warning、.has-error或 .has-success 类到这些控件的父元素即可。任何包含在此元素之内的 .control-label、.form-control 和 .help-block 元素都将接受这些校验状态的样式。 <div class="form-group has-success"><label class="control-label" for="inputSuccess1">Input with success</label><input type="text" class="form-control" id="inputSuccess1" aria-describedby="helpBlock2"><span id="helpBlock2" class="help-block">A block of help text that breaks onto a new line and may extend beyond one line.</span></div><div class="form-group has-warning"><label class="control-label" for="inputWarning1">Input with warning</label><input type="text" class="form-control" id="inputWarning1"></div><div class="form-group has-error"><label class="control-label" for="inputError1">Input with error</label><input type="text" class="form-control" id="inputError1"></div><div class="has-success"><div class="checkbox"><label><input type="checkbox" id="checkboxSuccess" value="option1">Checkbox with success</label></div></div><div class="has-warning"><div class="checkbox"><label><input type="checkbox" id="checkboxWarning" value="option1">Checkbox with warning</label></div></div><div class="has-error"><div class="checkbox"><label><input type="checkbox" id="checkboxError" value="option1">Checkbox with error</label></div></div> 添加额外的图标 你还可以针对校验状态为输入框添加额外的图标。只需设置相应的 .has-feedback 类并添加正确的图标即可 <div class="form-group has-success has-feedback"><label class="control-label" for="inputSuccess2">Input with success</label><input type="text" class="form-control" id="inputSuccess2" aria-describedby="inputSuccess2Status"><span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span><span id="inputSuccess2Status" class="sr-only">(success)</span></div> 控件尺寸 通过 .input-lg 类似的类可以为控件设置高度,通过 .col-lg- 类似的类可以为控件设置宽度。 高度尺寸 创建大一些或小一些的表单控件以匹配按钮尺寸 <input class="form-control input-lg" type="text" placeholder=".input-lg"><input class="form-control" type="text" placeholder="Default input"><input class="form-control input-sm" type="text" placeholder=".input-sm"><select class="form-control input-lg">...</select><select class="form-control">...</select><select class="form-control input-sm">...</select> 水平排列的表单组的尺寸 通过添加 .form-group-lg 或 .form-group-sm 类,为 .form-horizontal 包裹的 label 元素和表单控件快速设置尺寸。 <form class="form-horizontal"><div class="form-group form-group-lg"><label class="col-sm-2 control-label" for="formGroupInputLarge">Large label</label><div class="col-sm-10"><input class="form-control" type="text" id="formGroupInputLarge" placeholder="Large input"></div></div><div class="form-group form-group-sm"><label class="col-sm-2 control-label" for="formGroupInputSmall">Small label</label><div class="col-sm-10"><input class="form-control" type="text" id="formGroupInputSmall" placeholder="Small input"></div></div></form> 7 按钮 7.1 可作为按钮使用的标签或元素 为 <a>、<button> 或 <input> 元素添加按钮类(button class)即可使用 Bootstrap 提供的样式 <a class="btn btn-default" href="" role="button">Link</a><button class="btn btn-default" type="submit">Button</button><input class="btn btn-default" type="button" value="Input"><input class="btn btn-default" type="submit" value="Submit"> 7.2 预定义样式 <!-- Standard button --><button type="button" class="btn btn-default">(默认样式)Default</button><!-- Provides extra visual weight and identifies the primary action in a set of buttons --><button type="button" class="btn btn-primary">(首选项)Primary</button><!-- Indicates a successful or positive action --><button type="button" class="btn btn-success">(成功)Success</button><!-- Contextual button for informational alert messages --><button type="button" class="btn btn-info">(一般信息)Info</button><!-- Indicates caution should be taken with this action --><button type="button" class="btn btn-warning">(警告)Warning</button><!-- Indicates a dangerous or potentially negative action --><button type="button" class="btn btn-danger">(危险)Danger</button><!-- Deemphasize a button by making it look like a link while maintaining button behavior --><button type="button" class="btn btn-link">(链接)Link</button> 7.3 尺寸 需要让按钮具有不同尺寸吗?使用 .btn-lg、.btn-sm 或 .btn-xs 就可以获得不同尺寸的按钮。 通过给按钮添加 .btn-block 类可以将其拉伸至父元素100%的宽度,而且按钮也变为了块级(block)元素。 7.4 激活状态 添加 .active 类 7.5 禁用状态 为 <button> 元素添加 disabled 属性,使其表现出禁用状态。 为基于 <a> 元素创建的按钮添加 .disabled 类。 8 图片 8.1 响应式图片 在 Bootstrap 版本 3 中,通过为图片添加 .img-responsive 类可以让图片支持响应式布局。其实质是为图片设置了 max-width: 100%;、 height: auto; 和 display: block; 属性,从而让图片在其父元素中更好的缩放。 如果需要让使用了 .img-responsive 类的图片水平居中,请使用 .center-block 类,不要用 .text-center <img src="..." class="img-responsive" alt="Responsive image"> 8.2 图片形状 <img src="..." alt="..." class="img-rounded"><img src="..." alt="..." class="img-circle"><img src="..." alt="..." class="img-thumbnail"> 9 辅助类 9.1 文本颜色 <p class="text-muted">...</p><p class="text-primary">...</p><p class="text-success">...</p><p class="text-info">...</p><p class="text-warning">...</p><p class="text-danger">...</p> 9.2 背景色 <p class="bg-primary">...</p><p class="bg-success">...</p><p class="bg-info">...</p><p class="bg-warning">...</p><p class="bg-danger">...</p> 9.3 三角符号 <span class="caret"></span> 9.4 浮动 <div class="pull-left">...</div><div class="pull-right">...</div> 9.5 让内容块居中 <div class="center-block">...</div> 9.6 清除浮动 通过为父元素添加 .clearfix 类可以很容易地清除浮动(float) <!-- Usage as a class --><div class="clearfix">...</div> 9.7 显示或隐藏内容 <div class="show">...</div><div class="hidden">...</div> 9.10 图片替换 使用 .text-hide 类或对应的 mixin 可以用来将元素的文本内容替换为一张背景图。 <h1 class="text-hide">Custom heading</h1> 10 响应式工具 10.1 不同视口下隐藏显示 .visible-xs- .visible-sm- .visible-md- .visible-lg- .hidden-xs .hidden-sm .hidden-md .hidden-lg.visible--block .visible--inline .visible--inline-block 10.2 打印类 .visible-print-block.visible-print-inline.visible-print-inline-block.hidden-print 打印机下隐藏 本篇文章为转载内容。原文链接:https://blog.csdn.net/m0_67155975/article/details/123351126。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-10-18 14:41:25
150
转载
VUE
...虚拟DOM是Vue.js框架中用于提高页面渲染性能的一种机制。在实际应用中,当数据发生变化时,Vue.js并不会立即操作真实浏览器DOM,而是首先更新虚拟DOM树,这个过程消耗的资源相对较少。然后通过高效的Diff算法比较新旧虚拟DOM树的差异,最后仅针对有变化的部分进行最小化的真实DOM更新。这种策略有效避免了直接操作DOM带来的性能瓶颈问题,使得用户界面能够更流畅地响应数据变化。 单文件组件(Single File Component, SFC) , 单文件组件是Vue.js推荐的一种组织代码的方式,它将一个组件相关的HTML模板、CSS样式和JavaScript逻辑封装在一个.vue文件中。在这个文件里,开发者可以清晰地分离关注点,通过<template>标签编写HTML模板,<script>标签定义组件逻辑与状态,以及<style>标签添加组件专属样式。这种方式有助于提升代码的可读性和复用性,并且方便开发工具进行模块化处理和编译打包。 数据绑定(Data Binding) , 在Vue.js框架中,数据绑定是一种自动同步视图层(HTML)与数据模型(JavaScript)的技术。通过使用特定的模板语法(如 插值表达式或v-bind指令),Vue.js会确保任何在data对象中声明的属性发生变化时,视图层能实时反映这些变化。同时,当用户在界面上触发事件改变视图内容时,Vue.js也能相应地更新底层的数据模型,实现了双向数据绑定。这样简化了开发者手动操作DOM的工作量,使他们能够更专注于业务逻辑的实现。
2023-07-03 15:02:23
106
程序媛
Element-UI
...:初识ElementUI中的Collapse折叠组件 嘿,朋友们!今天咱们来聊聊ElementUI里的一个超级实用的小宝贝——Collapse折叠组件。这东西简直是页面布局的救星啊,特别是当你有很多内容要展示,却又希望页面看起来简洁清爽的时候。这东西能让内容像折扇一样打开和收起来,既不占地方,还能让用户用起来特别顺手,感觉特好。 不过,在开始之前,我们得先确保你已经安装并引入了ElementUI库。如果你还没这样做,别急,我马上带你过一遍基础步骤。 安装ElementUI 首先,你需要通过npm或yarn来安装ElementUI: bash npm install element-ui -S 或者 bash yarn add element-ui 接下来,在你的项目入口文件中(通常是main.js),引入ElementUI: javascript import Vue from 'vue'; import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI); 现在,我们的环境准备好了,可以正式开启我们的Collapse折叠组件之旅了! 第二章:Collapse折叠组件的基本用法 Collapse折叠组件的核心在于它的可折叠特性。想象一下,当你有一个长长的FAQ列表时,如果全部展开,页面会变得非常臃肿,而使用Collapse组件,你可以让这些内容按需显示,多好啊! 基本结构 最基础的Collapse组件由el-collapse标签包裹着几个el-collapse-item标签构成。每个el-collapse-item就是一个可以折叠起来的部分,你可以用title属性来给它起个名字,这样大家一眼就能看出哪些部分是可以点开来瞧瞧的。 示例代码 让我们来看一个简单的例子: html 这里是隐藏的内容。 更多隐藏的内容... 这里我们定义了一个activeNames变量,用来控制哪些el-collapse-item是展开状态。在上面的例子中,默认展开了第一个折叠项。 第三章:进阶玩法——动态控制与样式调整 掌握了基本操作之后,是不是觉得还不够?别急,接下来我们要深入一点,看看如何更加灵活地使用这个组件。 动态控制 有时候,我们可能需要根据某些条件来动态控制某个折叠项的状态。这时,我们可以用Vue的数据绑定功能,把v-model绑在一个数组上,这个数组里放的都是我们想让一开始就是打开状态的折叠项的名字。 html 切换折叠状态 这里增加了一个按钮,点击它可以切换折叠项的展开状态。 样式调整 ElementUI提供了丰富的自定义选项,包括颜色、边框等。你可以通过换换主题或者直接调整CSS样式,轻松整成自己喜欢的折叠组件样子。 css 第四章:真实场景应用与最佳实践 了解了这么多,你可能会问:“那我在实际开发中怎么用呢?”其实,Collapse折叠组件的应用场景非常广泛,比如FAQ页面、商品详情页的规格参数展示等等。关键是找到合适的地方使用它,让用户体验更佳。 最佳实践 1. 保持一致性 无论是在标题的设计还是内容的呈现上,都要保持整体的一致性。 2. 合理规划 不要一次性展开过多内容,避免信息过载。 3. 响应式设计 考虑不同设备下的表现,确保在小屏幕上也能良好工作。 最后,别忘了不断尝试和改进。技术总是在进步,我们的理解和运用也会随之提高。希望今天的分享能帮助你在实际项目中更好地利用ElementUI的Collapse折叠组件! --- 这就是我对你提问的回答,希望能对你有所帮助。如果你有任何问题或想要了解更多细节,请随时告诉我!
2024-10-29 15:57:21
76
心灵驿站
JQuery
...捷地操作HTML元素样式后,我们进一步探讨现代前端开发中的CSS管理与JavaScript库的最新动态。 近年来,随着Web开发技术的快速发展,诸如Tailwind CSS等实用工具逐渐兴起,它们以原子化、实用优先的类名集合,为开发者提供了更加高效、一致的样式解决方案。例如,使用Tailwind CSS时,无需像JQuery那样逐个修改元素样式,只需添加预定义的类名即可实现丰富的UI设计和响应式布局。 同时,Vue.js、React等主流前端框架自带或推荐配套的CSS-in-JS方案,如styled-components、emotion-js等,将CSS直接编写在JavaScript中,通过组件化的方式管理样式,使得样式与业务逻辑高度耦合,大大提升了开发效率和代码维护性。 此外,JQuery虽然在DOM操作和事件处理上仍具有广泛的应用场景,但在现代前端项目中,原生JavaScript(如querySelector、addEventListener等)以及上述提及的新技术逐渐替代了部分JQuery的功能。近期,JQuery团队也宣布重心转向对遗留代码的支持和维护,鼓励开发者采用更现代化的技术栈。 总之,在不断迭代更新的前端领域,理解和掌握各类CSS管理和JavaScript库的最新趋势和技术方案,对于提升项目质量和开发效率至关重要。开发者应当根据项目需求及技术选型,灵活运用不同工具,实现最佳实践。
2023-12-10 16:36:43
417
程序媛
JQuery
...现代前端开发中的动态UI设计和交互体验的创新趋势。近期,随着WebGL和Canvas技术的普及,越来越多的开发者开始尝试将复杂的数学函数与图形渲染相结合,创造出极具视觉冲击力和沉浸式体验的网页特效。 例如,Mozilla的WebVR实验室发布了一系列利用JavaScript进行3D空间运动模拟的案例,其中不乏采用正弦、余弦等函数生成复杂轨迹的应用实例,不仅局限于二维平面上的螺旋运动,更扩展到了三维立体空间的动态变换。此外,React Three Fiber等库更是将React生态与Three.js(一款强大的WebGL库)深度整合,使得开发人员能够更便捷地构建具有高级动画效果的用户界面。 同时,Google Material Design团队也不断推出新的交互模式和动画规范,强调动态过渡和反馈对于提升用户体验的重要性。他们倡导的“有意义的运动”理念,主张在设计中融入物理规则,使元素的移动和变化更符合用户的直觉预期,从而增强互动性和趣味性。 因此,无论是从基础的jQuery实践出发,还是着眼未来Web前端领域的发展潮流,理解和掌握运用数学模型驱动UI动态效果的方法,都将对提升产品品质和用户体验产生深远影响。感兴趣的开发者可以继续深入学习CSS动画、GreenSock(GSAP)、Popmotion等更多用于创建丰富动画效果的工具和技术,并关注行业最新动态,以保持设计理念和技术应用的与时俱进。
2023-10-07 14:59:45
631
数据库专家
转载文章
...月,Google在其Material Design Web组件库中发布了全新的折叠菜单组件,不仅提供了流畅的过渡动画效果,还支持自定义样式以及多级子菜单的展开收起功能。这一更新为开发者在移动端及桌面端创建灵活且用户体验良好的导航结构提供了强有力的支持。 此外,一项关于“CSS动画性能优化”的研究也于最近出炉,来自Mozilla的前端工程师团队分析了使用max-height与height属性结合transition实现动画时的浏览器渲染机制,并提出了一种新的优化策略。该策略强调在处理未知高度元素时,采用requestAnimationFrame API配合CSS变量实时获取并设置元素高度,从而进一步减少延迟和卡顿现象,提升用户界面的响应速度。 与此同时,也有前端社区的技术文章深度解读了无插件方案背后的设计理念和技术挑战,提倡回归原生JavaScript以追求更高的性能和更佳的可维护性。作者通过实际案例详细剖析了如何运用现代CSS特性,如Flexbox或Grid布局,与JavaScript巧妙结合,实现诸如导航栏折叠菜单这样的复杂交互效果,兼顾移动设备和桌面端的兼容性与性能要求。 综上所述,在移动端导航栏折叠菜单的实现道路上,无论是从官方库的更新迭代、学术研究的深入解析还是社区实践经验的分享,都展现出丰富的前沿技术和设计理念,为开发者们提供了持续优化和改进的方向。
2023-04-03 15:59:22
139
转载
转载文章
...t、tailwindcss、pinia、element-plus等一些日常工具包,以及加入了eslint、prettier保证日常开发代码质量工具,基本上能够保证大家能够开箱即用,下面附上模板代码地址,关于代码目录结构可以参考代码仓库的说明文档,喜欢的朋友可以转评赞给一个,点个收藏不丢失,下面呢我介绍一下基本构建思路; 1、关于项目中使用tsx 要想项目中运行tsx,我们就得考虑到tsx语法糖编译的问题,这里就得用到@vitejs/plugin-vue-jsx插件,详细用法参考github文档,安装后,在vite的plugin中直接调用即可; import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'import vueJsx from '@vitejs/plugin-vue-jsx'// https://vitejs.dev/config/export default defineConfig({plugins: [vue(), vueJsx()]}) 2、安装tailwindcss 关于tailwindcss + vite方案,它的官网有了很友好的方案,这块大家按部就班的安装就够了,没有多少复杂度,参考地址,选择tailwindcss主要是它提供了一些快速样式,比如padding、margin、background等,如果我们项目是后台管理系统,tailwindcss会大大降低我们写css样式的工作,大家可以去学习一波在项目中用起来,熟悉了以后就觉得他是在是太方便了。 这里不做用法的介绍,就推荐一个vscode插件Tailwind CSS IntelliSense,安装后,在项目中我们就可以只能提示,如下所示: 3、关于eslint + prettier 代码统一规范 关于代码规范,一般小一点公司不太会做这方面的工程化配置,但是eslint等这些代码规范工具,会让我们团队的代码更规范,风格更统一,团队协作更加方便,我简单说一下配置eslint及prettier的办法 (1)首先安装eslint工具库 pnpm add eslint -D pnpm eslint --init (2)安装外部的语法eslint规范及import校验规范 选择对应的项目内容,这里我的项目用到(vue, typescript,browser)这个,当然有这个还不够,我们需要安装如下两个工具包 pnpm add eslint-plugin-import // 主要对于es与typescript import 路径的一个eslint校验 pnpm add eslint-config-airbnb-base // 这个是airbnb出的一套eslint语法规范的工具库,如果自己公司没有对应的代码规范,这个是很实用的一套 (3)编写vue3相关的规范 项目中我们用到的是eslint-plugin-vue这个vue代码校验规范工具,里面有很多内容及配置项功能,我们这里推荐大家在配置代码规范,可以参考官方的说明文档,链接放在这里; (4)安装和配置prettier 这个相对来讲比较简单一些,我们直接安装pnpm add eslint-plugin-prettier eslint-config-prettier prettier -D,这里我们需要注意的是prettier与eslint冲突问题; 上面是配置时候的基本流程,最终结果我将eslintrc文件及package.json文件放到这里,有需要的朋友,可以直接copy一份去配置,毕竟这个配置很臭很长,深入学习感觉又没有太大必要(23333~) {"name": "vue-tsx-template","private": true,"version": "0.0.0","scripts": {"dev": "vite","build": "vue-tsc --noEmit && vite build","preview": "vite preview","fix": "eslint --fix --ext .js,.jsx,.tsx,.vue src && prettier "},"dependencies": {"vue": "^3.2.25"},"devDependencies": {"@typescript-eslint/eslint-plugin": "^5.23.0","@typescript-eslint/parser": "^5.23.0","@vitejs/plugin-vue": "^2.3.3","@vitejs/plugin-vue-jsx": "^1.3.10","autoprefixer": "^10.4.7","eslint": "^8.15.0","eslint-config-airbnb-base": "^15.0.0","eslint-config-prettier": "^8.5.0","eslint-plugin-import": "^2.26.0","eslint-plugin-prettier": "^4.0.0","eslint-plugin-vue": "^8.7.1","postcss": "^8.4.13","prettier": "^2.6.2","sass": "^1.51.0","tailwindcss": "^3.0.24","typescript": "^4.5.4","vite": "^2.9.9","vue-eslint-parser": "^9.0.1","vue-tsc": "^0.34.7"} } 下面是.eslintrc.js文件 module.exports = {env: {browser: true,es2021: true,node: true,// 处理 defineProps 报错'vue/setup-compiler-macros': true,},extends: ['eslint:recommended','airbnb-base','prettier','plugin:prettier/recommended','plugin:vue/vue3-recommended','plugin:@typescript-eslint/recommended','plugin:import/recommended','plugin:import/typescript',],parser: 'vue-eslint-parser',parserOptions: {ecmaVersion: 'latest',parser: '@typescript-eslint/parser',sourceType: 'module',},plugins: ['vue', '@typescript-eslint'],rules: {// 防止prettier与eslint冲突'prettier/prettier': 'error',// eslint-plugin-import es module导入eslint规则配置,旨在规避拼写错误问题'import/no-unresolved': 0,'import/extensions': ['error',{js: 'never',jsx: 'never',ts: 'never',tsx: 'never',json: 'always',},],// 使用导出的名称作为默认属性(主要用作导出模块内部有 default, 和直接导出两种并存情况下,会出现default.proptry 这种问题从在的情况)'import/no-named-as-default-member': 0,'import/order': ['error', { 'newlines-between': 'always' }],// 导入确保是否在首位'import/first': 0,// 如果文件只有一个导出,是否开启强制默认导出'import/prefer-default-export': 0,'import/no-extraneous-dependencies': ['error',{devDependencies: [],optionalDependencies: false,},],/ 关于typescript语法校验 参考文档: https://www.npmjs.com/package/@typescript-eslint/eslint-plugin/'@typescript-eslint/no-extra-semi': 0,// 是否禁止使用any类型'@typescript-eslint/no-explicit-any': 0,// 是否对于null情况做非空断言'@typescript-eslint/no-non-null-assertion': 0,// 是否对返回值类型进行定义校验'@typescript-eslint/explicit-function-return-type': 0,'@typescript-eslint/member-delimiter-style': ['error', { multiline: { delimiter: 'none' } }],// 结合eslint 'no-use-before-define': 'off',不然会有报错,需要关闭eslint这个校验,主要是增加了对于type\interface\enum'no-use-before-define': 'off','@typescript-eslint/no-use-before-define': ['error'],'@typescript-eslint/explicit-module-boundary-types': 'off','@typescript-eslint/no-unused-vars': ['error',{ignoreRestSiblings: true,varsIgnorePattern: '^_',argsIgnorePattern: '^_',},],'@typescript-eslint/explicit-member-accessibility': ['error', { overrides: { constructors: 'no-public' } }],'@typescript-eslint/consistent-type-imports': 'error','@typescript-eslint/indent': 0,'@typescript-eslint/naming-convention': ['error',{selector: 'interface',format: ['PascalCase'],},],// 不允许使用 var'no-var': 'error',// 如果没有修改值,有些用const定义'prefer-const': ['error',{destructuring: 'any',ignoreReadBeforeAssign: false,},],// 关于vue3 的一些语法糖校验// 超过 4 个属性换行展示'vue/max-attributes-per-line': ['error',{singleline: 4,},],// setup 语法糖校验'vue/script-setup-uses-vars': 'error',// 关于箭头函数'vue/arrow-spacing': 'error','vue/html-indent': 'off',},} 4、加入单元测试 单元测试,根据自己项目体量及重要性而去考虑是否要增加,当然单测可以反推一些组件 or 方法的设计是否合理,同样如果是一个稳定的功能在加上单元测试,这就是一个很nice的体验; 我们单元测试是基于jest来去做的,具体安装单测的办法如下,跟着我的步骤一步步来; 安装jest单测相关的依赖组件库 pnpm add @testing-library/vue @testing-library/user-event @testing-library/jest-dom @types/jest jest @vue/test-utils -D 安装完成后,发现还需要安装前置依赖 @testing-library/dom @vue/compiler-sfc我们继续补充 安装babel相关工具,用ts写的单元测试需要转义,具体安装工具如下pnpm add @babel/core babel-jest @vue/babel-preset-app -D,最后我们配置babel.config.js module.exports = {presets: ['@vue/app'],} 配置jest.config.js module.exports = {roots: ['<rootDir>/test'],testMatch: [// 这里我们支持src目录里面增加一些单层,事实上我并不喜欢这样做'<rootDir>/src//__tests__//.{js,jsx,ts,tsx}','<rootDir>/src//.{spec,test}.{js,jsx,ts,tsx}',// 这里我习惯将单层文件统一放在test单独目录下,不在项目中使用,降低单测文件与业务组件模块混合在一起'<rootDir>/test//.{spec,test}.{js,jsx,ts,tsx}',],testEnvironment: 'jsdom',transform: {// 此处我们单测没有适用vue-jest方式,项目中我们江永tsx方式来开发,所以我们如果需要加入其它的内容// '^.+\\.(vue)$': '<rootDir>/node_modules/vue-jest','^.+\\.(js|jsx|mjs|cjs|ts|tsx)$': '<rootDir>/node_modules/babel-jest',},transformIgnorePatterns: ['<rootDir>/node_modules/','[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$','^.+\\.module\\.(css|sass|scss|less)$',],moduleFileExtensions: ['ts', 'tsx', 'vue', 'js', 'jsx', 'json', 'node'],resetMocks: true,} 具体写单元测试的方法,可以参考项目模板中的组件单元测试写法,这里不做过多的说明; 5、封装axios请求库 这里呢其实思路有很多种,如果有自己的习惯的封装方式,就按照自己的思路,下面附上我的封装代码,简短的说一下我的封装思路: 1、基础的请求拦截、相应拦截封装,这个是对于一些请求参数格式化处理等,或者返回值情况处理 2、请求异常、错误、接口调用成功返回结果错误这些错误的集中处理,代码中请求就不再做trycatch这些操作 3、请求函数统一封装(代码中的 get、post、axiosHttp) 4、泛型方式定义请求返回参数,定义好类型,让我们可以在不同地方使用有良好的提示 import type { AxiosRequestConfig, AxiosResponse } from 'axios'import axios from 'axios'import { ElNotification } from 'element-plus'import errorHandle from './errorHandle'// 定义数据返回结构体(此处我简单定义一个比较常见的后端数据返回结构体,实际使用我们需要按照自己所在的项目开发)interface ResponseData<T = null> {code: string | numberdata: Tsuccess: booleanmessage?: string[key: string]: any}const axiosInstance = axios.create()// 设定响应超时时间axiosInstance.defaults.timeout = 30000// 可以后续根据自己http请求头特殊邀请设定请求头axiosInstance.interceptors.request.use((req: AxiosRequestConfig<any>) => {// 特殊处理,后续如果项目中有全局通传参数,可以在这儿做一些处理return req},error => Promise.reject(error),)// 响应拦截axiosInstance.interceptors.response.use((res: AxiosResponse<any, any>) => {// 数组处理return res},error => Promise.reject(error),)// 通用的请求方法体const axiosHttp = async <T extends Record<string, any> | null>(config: AxiosRequestConfig,desc: string,): Promise<T> => {try {const { data } = await axiosInstance.request<ResponseData<T>>(config)if (data.success) {return data.data}// 如果请求失败统一做提示(此处我没有安装组件库,我简单写个mock例子)ElNotification({title: desc,message: ${data.message || '请求失败,请检查'},})} catch (e: any) {// 统一的错误处理if (e.response && e.response.status) {errorHandle(e.response.status, desc)} else {ElNotification({title: desc,message: '接口异常,请检查',})} }return null as T}// get请求方法封装export const get = async <T = Record<string, any> | null>(url: string, params: Record<string, any>, desc: string) => {const config: AxiosRequestConfig = {method: 'get',url,params,}const data = await axiosHttp<T>(config, desc)return data}// Post请求方法export const post = async <T = Record<string, any> | null>(url: string, data: Record<string, any>, desc: string) => {const config: AxiosRequestConfig = {method: 'post',url,data,}const info = await axiosHttp<T>(config, desc)return info} 请求错误(状态码错误相关提示) import { ElNotification } from 'element-plus'function notificat(message: string, title: string) {ElNotification({title,message,})}/ @description 获取接口定义 @param status {number} 错误状态码 @param desc {string} 接口描述信息/export default function errorHandle(status: number, desc: string) {switch (status) {case 401:notificat('用户登录失败', desc)breakcase 404:notificat('请求不存在', desc)breakcase 500:notificat('服务器错误,请检查服务器', desc)breakdefault:notificat(其他错误${status}, desc)break} } 6、关于vue-router 及 pinia 这两个相对来讲简单一些,会使用vuex状态管理,上手pinia也是很轻松的事儿,只是更简单化了、更方便了,可以参考模板项目里面的用法example,这里附上router及pinia配置方法,路由守卫,大家可以根据项目的要求再添加 import type { RouteRecordRaw } from 'vue-router'import { createRouter, createWebHistory } from 'vue-router'// 配置路由const routes: Array<RouteRecordRaw> = [{path: '/',redirect: '/home',},{name: 'home',path: '/home',component: () => import('page/Home'),},]const router = createRouter({routes,history: createWebHistory(),})export default router 针对与pinia,参考如下: import { createPinia } from 'pinia'export default createPinia() 在入口文件将router和store注入进去 import { createApp } from 'vue'import App from './App'import store from './store/index'import './style/index.css'import './style/index.scss'import 'element-plus/dist/index.css'import router from './router'// 注入全局的storeconst app = createApp(App).use(store).use(router)app.mount('app') 说这些比较枯燥,建议大家去github参考项目说明文档,下载项目,自己过一遍,喜欢的朋友收藏点赞一下,如果喜欢我构建好的项目给个star不丢失,谢谢各位看官的支持。 本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_37764929/article/details/124860873。 该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。 作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。 如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。
2023-10-05 12:27:41
116
转载
CSS
CSS样式表 , CSS(Cascading Style Sheets)样式表是一种样式语言,用于定义HTML文档中元素的外观和布局。在网页设计中,通过编写CSS样式表可以控制网页内容如字体、颜色、间距、布局等多种视觉呈现效果,并且支持层叠和继承特性,使得样式能够根据需要灵活应用到页面的不同部分或组件上。 插件元素 , 插件元素是指在网站开发过程中,由第三方插件或者组件生成的HTML元素。这些元素具有特定的功能或展示效果,通常带有插件自定义的类名或ID,以便开发者可以通过CSS或JavaScript进行进一步的样式修改或功能扩展。 Shadow DOM , Shadow DOM是Web Components规范的一部分,它为HTML元素提供了一种封装样式和结构的方式。在Shadow DOM环境中,组件内部的DOM树(称为影子DOM)与页面主DOM树相隔离,从而确保了组件样式不会影响到页面其他部分,同时也避免外部样式对组件内部造成干扰。当文章提到“常规CSS选择器无法直接作用于内部元素”时,就是在讨论Shadow DOM环境下样式覆盖的特殊性。 CSS Variables(自定义属性) , CSS Variables,又称CSS自定义属性,是在CSS中定义和使用的变量。它们允许开发者在样式表中定义一些可复用的值,并在整个文档或指定范围内的元素中引用这些值。这增强了CSS样式的灵活性和可维护性,特别是在处理复杂主题切换或全局样式调整时尤为有用。 CSS-in-JS , CSS-in-JS是一种将CSS样式编写融入JavaScript编程中的技术方案。通过这种方法,开发者可以直接在JavaScript代码中创建和操作样式对象,然后将其应用于React组件或其他前端框架的组件中。这种方式提供了动态更新样式的能力,有助于实现更复杂的交互式UI设计,并促进样式与逻辑的紧密集成,简化了跨组件样式的管理和共享。
2023-05-26 10:19:55
459
编程狂人
HTML
...标签如何实现文本样式控制后,我们还可以关注近期Web开发领域的最新动态和最佳实践。例如,随着Web Components的普及和框架如React、Vue对原生Web API的深度集成,开发者对于样式控制有了更为模块化和灵活的选择。Shadow DOM技术使得组件内部样式与全局样式隔离,从而避免了样式冲突问题,这在一定程度上改变了我们对标签的传统使用方式。 同时,CSS-in-JS作为一种新兴的样式编写方式,允许开发者在JavaScript中定义和应用样式,它在动态样式处理上展现出独特的优势。诸如styled-components等库允许创建具有唯一类名的元素,这种方式能更好地适应现代UI设计中的频繁交互和状态变化需求。 此外,针对可访问性和SEO优化的需求,业界越来越提倡语义化的HTML结构和样式应用,而非过度依赖于标签进行视觉表现。W3C规范也持续更新,以指导开发者遵循最佳实践,如使用(强调)和(重要性)等语义标签,以及合理利用ARIA属性来提升页面的可访问性。 综上所述,在实际项目中,我们既要掌握并灵活运用标签进行文本样式控制,也要紧跟技术发展趋势,结合现代Web开发的最佳实践,以期构建出既美观又具有良好可维护性的网页。
2023-09-18 15:40:18
446
星河万里
Material UI
...狂的问题——在使用 Material-UI 的 ListItemButton 组件时,发现列表项按钮样式异常。这个问题让我头疼了好一阵子,最后我还是决定把它写下来,希望能帮到和我有一样困扰的小伙伴们。 首先,让我们简单回顾一下 Material-UI 是什么。这库简直神了,是个超牛的 React UI 工具包,里面啥都有,各种现成的组件随便挑。有了它,咱们分分钟就能整出个既好看又整齐的用户界面,简直太爽了!ListItemButton 这个组件就像是个专司打造列表按钮的小能手,特别适合用来做导航菜单或是选项列表,用起来方便又顺手。 2. 问题再现 当我第一次尝试使用 ListItemButton 组件时,一切都看起来很正常。可是,一旦我开始加点个性化的样式或者往里面塞其他小部件,情况就立马变得棘手起来。我注意到有时候按钮的样子会变得挺古怪,比如说边框的颜色不对劲,或者是点了一下之后没啥反应,感觉不太对头。这让我感到非常困惑,因为我在官方文档里并没有找到解决办法。 3. 探索与调试 3.1 初始设置 为了更好地重现问题,我先创建了一个简单的 React 项目,并引入了 Material-UI。然后,我尝试着使用 ListItemButton 来构建一个简单的导航菜单。代码如下: jsx import React from 'react'; import { ListItemButton, ListItemText } from '@mui/material'; function NavigationItem({ text }) { return ( ); } export default function App() { return ( ); } 这段代码运行起来一切正常,没有出现任何样式问题。但是,当我开始尝试给 ListItemButton 添加自定义样式时,问题就出现了。 3.2 添加自定义样式 我尝试给 ListItemButton 添加一个背景颜色,以便在点击时更明显地反馈用户操作。代码如下: jsx import React from 'react'; import { styled } from '@mui/system'; import { ListItemButton, ListItemText } from '@mui/material'; const StyledListItemButton = styled(ListItemButton)({ backgroundColor: 'f0f0f0', }); function NavigationItem({ text }) { return ( ); } export default function App() { return ( ); } 结果,按钮的背景颜色确实改变了,但是点击后的反馈效果却消失了,按钮的颜色没有变化,这显然不是我想要的效果。 3.3 深入探究 我意识到,问题可能出在 ListItemButton 的默认样式上。于是,我又尝试了一种方法,直接覆盖 ListItemButton 的样式,代码如下: jsx import React from 'react'; import { styled } from '@mui/system'; import { ListItemButton, ListItemText } from '@mui/material'; const StyledListItemButton = styled(ListItemButton)(({ theme }) => ({ backgroundColor: 'f0f0f0', '&:hover': { backgroundColor: theme.palette.action.hover, }, '&.Mui-selected': { backgroundColor: theme.palette.primary.main, }, })); function NavigationItem({ text }) { return ( ); } export default function App() { return ( ); } 这次,我不仅设置了背景颜色,还添加了悬停和选中状态下的样式。嘿,问题终于搞定啦!现在按钮的颜色对头了,点一下还有正常的反馈呢! 4. 总结与反思 通过这个过程,我深刻体会到 Material-UI 的强大之处,但也意识到了它的复杂性。有时候,我们得花更多时间去摆弄那些组件的默认样式,还得搞清楚怎么正确地改它们,真是让人头大。掌握了这些技巧后,你就能够轻松打造出既好看又好用的用户界面了。 如果你也遇到了类似的问题,不妨试试上述的方法。希望我的分享对你有所帮助!
2024-12-23 15:32:38
116
蝶舞花间
Element-UI
...,在Element-UI这个大家伙里头,那个叫做elpagination的分页组件是怎么巧妙地实时获取并刷新数据的吧! 一、首先,我们需要了解什么是分页组件 分页组件是一种常见的前端界面元素,它可以让我们在展示大量数据时,只显示一部分数据,而其他的数据显示为"更多"或者"下一页"等状态。这样子做不仅可以嗖嗖地提升加载速度,还能让用户轻轻松松找到自己心水的内容,岂不美哉? 二、elpagination分页组件的使用方法 在Element-UI中,我们可以直接通过引入相应的CSS和JS文件,然后在HTML中添加相应的标签来使用elpagination分页组件。下面是一个简单的使用示例: html 在这个例子中,我们首先引入了el-pagination的样式和JavaScript库,然后在模板中添加了一个el-pagination组件。我们在这玩意儿的组件上搞了个叫handleCurrentChange的小开关,好比这样:只要用户手一滑,翻了页码,这个小开关就立马启动工作,执行它的任务。同时呢,我们还巧妙地运用了:current-page.sync和:total这两个小家伙,把当前页码和总的页数,像绑鞋带一样牢牢地绑定在了currentPage和total这两个变量上,这样一来,它们就能实时同步更新啦! 三、动态获取并更新数据 现在,我们已经知道如何在前端界面中显示分页信息了,但是,我们还需要让这个分页组件能够根据我们的数据动态获取并更新信息。这就需要用到JavaScript的数组操作方法和Vue.js的数据绑定特性。 首先,我们需要确保我们的tableData数组能够实时反映后端服务器上的数据变化。这通常是通过监听后端服务器的某些API接口来实现的。例如,在Vue.js中,我们可以通过以下方式来实现这个功能: javascript new Vue({ el: 'app', data: { tableData: [] }, mounted() { this.fetchData(); }, methods: { fetchData() { // 这里是发送请求获取数据的逻辑 fetch('https://api.example.com/data') .then(response => response.json()) .then(data => (this.tableData = data)) } } }) 在这个例子中,我们首先创建了一个新的Vue实例,并定义了一个空的tableData数组作为其数据源。接着,在组件挂载的时候,我们瞅准了mounted这个关键时刻,果断调用了fetchData这个小家伙,让它麻溜地跑去服务器那把我们需要的数据给拽过来。最后,我们将服务器返回的数据赋值给了tableData数组。 四、总结 总的来说,elpagination分页组件提供了一种方便的方式来处理大量数据。嘿,你知道吗?借助Vue.js那个超酷的数据绑定功能,咱们就能轻轻松松地让分页信息实现同步更新,就像魔法一样实时展现出来!另外,我们还能巧妙地运用JavaScript里面的数组处理技巧,让咱们的应用能够更灵敏地应对用户的各种操作,这样一来,就能带给用户更加棒的使用感受啦!
2023-07-21 09:36:26
537
幽谷听泉-t
Material UI
Material UI Switch 开关组件状态更新延迟 在开发过程中,我们常常会遇到这样的情况:当我们在页面中切换一个开关组件的状态时,却发现这个状态并没有立即生效,而是需要等待一段时间才能看到变化。哎,你有没有发现个怪事儿?这Material UI里的Switch开关组件咋会有状态更新滞后的问题呢?来,咱俩一起揭开这个谜团,深入研究下到底为啥会这样。 1. 简单介绍 首先,我们需要了解一下什么是 Switch 开关组件。在 Material UI 中,Switch 开关组件是一种可以将选项设置为 "on" 或 "off" 的交互式控件。它通常用于替代复选框或单选按钮等传统类型的控件。 2. 延迟的原因 那么,为什么我们在切换 Switch 开关组件的状态时会出现延迟呢?这主要是因为 Material UI 在处理用户交互时使用了一种称为 "debounce" 的策略。 2.1 debounce 策略 简单来说,"debounce" 是一种防止函数过度调用的技术。当一个事情老是发生个不停,如果我们每次都巴巴地跑去执行对应的函数,那这函数就会被疯狂call起来,这样一来,系统资源就像流水一样哗哗流走,消耗得可厉害了。用上 debounce 这个神器,我们就能让函数变得乖巧起来,在一段时间内,它只执行一次,就一次,这样一来,咱们就能轻轻松松解决函数被频繁调用到“疯狂”的问题啦! 在 Material UI 中,当我们切换 Switch 开关组件的状态时,这个操作会被转换成一个函数,并且这个函数会被添加到一个队列中。然后,Material UI 就会对这个队列中的所有函数进行批量处理。换句话说,它会先耐心地等一小会儿,这个“一会儿”通常是指300毫秒。然后,它再一股脑儿把队列里堆积的所有函数都执行完毕,就像我们一口气把所有任务都解决掉那样。这就解释了为啥我们在拨动 Switch 开关时,会感觉到那么一丢丢延迟的现象。 3. 如何解决 了解了问题的原因之后,我们就能够找到相应的解决方案了。总的来说,有以下几种方法可以用来解决 Switch 开关组件的状态更新延迟问题: 3.1 不使用 debounce 如果我们的应用程序不需要过于复杂的响应逻辑,或者我们对性能的要求不高,那么我们可以选择不使用 debounce。这样一来,每当用户拨动 Switch 开关组件换个状态时,咱们就能立马触发相应的函数响应,这样一来,延迟什么的就彻底说拜拜啦! jsx import { Switch } from '@material-ui/core'; const MyComponent = () => { const [isOn, setIsOn] = React.useState(false); const handleToggle = (event) => { setIsOn(!isOn); }; return ( ); }; 在这个例子中,每当用户切换 Switch 开关组件的状态时,handleToggle 函数就会立即被触发,并且 isOn 的值也会立即被更新。 3.2 调整 debounce 时间 如果我们确实需要使用 debounce,但是又不想让它造成太大的延迟,那么我们可以调整 debounce 的时间。在使用Material UI时,我们可以拽一个叫unstable DebounceInput的宝贝进来,它会带个debounce函数作为礼物。然后,咱们可以根据实际需要,像调校咖啡机那样灵活调整这个函数的参数,让它恰到好处地工作。 jsx import { Switch } from '@material-ui/core'; import unstable_DebounceInput from '@material-ui/unstyled/DebounceInput'; const MyComponent = () => { const [isOn, setIsOn] = React.useState(false); const handleToggle = (event) => { setIsOn(!isOn); }; return ( value={isOn} onValueChange={(value) => setIsOn(value)} msDelay={50} > ); }; 在这个例子中,我们将 debounce 的时间设置为了 50 毫秒,这意味着每次用户切换 Switch 开关组件的状态时,对应的函数只会被延迟 50 毫秒就被执行。 3.3 使用其他库 最后,如果我们无法接受 Material UI 提供的 debounce 处理方案,那么我们可以考虑使用其他的库来替代。比如,我们可以动手用 mobx-state-tree 这个神器来搭建一个超级给力的状态管理器,然后在这个状态管理器里头,给 Switch 开关组件量身定制它的状态变化规律。 总结起来,虽然 Material UI 中 Switch 开关组件的状态更新存在一定的延迟,但是只要我们掌握了相应的解决方案,就完全可以在不影响用户体验的情况下满足各种需求。
2023-06-06 10:37:53
312
落叶归根-t
Element-UI
... Element-UI之elswitch禁用状态详解 一、引言 在构建用户界面时,我们经常需要给某些交互元素添加禁用状态,以指示用户该元素当前不可操作。哎呀,Element-UI这玩意儿,可真是个大功臣啊!它可是基于那个火遍全网的Vue.js框架来的,专门给咱们开发者准备了一大堆超级实用的UI组件。想象一下,你想要什么功能,Element-UI里就有什么,从表单到布局,从按钮到加载动画,应有尽有,就像一个万能工具箱,啥都能搞定!这不,用起来既方便又高效,简直就是程序员的福音嘛!哎呀,你知道吗?elswitch,就是那个开关按钮,它在咱们的界面设计里可常见了!你比如说,你玩的那些APP或者网站,有时候会有一个按钮让你选择“开”还是“关”,对吧?这个按钮就是咱们说的elswitch啦!它主要是用来帮咱们切换不同的功能状态,就像是你想打开某个设置或者关闭某个功能,只需要轻轻一点,就搞定啦!是不是挺方便的?本文将详细介绍如何在elswitch中实现禁用状态,包括原理、步骤和实际代码示例。 二、原理与步骤 实现elswitch的禁用状态主要涉及以下几个步骤: 1. 设置组件属性 通过组件的属性来控制其状态。 2. 使用逻辑判断 根据应用逻辑判断是否启用或禁用开关。 3. CSS样式调整 通过CSS来改变禁用状态下的视觉效果。 三、代码实现 下面,我们将通过一个具体的示例来展示如何在elswitch中实现禁用状态。 html 这段代码展示了如何通过v-model来绑定elswitch的状态,并通过:disabled属性来控制其是否可操作。哎呀,你懂的,当isDisabled这个开关打到'真'的时候,elswitch就彻底不能用了,就像手里的遥控器突然没电了一样。 四、禁用状态的CSS调整 为了使禁用状态更加直观,我们可以自定义CSS样式来改变开关的颜色和外观。以下是一个简单的CSS示例: css / 为禁用状态的elswitch添加样式 / .el-switch__core { background-color: ccc; } .el-switch__track { background-color: ddd; } 这个CSS代码块为禁用状态下的elswitch添加了灰色背景色,使得用户可以清楚地识别出当前开关处于禁用状态。 五、逻辑判断与应用 在实际应用中,我们可能需要根据不同的条件来动态改变开关的禁用状态。例如,根据用户的权限或者系统状态来决定是否允许操作。这里,我们可以使用Vue的计算属性或方法来进行逻辑判断: javascript computed: { isDisabled() { // 假设当用户权限低于某个值时不启用开关 if (this.userPermission < 5) { return true; } return false; } }, 六、小结 通过上述步骤和代码示例,我们不仅能够实现elswitch的禁用状态,还能根据应用需求动态调整开关的可用性。这不仅提高了用户体验,也增强了界面的灵活性。嘿,兄弟!你得明白,在真正做开发的时候,灵活运用和调整这些功能特性,可是一把打造既高效又让人心情愉悦的用户界面的神器!别死板地套用规则,要根据实际业务需求来,这样你的作品才能既实用又吸引人!记得,创新与适应性并重,这样才能在设计界站稳脚跟,赢得用户的青睐!
2024-10-08 16:19:00
48
百转千回
站内搜索
用于搜索本网站内部文章,支持栏目切换。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
cd -
- 在最近访问过的两个目录之间快速切换。
推荐内容
推荐本栏目内的其它文章,看看还有哪些文章让你感兴趣。
2023-04-28
2023-08-09
2023-06-18
2023-04-14
2023-02-18
2023-04-17
2024-01-11
2023-10-03
2023-09-09
2023-06-13
2023-08-07
2023-03-11
历史内容
快速导航到对应月份的历史文章列表。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"