首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用基于组件设计方法

因此,我们将自己团队定义基于组件设计流程与大家分享,当然其中借鉴了不少优秀设计想法。 什么是基于组件设计? 实质上,基于组件设计是将UI分解成更小,命名清晰且更易于管理组件。...这些组件被分为以下六个部分。 一致性 这六个部分中第一个要讲就是一致性,在这里我们定义了项目的核心品牌元素。字体,排版,主要和次要颜色都经过精心指定。之后,这些将在整个项目中使用。 ?...响应目标与客户端事先达成一致,以确保每个组件都是相应设计。 组合 我们工作再进一规模,就到了第四部分:组合。组合是包含多个不同组件,它们定义了内部组件行为方式。...下面是一个简易单列布局例子,只定义了组合组件间距,标题以及组件内容循环使用! ? 布局 第五大部分布局是更抽象设计原则集合。这里定义了间距,栅格和包装器元素数量。...通过这样定义,其他设计者可以轻松地进入项目并使用现有的样式规范。 ? 页面 最后一个部分是项目的实际页面。每个页面由各种组合和组件排列组成。 所有超出预期东西都是在页面这个层级中定义

1.6K60
您找到你想要的搜索结果了吗?
是的
没有找到

彻底搞清楚vue3defineExpose宏是如何暴露方法给组件使用

前言 众所周知,当子组件使用setup后,组件就不能像vue2那样直接就可以访问子组件属性和方法。这个时候就需要在子组件使用defineExpose宏函数来指定想要暴露出去属性和方法。...这篇文章来讲讲defineExpose宏函数是如何暴露出去这些属性和方法给组件使用。注:本文中使用vue版本为3.4.19。...组件访问子组件validate方法 在vue3中想要访问子组件需要使用特殊 ref attribute,在我们这个例子中就是使用。...这样使用后就可以使用child变量访问子组件,其实在这里child变量值就是一个名为getExposeProxy函数返回值(后面的文章中会去详细讲解ref attribute是如何访问子组件)。...组件使用ref访问子组件validate方法,也就是访问child.value.validate。

50010

学姐叫我看 CSS 新出容器查询,然后把公共组件重构成响应式

在前端开发中经常需要按不同屏幕尺寸来进设计达到PC和移动端响应式。我们一般使用CSS媒体查询来检测视口宽度或高度,然后根据该模式改变设计。 这就是在过去10年中设计Web布局方式。...第二种情况下(Case 2)也是一样问题 如果使用容器查询,我们可以通过查询组件来决定如何显示特定组件来解决这些问题。考虑下图,展示了我们如何使用容器查询来修复这个问题。...这样的话,如果我们把思路转向组件组件呢?换句话说,如果我们查询组件,并根据组件宽度或高度来决定组件应该是什么样子呢?我们来看下容器查询概念。 什么是容器查询 首先,让我定义容器。...不仅如此,我们还可能有一个组件变体,应该只显示在特定上下文中。例如,事件列表页面。在这种情况下,清楚在何处使用此变体是很重要。 问题是,如何告诉设计师应该在哪里使用这些组件。...与开发人员沟通 良好沟通是项目成功重要因素。作为一名设计人员,我们应该提供关于应该在何处使用组件变体指导。它可以是一个完整页面设计,也可以是一个显示如何使用每个组件简单图。

2.2K30

日常使用 Cache 组件来看看 Google 大牛们是如何设计

前言 Google 出 Guava 是 Java 核心增强库,应用非常广泛。 我平时用也挺频繁,这次就借助日常使用 Cache 组件来看看 Google 大牛们是如何设计。...缓存之所以可以提高性能是因为读取效率很高,就像是 CPU L1、L2、L3 缓存一样,级别越高相应读取速度也会越快。...然后在每次消费时候调用 checkAlert() 方法进行校验,这样就可以达到上文需求。 我们来设想下 Guava 它是如何实现过期自动清除数据,并且是可以按照 LRU 这样方式清除。...事件回调 事件回调其实是一种常见设计模式,比如之前讲过 Netty 就使用了这样设计。 这里采用一个 demo,试下如下功能: Caller 向 Notifier 提问。...那么 Guava 是如何实现呢?

