今天是组件化的第三篇文章了,前两篇文章主要是以功能为主,分别讲解了 高仿富途牛牛-组件化(一)-支持页签拖拽、增删、小工具和高仿富途牛牛-组件化(二)-磁力吸附,其中也不乏有一些小的bug,不过这些都不是问题。
之前的效果展示只是为了表达意思,界面是真的丑,标准的程序员审美,哈哈哈。今天这篇文章主要是对之前的程序进行了美化,并且进行了一些bug的修改。
效果美化是参照富途牛牛做的,虽然不是一模一样,但是确实比之前的效果好了一些,喜欢的同学可以参考下。
文章最后会把描述显示效果的qss文件贴上,希望可以帮到大家
下面gif图所示,录制的时间比较长,大家可以仔细看下,交互效果完全是参照富途牛牛做的,如有问题,欢迎提出。感谢!!!
欢迎大家提出问题,交互、配色都可以
工具箱是一个很重要的功能。我们的每一个独立组件模板都拥有一个工具箱。
下面我们来分析下工具箱是怎么做的
首先,从界面布局上我们先来说下,工具箱从整体颜色划分上,可以分为两个部分:标题栏和客户区窗口。
标题栏我们是一个窗口的眼睛,通过标题栏的命名我们可以看到这个窗口是干什么的,例如展示图中所示,交易、迷你报价、自选股、今日统计等等。
除此之外,标题栏还提供了一个很灵活的操作:移动窗口,我们可以通过鼠标按下标题栏来进行窗口拖拽
这里我们为了实现这个功能,重写了QWidget的三个接口,实现内容都比较简单,这里就不做说明了,有兴趣的自行百度,网上一大堆。
virtual void mousePressEvent(QMouseEvent *) override;
virtual void mouseMoveEvent(QMouseEvent *) override;
virtual void mouseReleaseEvent(QMouseEvent *) override;
最后也是很重要的一点,那就是标题栏还支持关闭窗口,我们通过点击标题栏上的关闭按钮,可以关闭当前窗口。
对于工具箱来说,我们也可以通过点击组件模板工具栏上的按钮进行关闭
一个窗口除过标题栏以为剩下的就是客户区了,客户端使我们展示展示数据的主要地方,展示效果中的工具箱里边包含了很多工具按钮,包括通用页签下的迷你报价、自选股、短线精灵,和港股页签下的迷你报价、交易、账户等等。
工具箱的客户端我们这里是只有一个QTabWidget类,而通用和港股页签就是QTabWidget下的两个页签。
每个页签里边都是一个QListWidget,我给QListWidget设置了图表展示模式,让他有了一个钟按钮的显示风格。
上边我们主要分析了工具箱的一个组成部分,接下来我将会从更为详细的代码层面说明工具箱的实现过程,其中可能会包含一些qss样式表,全部的样式表将会在文章最后贴出
上边已经提供到两个页签里边的工具按钮都是包含在QListWidget控件中的,下面我直接贴出页签初始化的关键代码
void ToolBoxDialog::InitializeTools(int start, int end, const QString & title)
{
QListWidget * normalWidget = new QListWidget;
normalWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
normalWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
connect(normalWidget, &QListWidget::itemClicked, this, &ToolBoxDialog::ItemClicked);
normalWidget->setDragEnabled(false);
normalWidget->setViewMode(QListView::IconMode);
normalWidget->setResizeMode(QListView::Adjust);
normalWidget->setSpacing(3);
for (int i = start; i < end; ++i)
{
normalWidget->addItem(createItem(toolNames[i], toolTypes[i]));
}
m_pTabWidget->addTab(normalWidget, title);
}
从上边代码可以看出,我们的列表使用了图标(QListView::IconMode)显示模式,并且设置了图标项不可以拖拽。
最后我们使用一个循环构造了很多item,插入到了QListWidget控件中
样式美化代码如下,不了解Qss语法的可以参考qt qss这篇文章,我以前写的,比较详细。
QDialog#ToolBoxDialog QTabWidget::pane { border-top: 1px solid #2B3236; }
QDialog#ToolBoxDialog QTabWidget::tab-bar { top:1px;}
QDialog#ToolBoxDialog QTabBar::tab { background:#1D2224;border-bottom: 1 solid #2B3236; min-width: 20ex; padding: 4px; color:#919AA3; }
QDialog#ToolBoxDialog QTabBar::tab:selected { border-bottom: 1 solid #FF9900; }
QDialog#ToolBoxDialog QTabBar::tab:hover { border-bottom: 1 solid #FFB700; }
QDialog#ToolBoxDialog QTabBar::tab:!selected:!hover { border-bottom: 1 solid #2B3236; }
QDialog#ToolBoxDialog QListView{border:0px solid blue;margin-top:12px;margin-left:12px;outline:none;}
QDialog#ToolBoxDialog QListView::item{padding-top:10px;border:1 solid transparent;}
QDialog#ToolBoxDialog QListView::item:hover{color:#FF9900;background:#6B7276;}
最后也是最重要的一点,item我们是怎么构造的
static QListWidgetItem * createItem(const QString & text, SubWindowNormalType type)
{
QListWidgetItem * item = new QListWidgetItem;
item->setSizeHint(QSize(72, 72));//设置项大小
item->setFlags(item->flags() & ~Qt::ItemIsSelectable);//设置项不可以被选中
item->setText(text);
item->setData(UserType, type);
item->setIcon(QPixmap("./image/mainWindow/tquant-btn_normal.png"));//设置图标
return item;
}
代码比较简单,但是需要特别注意,代码中调用的每一个接口,都是必不可少的。
关于工具栏的实现,我们可以参考高仿富途牛牛-组件化(一)-支持页签拖拽、增删、小工具这篇文章,今天这篇文章我们只讲解怎么美化,虽然美化效果没有很明显,我们还是凑合着看吧。
这里同样也是使用了Qt的动态属性功能,这真是Qt的一个很强大的能力,有了动态属性,我们可以很容易的做出一些交互上比较复杂的效果。
鼠标hover时的文字颜色就是使用了动态属性来实现。仔细看如下qss样式表,当QLabel的Hovered属性为true时(实际上QLabel并没有达到hover,这里我们是模拟了hover行为),我们启用了一种新的文字颜色。
TabButton#tab_Button:hover{border-bottom:1 solid #FFB700;}
TabButton#tab_Button[Selected=true]{border-bottom:1 solid #FF9900;color:#FF9900;}
TabButton#tab_Button QLabel[Hovered=true]{color:#FF9900;}
TabButton#tab_Button QLabel[SelectedColor=true]{color:#FF9900;}
TabButton#tab_Button QToolButton{border:0px;border-image:url(./image/common/titlebar_normal.png) 0 0 0 78;}
TabButton#tab_Button QToolButton:hover{border:0px;border-image:url(./image/common/titlebar_hover.png) 0 0 0 78;}
再看实现代码,当我们的鼠标移入自定义的标签页按钮时,给子控件(文本控件)设置了动态属性,并刷新了界面。
void TabButton::enterEvent(QEvent * event)
{
m_pTitle->setProperty("Hovered", "true");
m_pTitle->style()->unpolish(m_pTitle);
m_pTitle->style()->polish(m_pTitle);
__super::enterEvent(event);
}
自定义的页签按钮,本身是一个QWidget,他内部包含了QLabel文本和QToolButton关闭按钮,为了让QLabel还没有hover的时候,我们给他制造一种hover假象,我们使用了动态属性。
这个组件化demo中使用动态属性的地方其实比较多,这里就不一一例举出来了,说明一个,大家知道有这么会事,自己也学会使用即可
讲完工具箱和组件模板工具栏美化之后,其他界面的美化就比较简单了。
剩下的就是subPanel和小窗口的美化,这里我重点说下小窗口的美化,有一个边框颜色的改变这个地方。
当小窗口获取焦点时,边框是黄色的,失去焦点时边框是灰色的
实现方式如下,这里我重写了窗口获取焦点和失去焦点的接口,并且进行设置了Qt内置的动态属性,然后在qss中对属性进行了样式配置
代码如下
//获取焦点时
void SmallWidget::focusInEvent(QFocusEvent * event)
{
setProperty("SelectedWidget", "true");
style()->unpolish(this);
style()->polish(this);
__super::focusInEvent(event);
}
//失去焦点时
void SmallWidget::focusOutEvent(QFocusEvent * event)
{
setProperty("SelectedWidget", "false");
style()->unpolish(this);
style()->polish(this);
__super::focusOutEvent(event);
}
qss样式如下
QWidget#small_widget_title
{
border-bottom:1 solid #2B5470;background:#292F33;
}
QWidget#SmallWidget
{
border:1 solid #474F57;background:#1D2224;
}
QWidget#SmallWidget[SelectedWidget=true]
{
border:2 solid #FFE100;
}
是不是很简单,哈哈哈哈。
最后我贴出完整的qss样式表,为了显示更多内容,这里我把多余的换行符都去掉了。
QDialog{ border:1px solid #7b8187}
QWidget{ background:#28323f;color:#DDDDDD;}
QWidget#small_widget_title{ border-bottom:1 solid #2B5470;background:#292F33;}
QWidget#SmallWidget{ border:1 solid #474F57;background:#1D2224;}
QWidget#SmallWidget[SelectedWidget=true]{ border:2 solid #FFE100;}
QWidget#DragToolBar{ background:#1D2224;border-bottom:1 solid #2B3236;}
QWidget#ToolBoxTitle{ border-bottom:1 solid #2B5470;background:#292F33;}
QWidget#ToolBoxDialog{ background:#28323F;border:1 solid #474F57;}
TabButton#tab_Button:hover{border-bottom:1 solid #FFB700;}
TabButton#tab_Button[Selected=true]{border-bottom:1 solid #FF9900;color:#FF9900;}
TabButton#tab_Button QLabel[Hovered=true]{color:#FF9900;}
TabButton#tab_Button QLabel[SelectedColor=true]{color:#FF9900;}
TabButton#tab_Button QToolButton{border:0px;border-image:url(./image/common/titlebar_normal.png) 0 0 0 78;}
TabButton#tab_Button QToolButton:hover{border:0px;border-image:url(./image/common/titlebar_hover.png) 0 0 0 78;}
QDialog#ToolBoxDialog QTabWidget::pane { border-top: 1px solid #2B3236; }
QDialog#ToolBoxDialog QTabWidget::tab-bar { top:1px;}
QDialog#ToolBoxDialog QTabBar::tab { background:#1D2224;border-bottom: 1 solid #2B3236; min-width: 20ex; padding: 4px; color:#919AA3; }
QDialog#ToolBoxDialog QTabBar::tab:selected { border-bottom: 1 solid #FF9900; }
QDialog#ToolBoxDialog QTabBar::tab:hover { border-bottom: 1 solid #FFB700; }
QDialog#ToolBoxDialog QTabBar::tab:!selected:!hover { border-bottom: 1 solid #2B3236; }
QDialog#ToolBoxDialog QListView{border:0px solid blue;margin-top:12px;margin-left:12px;outline:none;}
QDialog#ToolBoxDialog QListView::item{padding-top:10px;border:1 solid transparent;}
QDialog#ToolBoxDialog QListView::item:hover{color:#FF9900;background:#6B7276;}
设置外部qss文件的流程如下:
这样是一种比较冷通的设置方式,一旦qss文件比较大,会出现这句代码卡顿的情况。如果想要更好的性能,qss建议还是分开来写,至于怎么合理的拆分qss文件,可以根据自己的需求来拆分
点击领取Qt学习资料+视频教程~「链接」
这里提供我之前使用过的两种方式
拆分的好处我就不多说了,谁用谁知道!!!
话不多说,直接上代码了。
本文是笔者写CSS时常用的套路。不论效果再怎么华丽,万变不离其宗。
之前发的CSS技巧大部分都是依照本文的套路来写的。
有人问我为什么我能想出这么多的动画?笔者阅番百部,对常用的动画技巧了如指掌,同样那些酷炫的网站只要细心观察,也会给笔者带来很多设计上的灵感。
一言以蔽之:只有多欣赏动画,才能写出好的动画。
有时候,我们需要给多个元素添加同一个动画,播放后,不难发现它们会一起运动,一起结束,这样就会显得很平淡无奇。
那么如何将动画变得稍微有趣一点呢?很简单,既然它们都是同一时刻开始运动的,那么让它们不在同一时刻运动不就可以了吗。如何让它们不在同一时刻运动呢?注意到CSS动画有延迟(delay)这一属性。举个栗子,比如有十个元素播放十个动画,将第二个元素的动画播放时间设定为比第一个元素晚0.5秒(也就是将延迟设为0.5秒),其他元素以此类推,这样它们就会错开来,形成一种独特的视觉效果。
这就是所谓的交错动画:通过设置不同的延迟时间,达到动画交错播放的效果。
本demo地址:
https://codepen.io/alphardex/pen/XWWWBmQ
还有一种经常用到的玩法:用JS将句子或单词分割成字母,并给每个字母加上不同延时的动画,同样也很华丽
本demo地址:
https://codepen.io/alphardex/full/KKwvKGY
一般我们都是从第一个元素开始交错的。但如果要从中间元素开始交错的话,就要给当前元素的延时各加上一个值,这个值就是中间元素的下标到当前元素的下标的距离(也就是下标之差的绝对值)与步长的乘积,即:delay + Math.abs(i - middle) * step,其中中间元素的下标middle = letters.filter(e => e !== "").length / 2
本demo地址:
https://codepen.io/alphardex/full/eYYMYXJ
所有有交错特性的动画都在这儿
https://codepen.io/alphardex/pens/tags/?selected_tag=staggered
说到随机性,我们可以实现一种更疯狂的效果:给几百个粒子添加交错动画,并且交错时间随机,位置大小也都是随机。如此一来我们就能用纯CSS模拟出下雪的效果。
又到了白色相簿的季节呢~为什么你写CSS这么熟练啊?
本demo地址:
https://codepen.io/alphardex/full/dyPorwJ
HTML元素的状态是可以动态变化的。举个栗子,当你的鼠标悬浮到一个按钮上时,按钮就会变成“悬浮”状态,这时我们就可以利用伪类:hover来选中这一状态的按钮,并对其样式进行改变。
:hover是笔者最最常用的一个伪类。还有一个很常用的伪类是:nth-child,用于选中元素的某一个子元素。其他的类似:focus、:focus-within等也有一定的使用。
本demo地址:
https://codepen.io/alphardex/pen/pooYKVa
所有:hover的动画都在这儿
https://codepen.io/alphardex/pens/tags/?selected_tag=hover
谁规定按钮只能有一套边框的?利用绝对定位和padding,我们可以给按钮做出3套大小不一的边框来,这样效果更炫了有木有!
本demo地址:
https://codepen.io/alphardex/full/ZEYXomW
简而言之,伪元素就是在原先的元素基础上插入一个额外的元素,而且这个元素不充当HTML的标签,这样就能保持HTML结构的整洁。
什么情况下用伪元素呢?比如实现一根条子划过文本的动画,在这个动画中每个文本都有属于自己的一根条子,那么我们就可以用伪元素为每个文本生成一个条子,而无需特地在HTML标签中加入条子的div(当然,如果条子数量超过了2个,还是用div吧)
本demo地址:
https://codepen.io/alphardex/pen/jOEOEzZ
之前有做过闪光按钮的效果:鼠标悬浮按钮上时一道光从左到右划过去。
笔者就用渐变来模拟那道光,通过transform: translateX()将其平移至右边。
但这样明显不对啊,这光为啥能被看见呢?不应该把它给“挡”起来吗?
于是乎,给按钮加上overflow: hidden,光在按钮外的位置时就被隐藏起来了。
这就是障眼法的力量:)
本demo地址:
https://codepen.io/alphardex/pen/eYYzXBZ
更多障眼法可以看看这个作品,一次性看个够XD
https://codepen.io/alphardex/pen/VwwVLdM
提示:这里最好将input作为label的子元素,这样用户点击label时就能传到input上默认的input太丑怎么办?那就把它先抹掉,用appearance: none或opacity: 0都可以。
然后,利用兄弟选择符~来定制和input相邻的所有元素(+号也行,只不过只能选中最近的元素),例如可以用伪元素生成一个新的方框代替原先的input,利用伪类:checked和动画来表示它被勾选后的状态,本质上还是障眼法哦~
本demo地址:
https://codepen.io/alphardex/full/rNNPQwa
善用某些CSS特性,也可以为你的作品增色不少哦。
PS里的自由变换,各种CSS动画都离不开它。它也可以进行3D变换。
例子就不举了,因为几乎我所有的动画都用到了它。
为盒子添加圆角,经常用来美化按钮等组件。
如果设定为50%则是圆形,也很常用。
调整多个顶点的border-radius可以做出不规则的曲边形状
本demo地址:
https://codepen.io/alphardex/full/abbWOPR
为盒子添加阴影,增加盒子的立体感,如果多层叠加的话会使阴影更加丝滑。
本demo地址:
https://codepen.io/alphardex/full/QWwwwpp
如果给box-shadow的扩张半径设定足够大的值,可以用它来遮住背景,而无需额外的div元素。
本demo地址:
https://codepen.io/alphardex/full/BaaKvVZ
注意到box-shadow还有个inset,用于盒子内部发光。
利用这个特性我们可以在盒子内部的某个范围内设定颜色,做出一个新月形。
再加点动画和滤镜效果,“猩红之月”闪亮登场!
本demo地址:
https://codepen.io/alphardex/full/eYmGEGp
文本阴影,本质上和box-shadow相同,只不过是相对于文本而言,常用于文本发光,也可通过多层叠加来制作霓虹文本和伪3D文本等效果。
本demo地址:
https://codepen.io/alphardex/full/Exxodoq
本demo地址:
https://codepen.io/alphardex/full/rNNwmZz
本demo地址:
https://codepen.io/alphardex/full/QWWavvx
能将背景裁剪成文字的前景色,常用来和color: transparent配合生成渐变文本
本demo地址:
https://codepen.io/alphardex/full/QWwveZG
渐变可以作为背景图片的一种,具有很强的色彩效果,甚至可以用来模拟光
线性渐变是笔者最常用的渐变:
这个作品用到了HTML的dialog标签,渐变背景,动画以及overflow障眼法,细心的你看出来了吗:)
本demo地址:
https://codepen.io/alphardex/full/eYYxzBm
径向渐变笔者没怎么用过,上面例子中Snow的背景就是一个径向渐变。
https://codepen.io/alphardex/full/dyPorwJ
圆锥渐变可以用于制作扇形,因此配合CSS变量笔者制作了一个度量计,也用到了伪元素障眼法。
本demo地址:
https://codepen.io/alphardex/full/BaydVvQ
PS里的滤镜,玩过的都懂,blur最常用
对背景应用滤镜,产生毛玻璃的效果。
本demo地址:
https://codepen.io/alphardex/full/pooQMVp
PS里的混合模式,常用于文本在背景下的特殊效果。
以下利用滤色模式(screen)实现文本视频蒙版效果。
本demo地址:
https://codepen.io/alphardex/full/wvvLYpV
PS里的裁切,可以制作各种不规则形状。如果和动画结合也会相当有意思。
本demo地址:
https://codepen.io/alphardex/full/ZEEBRrq
投影效果,不怎么常用,适合立体感强的作品。
本demo地址:
https://codepen.io/alphardex/full/ExaZgxp
虽然这并不是一个CSS特性,但是它经常用于完成那些CSS所做不到的事情。
那么何时用它呢?当CSS动画中有属性无法从CSS中获取时,自然就会使用到它了。
目前CSS还尚未有获取鼠标位置的API,因此考虑用JS来进行。
通过查阅相关的DOM API,发现在监听鼠标事件的API中,可通过e.clientX和e.clientY来获得鼠标当前的位置。
既然能够获取鼠标的位置,那么跟踪鼠标的位置也就不是什么难事了:通过监听mouseenter和mouseleave事件,来获取鼠标出入一个元素时的位置,并用此坐标来当作鼠标的位移距离,监听mousemove事件,来获取鼠标在元素上移动时的位置,同样地用此坐标来当作鼠标的位移距离,这样一个跟踪鼠标的效果就实现了。
本demo地址:
https://codepen.io/alphardex/full/OJPmQGz
将交错动画和伪类伪元素结合起来写出来的慎重勇者风格的菜单
本demo地址:
https://codepen.io/alphardex/full/ExavZdV
为一名UI设计师,PC端设计也是我们的主要工作职责,尤其在中后台设计、官网设计、网站设计中,我们要熟知所有的web UI组件,今天给大家总结了关于web端UI组件,希望可以帮到你。
一、什么是UI组件
UI 设计组件(UI KIT),直译过来就是用户界面成套元件,是界面设计常用控件或元件,「组」是设计元素的组合方式,「件」由不同的元件组成。
二、组件的优势
1、保证一致性 Consistency
与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。
2、反馈用户 Feedback
控制反馈:通过界面样式和交互动效让用户可以清晰的感知自己的操作;页面反馈:操作后,通过页面元素的变化清晰地展现当前状态。
3、提高效率,减少成本 Efficiency
简化流程:设计简洁直观的操作流程;清晰明确:语言表达清晰且表意明确,让用户快速理解进而作出决策;帮助用户识别:界面简单直白,让用户快速识别而非回忆,减少用户记忆负担。
二、组件详解
1、布局 Layout
A. 顶部-侧边布局-通栏布局,多用于应用型的网站
B. 侧边栏布局,采用侧边栏的页面,多用于展示类网站
2、导航菜单 NavMenu
导航可以解决用户在访问页面时:在哪里,去哪里,怎样去的问题。一般导航分为“侧边栏导航”和“顶部导航”2 种类型。
选择合适的导航可以让用户在产品的使用过程中非常流畅,相反若是不合适就会引起用户操作不适(方向不明确),以下是「侧栏导航」和 「顶部导航」的区别。
A. 侧边栏导航
可将导航栏固定在左侧,提高导航可见性,方便页面之间切换;顶部可放置常用工具,如搜索条、帮助按钮、通知按钮等。适用于中后台的管理型、工具型网站。
顺应了从上至下的正常浏览顺序,方便浏览信息;顶部宽度限制了导航的数量和文本长度。
3、面包屑 Breadcrumb
面包屑,显示当前页面在系统层级结构中的位置,并能向上返回,提供一个有层次的导航结构, 并标明当前位置。
用法指南:
A. 当系统拥有超过两级以上的层级结构时;B. 当需要告知用户『你在哪里』时;C. 当需要向上导航的功能时。
4、按钮 Button
按钮用于开始一个即时操作。
用法指南:
标记了一个操作命令,响应用户点击行为,触发相应的业务逻辑。
在设计中,基本有以下四种按钮类型:
主要按钮:用于主行动点,一个操作区域只能有一个主按钮。
默认按钮:用于没有主次之分的一组行动点。
线性按钮:常用于添加操作。
链接按钮:用于次要或外链的行动点。
以及四种状态属性与上面配合使用。
危险:删除/移动/修改权限等危险操作,一般需要二次确认。
幽灵:用于背景色比较复杂的地方,常用在首页/产品页等展示场景。
禁用:行动点不可用的时候,一般需要文案解释。
加载中:用于异步操作等待反馈的时候,也可以避免多次提交。
5、下拉菜单 Dropdown
将动作或菜单折叠到下拉菜单中。
用法指南:
当页面上的操作命令过多时,用此组件可以收纳操作元素。点击或移入触点,会出现一个下拉菜单。可在列表中进行选择,并执行相应的命令。
6、标签页 Tabs
选项卡切换组件,常用于平级区域大块内容的的收纳和展现。
基础样式
选项卡样式
卡片式
7、分页 Pagination
当数据量过多时,使用分页分解数据。
8、单选框 Radio
在一组备选项中进行单选
9、复选框 Checkbox
一组备选项中进行多选
10、输入框
通过鼠标或键盘输入内容,是最基础的表单域的包装。
11、计数器/数字输入框 InputNumber
通过鼠标或键盘,输入范围内的数值。
12、选择器 Select
当选项过多时,使用下拉菜单展示并选择内容。
13、级联选择器 Cascader
当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择。
用法指南:
A. 需要从一组相关联的数据集合进行选择,例如省市区,公司层级,事物分类等。B. 从一个较大的数据集合中进行选择时,用多级分类进行分隔,方便选择。C. 比起 Select 组件,可以在同一个浮层中完成选择,有较好的体验。
14、日期选择器 DatePicker
用于选择或输入日期
15、时间选择器 TimePicker
输入或选择日期的控件,当用户需要输入一个日期,可以点击标准输入框,弹出日期面板进行选择。
16、日期时间选择器 DateTimePicker
在同一个选择器里选择日期和时间
17、颜色选择器 ColorPicker
用于颜色选择
18、开关 Switch
表示两种相互对立的状态间的切换,多用于触发「开/关」。
19、滑块 Slider
通过拖动滑块在一个固定区间内进行选择
20、上传 Upload
通过点击或者拖拽上传文件
用法指南:
A. 上传是将信息(网页、文字、图片、视频等)通过网页或者上传工具发布到远程服务器上的过程。
B. 当需要上传一个或一些文件时。
C. 当需要展现上传的进度时。
D. 当需要使用拖拽交互时。
21、评分 Rate
评分组件
22、穿梭框 Transfer
双栏穿梭选择框。
用法指南:
A. 需要在多个可选项中进行多选时。B. 比起 Select 和 TreeSelect,穿梭框占据更大的空间,可以展示可选项的更多信息。
穿梭选择框用直观的方式在两栏中移动元素,完成选择行为。
23、表单 Form
由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据
用法指南:
A. 用于创建一个实体或收集信息。B. 需要对输入的数据类型进行校验时。
24、表格 Table
用于展示多条结构类似的数据,可对数据进行排序、筛选、对比或其他自定义操作。
25、标签 Tag
进行标记和分类
26、进度条 Progress
用于展示操作进度,告知用户当前状态和预期。
用法指南:
在操作需要较长时间才能完成时,为用户显示该操作的当前进度和状态。
27、树选择 TreeSelect
树型选择控件,用清晰的层级结构展示信息,可展开或折叠。
28、页头 PageHeader
页头位于页容器中,页容器顶部,起到了内容概览和引导页级操作的作用,包括由面包屑、标题、页面内容简介、页面级操作等、页面级导航组成。
29、标记/徽标数 Badge
出现在按钮、图标旁的数字或状态标记
用法指南:
一般出现在通知图标或头像的右上角,用于显示需要处理的消息条数,通过醒目视觉形式吸引用户处理。
30、头像 Avatar
用图标、图片或者字符的形式展示用户或事物信息。
31、折叠面板 Collapse
可以折叠/展开的内容区域。
32、步骤条 Steps
引导用户按照流程完成任务的分步导航条,可根据实际应用场景设定步骤,步骤不得少于 2 步。
33、警告提示 Alert
警告提示,展现需要关注的信息。
用法指南:
A. 当某个页面需要向用户显示警告的信息时。B. 非浮层的静态展现形式,始终展现,不会自动消失,用户可以点击关闭。
34、加载 Loading
加载数据时显示动效
35、加载中 Spin
用于页面和区块的加载中状态。
用法指南:
页面局部处于等待异步数据或正在渲染过程时,合适的加载动效会有效缓解用户的焦虑。
36、骨架图 Spin
在需要等待加载内容的位置提供一个占位图形组合。
用法指南:
A. 网络较慢,需要长时间等待加载处理的情况下。B. 图文信息内容较多的列表/卡片中。C. 只在第一次加载数据的时候使用。D. 可以被 Spin 完全代替,但是在可用的场景下可以比 Spin 提供更好的视觉效果和用户体验。
37、消息提示 Message
常用于主动操作后的反馈提示。与 Notification 的区别是后者更多用于系统级通知的被动提醒。
38、弹框 Messagebox
模拟系统的消息提示框而实现的一套模态对话框组件,用于消息提示、确认消息和提交内容。
39、通知 Notification
悬浮出现在页面角落,显示全局的通知提醒消息。
40、对话框 Dialog
在保留当前页面状态的情况下,告知用户并承载相关操作。
41、文字提示 Tooltip
常用于展示鼠标 hover 时的提示信息。
42、气泡卡片/弹出框 Popver
点击/鼠标移入元素,弹出气泡式的卡片浮层。
43、气泡确认框 Popconfirm
点击元素,弹出气泡式的确认框。
44、卡片 Card
将信息聚合在卡片容器中展示。
45、走马灯 Carousel
在有限空间内,循环播放同一类型的图片、文字等内容
46、时间轴 Timeline
可视化地呈现时间流信息。
47、分割线 Divider
区隔内容的分割线
48、日历 Calendar
按照日历形式展示数据的容器。
49、陈述列表 Descriptions
成组展示多个只读字段。常见于详情页的信息展示。
50、回到顶部 Backtop
返回页面顶部的操作按钮
用法指南:
A. 当页面内容区域比较长时;
B. 当用户需要频繁返回顶部查看相关内容时。
51、结果 Result
用于反馈一系列操作任务的处理结果。
52、抽屉 Drawer
屏幕边缘滑出的浮层面板。
抽屉从父窗体边缘滑入,覆盖住部分父窗体内容。用户在抽屉内操作时不必离开当前任务,操作完成后,可以平滑地回到到原任务。
53、空状态 Empty
空状态时的展示占位图,当目前没有数据时,用于显式的用户提示。
54、列表 list
最基础的列表展示,可承载文字、列表、图片、段落,常用于后台数据展示页面
写在最后
工欲善其事,必先利其器,充分了解每个组件所具备的功能和设计用法,能让你的设计效率提升,看完这篇文章,希望你可以在设计网站、中后后台界面时,不会再被各种各样错综繁杂的组件弄得晕头转向,可以帮助你更好的选择所需要的组件。
请私信我回复“666”,为严哥打Call~,还有更多惊喜哦~
.............................................................
UI严选—越努力,越幸运
*请认真填写需求信息,我们会在24小时内与您取得联系。