28530

深入学习下 CSS 间距相关知识

使用 :not 选择器之前无法覆盖。 如果设计有多于一列,它将不起作用,见下图。 关于解决方案 #2,没有 CSS 特异性问题。 但是,仅适用于一个列堆栈。...或者,当垂直堆叠时,这将如何在移动设备上工作? 很多很多复杂性。 使用抽象组件 上述问题一个解决方案是拥有抽象组件,目的是托管其他组件。...让我们假设一个部分需要从左边算起 24px 边距,考虑到这些限制: Margin 不能直接用于组件,因为它是一个已经构建设计系统。 应该是灵活,间距可能在 X 页面上,但不在 Y 页面上。...对于大型设计系统,不断为组件添加边距是不可扩展。这最终将导致令人毛骨悚然代码。 间隔组件挑战 现在你已经了解了间隔组件概念,让我们深入了解使用它们时一些预期挑战。...以下是我想到一些问题: 间隔组件如何组件中获取其宽度或高度?它将如何在水平和垂直布局中工作?例如:堆栈内间隔符与添加左侧空间间隔符。

13.4K40

译|CSS中间距,前端开发中各种设置间距优点缺点及实例

使用 :not 选择器之前不可能覆盖。 万一设计中有不止一列,它将无法正常工作。参见下图。 ? 关于解决方案2,没有CSS特异性问题。但是,只能处理一个列栈。...Card组件 Oh,如果我想把所有细节Card组件间距都写进去的话,最后可能会出现书本上内容。我就突出一个大概模式,看看间距应该如何应用。 ? 你能想到此卡片在哪里使用间距吗?参见下图。 ?...使用抽象组件 解决上述问题一种方法是使用抽象组件,其目标是托管其他组件,就像Max Stoiber所说那样,这是将管理边距责任移到了元素上,让我们以这种思维方式重新思考以前用例。 ?...对于大型设计系统,不断向组件添加margin是不可伸缩。这将最终导致一个令人毛骨悚然代码。 间隔组件挑战 现在你了解了间隔组件概念,让我们深入研究使用它们时遇到一些挑战。...这是我想到一些问题: 间隔组件如何级内部取其宽度或高度?在水平布局和垂直布局中,它将如何工作?

11.9K10

宝, 来学习一下CSS中宽高比,让 h5 开发更想你夜!

现在,让我们想象一下,这个盒子里有一张重要图片,我们关心所有细节。 请注意,无论大小如何,图像细节都被保留。...请考虑 注意右边图片,宽度÷高度值是 1.02,这不是原来长宽比(1.33或4:3)。 你可能在想,如何得出4:3这个数值?嗯,这被称为最接近正常长宽比,有一些工具可以帮助我们找到。...在进行UI设计时,强烈建议你确切地知道你所使用图像宽高比是多少。使用这个网址可以帮我们快速计算。 网址地址:http://lawlesscreation.github......在深入了解原生方式之前,我们先首先解释一下好老方法。 当一个元素有一个垂直百分比padding时,它将基于级宽度。请看下图。...另外,图片是绝对定位,它有元素全部宽度和高度,有object-fit: cover,用于上传不同大小图片情况。请看下面的动图。 请注意,卡片大小变化和缩略图长宽比没有受到影响。

1.4K30

CSS容器查询终于来了

在这节课中,我们介绍一下容器查询是如何工作如何使用它们,以及语法是什么样子,并分享一些现实生活中例子和用例。...简介 在设计一个组件时,我们需要适配不同变化,并根据CSS类或视口大小来改变它们。这对于我们开发来说不是很理想,会迫使我们根据变化类或视口尺寸来写CSS。...通过容器查询,我们可以简单地编写响应级或容器宽度CSS。请看下图: 图片 注意到在媒体查询中,我们是如何根据视口或屏幕宽度来查询一个组件。在容器查询中,同样情况发生在级上。...通过 container-type 属性查询一个组件与最接近关系,该类有一个定义包含物。 我们过去在媒体查询中写CSS方式,但只是针对组件层面。...容器查询语法 要根据一个组件级宽度查询,我们需要使用 container-type 属性。

41510

丢人啊,工作 10 年了,才知道用这种方式实现 CSS 换肤

旧版本 Context 仅在使用 contextTypes 和 getChildContext API 组件中可用。因此删除对现在项目应该只会造成很小影响。...✓context 学习主要分为如下三个部分 一、 如何创建 context 二、 顶层组件如何传递数据 三、 子组件如何获取数据 一、如何创建 context 我们可以使用 createContext...createContext 执行之后返回值,就是我们需要 context。 二、如何传递 context 返回 context 通常是一系列组件顶层组件。...,我们使用刚才创建 context 作为级标签,把子组件包起来。...✓value 可以是任何类型,你可以根据自己项目需要设计合适数据类型。 三、如何获取 context 中值 在任意被包裹组件中,我们可以使用 use 来获取 context 中值。

8010

CSS 中你需要知道 auto 一切!

当一个元素宽度值为auto时,包含margin、padding和border,不会变得比它元素大。...当我们有一个元素应该在元素内部水平和垂直居中时,我们可能会倾向于使用translateX或translateY。 我们可以使用下面方法让具有绝对定位元素居中: 设置宽度和高度。...在 Chrome 窗口中,滚动条总是显示出来,这是不正确和令人困惑行为。 通过使用auto关键字,我们可以确保滚动条不会显示,除非内容高度大于容器。 根据MDN: 取决于用户代理。...这是一个更经得起时间考验解决方案。 卡片组件 你可能有一个card组件,其左上角有一个操作,它可能仅用于装饰,也可能是一个有用操作。不管是什么,你都应该考虑到它是双向。 ?...模态设计 ? 在进行模态设计时,重要是要考虑内容高度很大时会发生情况。

5.1K30

Padding、Row、Column、Expanded、Stack、AspectRatio、Card、Wrap等布局组件初体验

如何自定义一个组件 自定义一个组件无非就是三步: 实现build方法来定义组件样式和布局; 声明需要传入相关属性; 实现构造方法 下面是自定义一个名为IconContainer组件: class...此外,我们也可以使用Expanded组件实现宽度或者高度自适应。...其他 可以使用SizedBox组件来定义组件间隔。...Card Card是卡片组件块,内容可以由大多数类型Widget构成。Card具有圆角和阴影,这让看起来具有立体感。...图片圆角,我们可以使用ClipOval组件,也可以使用该例中CircleAvator组件。 可以使用AspectRatio组件来实现组件固定宽高比。

72820

2023年即将推出CSS特性对你影响大不大?

使用 :has() 选择器可以访问元素、子元素,甚至兄弟元素 例如:带有“⭐️”元素项目会应用灰色背景,而带有选中复选框项目会应用蓝色背景。...Style Queries 样式查询 容器查询规范 允许查询容器样式值。目前在 Chrome 111 中部分实现,可以在其中使用 CSS 自定义属性来应用容器样式。...background: gold; } } nth-of nth-of 是更加高级 nth-child 语法,提供了一个新关键字(“of”),允许使用现有的 An+B 语法,并在其中搜索更具体子集...是滚动驱动动画,允许您根据滚动容器滚动位置控制动画播放。...这些函数现在在所有现代浏览器中都是稳定,并使您能够在Web平台上创建更有机布局。一个很好例子是这个径向菜单布局,现在可以使用sin()和cos()函数进行设计和动画。

17430

整洁架构之CSS

所以我们不如通过解决某个具体样式问题,来审视样式代码应该如何编写和组织 下图是一个非常简单 popup 组件,我们会以样式开发过程串起整篇内容。...元素依赖 上一节中我们开发完毕组件通常会在页面上被多处引用,但总存在个别场景需要你对组件稍作修改才得以适配。...从表面上看,这种行为只是将样式(尺寸)从一个组件转移到另一个组件(容器)上,但却从根本上解决了我们上面提到元素依赖困恼。...任何想使用 popup 其他组件,不用再设法关心 popup 组件尺寸是如何实现只需要关自己。 进一步从深层次上说,消灭了依赖。...在编程领域里面唯一不变就是变化本身,无论在敲键盘之前你面向对象设计多么准确,对组件拆分多么恰当,任何业务上变化都有可能让你所有的设计推倒重来。

37510

防御式CSS是什么?这几点属性重点防御!

这是另一回事,但尽量使用 flex-wrap 来避免意外布局行为(在我们例子中,是水平滚动)。 2.间距 我们开发者需要考虑不同内容长度。这意味着,间距应该添加到组件中,即使看起来不需要。...防止图像被拉伸或压缩 在无法控制图片高宽比情况下,如果用户上传图片与高宽比不符,最好提前考虑并提供解决方案。 在下面的例子中,我们有一个带有照片的卡片组件看起来不错。...这种方法可以在变量可能失败情况下使用。 7.使用固定宽度或高度 破坏布局常见情况之一是对一个有不同长度内容元素使用固定宽度或高度。...在我看到这个例子中,开发者给二级导航添加了 position: sticky,这样它就可以粘在底部了。 然而,如果浏览器高度较小,bug 就来了。注意这两个导航是如何重叠。...对此有不同解决方案: margin flexbox gap(谨慎使用) padding(可应用于每个子元素元素) 增加空元素,作为间隔。 为了简单起见,我使用 gap。

4.3K30

Blazor学习之旅(5)数据绑定

(双向绑定) 在有些场景中,组件中嵌套了子组件,我们希望组件变化能够同步更新到子组件,同理,子组件变化能够同步更新组件中。...通常来说,这种在组件和子组件之间数据绑定 也叫做 双向绑定。 同时,我们也注意到在Blazor中事件回调(委托)统一类型为:EventCallback。...我们在子组件使用是InvokeAsync()方法也说明它是线程安全。 实现效果: 在一个更真实常见场景中,我们可能希望实现数据实施修改联动更新,类似于下面的例子。...我们可以在多层嵌套组建中绑定组件参数,但是我们必须遵循这类单向数据绑定流程: 更改通知是逐级向上流动 新参数值是逐级向下流动 一个推荐方式是只在组件中存储源数据,以此避免在状态需要更新时容易产生混淆...(2)事件通知是自底向上流动,即子组件ChangeValue方法都会调用EventCallback来向上通知。 最终效果: 小结 本篇,我们了解了数据如何在Blazor中进行数据绑定。

44020

我们为什么不使用CSS框架

Tolinski 进一步演示了不需要支持 IE11 开发人员如何利用 CSS 变量来实现一个自定义设计系统,而其开销明显小于使用框架。...Tolinski 继续说明 CSS 变量是如何帮助设计整个设计系统。...出于演讲需要,Tolinski 将设计系统简化为使该设计独一无二关键组件:颜色、类型、间距、字符、高度和元素(例如卡片或手风琴折叠菜单)。 调色板可以用 CSS 变量进行编码。...设计系统下一个组件是元素,它是有样式组件,例如或。元素应该简单、明确、难以分开且可扩展。...[……] 以变量为基础,只写你需要。 对于任何颜色、字体、间距都要使用变量,这样你整个网站就可以一下子更新或配置。如果所有组件使用自定义属性,则不必为创建独特组件而担心。

42810

作用域插槽(作用域插槽传值)

我会使用如下处理方式,首先将商品卡片写成一个组件Commodity.vue,而在CommodityList.vue中用一个v-for来处理商品卡片列表展示。...$emit像组件传递clickCommodity事件,并携带商品数据,组件即可在onCommodityClick方法中得到数据,进行业务处理,这样便完成了一个基本由子到数据传递。...而这个包含多个运营栏目的vue组件我假设叫ColumnList.vue,在其中通过v-for调用了CommodityList组件。...而CommodityList组件内部应该是改造成这样,slot接收来自组件商品卡片组件,这里面不涉及关于商品组件业务,只关注其他业务和布局即可。...事件不必携带参数,完全符合到子数据流向,而不会发生子组件又给组件反向发数据情况 --> <commodity :modityData="scope.row

51020
领券