首页 文章 精选 留言 我的

精选列表

搜索[前端设计],共10009篇文章
优秀的个人博客,低调大师

Angular 11.2.9 发布,Web 前端框架

Angular 11.2.9现已发布,具体更新内容如下: Bug 修复 bazel:在tslib上添加缺少的依赖项(#41480)(8d005e5),closes11.2.8/src/api-extractor/index.js#L20 compiler-cli:允许继续分析无效的样式 url(#41403)(#41489)(07131fa) compiler-cli:修复从非相对扩展较少的 TypeScript 配置文件中扩展 angularCompilerOptions 的问题(#41349)(e0165fd),closes#41343 Features bazel:允许在ng_module规则中设置compilationMode(#41418)(e6da38a) Performance Improvements core:在运行时执行的用户代码周围添加 private hooks(#41421)(94af9d9) language-service:将性能跟踪添加到 LanguageService(#41401)(7b0a800) 详情可查看:https://github.com/angular/angular/blob/master/CHANGELOG.md#1129-2021-04-07

优秀的个人博客,低调大师

Bootstrap 4.6.0 发布,前端开发框架

Bootstrap 4.6.0 发布了。 v4.6.0 最大的变化是官方对开发环境进行了大的调整以匹配即将正式发布的 v5 版本。官方表示,目前 v4.x 版本的文档改为基于Hugo框架提供支持,与之前使用的静态站点生成框架Jekyll 相比,这意味着 v4.x 不再依赖 Ruby,主要版本之间的可维护性得到改善,开发速度更快,构建时间也非常快。 Bootstrap v4.6.0 主要更新内容包括: 工具提示和弹出窗口可以通过customClass选项具有自定义分类。 添加了用于在移动设备上滚动扩展的导航栏内容的新类.navbar-nav-scroll。 为了改善访问能力,prefers-reduced-motion启用微调器时现在会放慢速度。 v4.x 文档现在建立在 Hugo 框架上,以便于维护和从 v5.x 回溯。 使background-color,.dropdown-item变暗以改善悬停状态的对比度,同时加强了被禁用的.dropdown-item的颜色。 改进了表单验证工具提示的对齐方式。 文件输入不再超出其容器范围。 更多更新信息请查看:https://github.com/twbs/bootstrap/releases/tag/v4.6.0 官方透露,Bootstrap v5 的第二个 Beta 版也即将发布,目前团队正在努力解决 Popover 2 更新中的一些问题,该更新花费的时间比预期的要长,这会影响项目的下拉菜单,弹出窗口和工具提示。解决了一些主要问题后,团队就将发布下一个测试版。

优秀的个人博客,低调大师

Flutter 快速上手,秒变大前端

Flutter是什么 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。简单来说,Flutter是一款移动应用程序SDK,包含框架、控件和一些工具,可以用一套代码同时构建Android和iOS应用,并且性能可以达到原生应用一样的性能。Flutter简介 配置开发环境 Flutter开发可以在macOS,Linux或Windows上完成。虽然您可以在Flutter工具链中使用任何编辑器,但IntelliJ IDEA,Android Studio和Visual Studio Code的IDE插件可以简化开发工作。 下载flutter SDK。地址 将flutter的bin目录添加到path中。 执行flutter doctor命令,他会安装flutter框架,包括dart,而且提示你任何其他需要安装的依赖。 安装其他依赖。 在IDE中安装flutter插件。 体验 ▐ Android Studio (为Flutter提供完整的IDE体验) 创建应用 选择 File>New Flutter Project 选择 Flutter application 作为 project 类型, 然后点击 Next 输入项目名称 (如 myapp), 然后点击 Next 点击 Finish 等待Android Studio安装SDK并创建项目. 在项目目录中,您应用程序的代码位于 lib/main.dart. 运行应用程序 定位到Android Studio 工具栏: 在 target selector 中, 选择一个运行该应用的Android设备. 如果没有列出可用,请选择 Tools>Android>AVD Manager 并在那里创建一个 在工具栏中点击 Run图标, 或者调用菜单项 Run > Run. ▐ VS Code(轻量级编辑器,支持Flutter运行和调试) 创建应用 启动 VS Code. 调用 View>Command Palette… 输入 ‘flutter’, 然后选择 ‘Flutter: New Project’ action 输入 Project 名称 (如myapp), 然后按回车键 指定放置项目的位置,然后按蓝色的确定按钮 等待项目创建继续,并显示main.dart文件 在项目目录中,您应用程序的代码位于 lib/main.dart. 运行应用程序 确保在VS Code的右下角选择了目标设备 按 F5 键或调用Debug>Start Debugging 等待应用程序启动 ▐ Terminal + 编辑器 创建应用 使用 flutter create 命令创建一个project: $ flutter create myapp $ cd myapp 运行应用程序 检查Android设备是否在运行。如果没有显示, 请参照 设置。 $ flutter devices 运行 flutter run 命令来运行应用程序: $ flutter run 如果一切正常, 您应该在您的设备或模拟器上会看到启动的应用程序: ## 项目结构 ┬ └ projectname ┬ ├ android - Android部分的工程文件 ├ build - 项目的构建输出目录 ├ ios - iOS部分的工程文件 ├ lib - 项目中的Dart源文件 ┬ └ src - 包含其他源文件 └ main.dart - 自动生成的项目入口文件,类似RN的index.js文件 ├ test - 测试相关文件 └ pubspec.yaml - 项目依赖配置文件类似于RN的 package.json 如何添加Flutter项目所需的依赖? 在Android中,你可以在Gradle文件来添加依赖项; 在 iOS 中,通常把依赖添加到 Podfile 中; 在RN中,通常是由package.json来管理项目依赖; Flutter 使用 Dart 构建系统和 Pub 包管理器来处理依赖。这些工具将Android 和 iOS native 包装应用程序的构建委派给相应的构建系统。 dependencies: flutter: sdk: flutter google_sign_in: ^3.0.3 在Flutter中,虽然在Flutter项目中的Android文件夹下有Gradle文件,但只有在添加平台相关所需的依赖关系时才使用这些文件。否则,应该使用pubspec.yaml来声明用于Flutter的外部依赖项。 iOS也是一样,如果你的 Flutter 工程中的 iOS 文件夹中有 Podfile,请仅在添加iOS平台相关的依赖时使用它。否则,应该使用pubspec.yaml来声明用于Flutter的外部依赖项。 如何归档图片资源以及如何处理不同分辨率 虽然Android将resources 和 assets 区别对待,但在Flutter中它们都会被作为assets处理, 所有存在于Android上res/drawable- *文件夹中的资源都放在Flutter的assets文件夹中。 与Android类似,iOS 同样将 images 和 assets 作为不同的东西,而 Flutter 中只有 assets。被放到 iOS 中 Images.xcasset 文件夹下的资源在 Flutter 中被放到了 assets 文件夹中。 在Flutter中assets可以是任意类型的文件,而不仅仅是图片。例如,你可以把 json 文件放置到 my-assets 文件夹中。 my-assets/data.json 记得在 pubspec.yaml 文件中声明 assets: assets: - my-assets/data.json 然后在代码中我们可以通过 AssetBundle 来访问它: import 'dart:async' show Future; import 'package:flutter/services.dart' show rootBundle; Future<String> loadAsset() async { return await rootBundle.loadString('my-assets/data.json'); } 对于图片,Flutter 像 iOS 一样,遵循了一个简单的基于像素密度的格式。Image assets 可能是 1.0x 2.0x 3.0x 或是其他的任何倍数。这个 devicePixelRatio 表示了物理像素到单个逻辑像素的比率。 Android不同像素密度的图片和Flutter的像素比率的对应关系 ldpi 0.75x mdpi 1.0x hdpi 1.5x xhdpi 2.0x xxhdpi 3.0x xxxhdpi 4.0x 举个例子,要把一个名为 my_icon.png 的图片放到 Flutter 工程中,你可能想要把它放到images文件夹中。把图片(1.0x)放置到 images 文件夹中,并把其它分辨率的图片放在对应的子文件夹中,并接上合适的比例系数,就像这样: images/my_icon.png // Base: 1.0x image images/2.0x/my_icon.png // 2.0x image images/3.0x/my_icon.png // 3.0x image 接下来就可以在pubspec.yaml文件中这样声明这个图片资源: assets: - images/my_icon.png 现在,我们就可以借助AssetImage来访问它了。 return AssetImage("images/a_dot_burr.jpeg"); 也可通过 Image widget 直接使用: @override Widget build(BuildContext context) { return Image.asset("images/my_image.png"); } 如何归档strings资源,以及如何处理不同语言? 不像 iOS 拥有一个 Localizable.strings 文件,Flutter目前没有专门的字符串资源系统。目前,最佳做法是将strings资源作为静态字段保存在类中。例如: class Strings { static String welcomeMessage = "Welcome To Flutter"; } 然后像如下方式来访问它: Text(Strings.welcomeMessage) 默认情况下,Flutter 只支持美式英语字符串。如果你要支持其他语言,请引入 flutter_localizations 包。你可能也要引入 intl 包来支持其他的 i10n 机制,比如日期/时间格式化。 dependencies: # ... flutter_localizations: sdk: flutter intl: "^0.15.6" 要使用 flutter_localizations 包,还需要在 app widget 中指定 localizationsDelegates 和 supportedLocales。 import'package:flutter_localizations/flutter_localizations.dart'; MaterialApp( localizationsDelegates: [ // Add app-specific localization delegate[s] here GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ], supportedLocales: [ const Locale('en', 'US'), // English const Locale('he', 'IL'), // Hebrew // ... other locales the app supports ], // ... ) 这些代理包括了实际的本地化值,并且 supportedLocales 定义了 App 支持哪些地区。上面的例子使用了一个 MaterialApp ,所以它既有 GlobalWidgetsLocalizations 用于基础 widgets,也有 MaterialWidgetsLocalizations 用于 Material wigets 的本地化。如果你使用 WidgetsApp ,则无需包括后者。注意,这两个代理虽然包括了“默认”值,但如果你想让你的 App 本地化,你仍需要提供一或多个代理作为你的 App 本地化副本。 当初始化时,WidgetsApp 或 MaterialApp 会使用你指定的代理为你创建一个 Localizations widget。Localizations widget 可以随时从当前上下文中访问设备的地点,或者使用 Window.locale。 要访问本地化文件,使用 Localizations.of() 方法来访问提供代理的特定本地化类。如需翻译,使用 intl_translation 包来取出翻译副本到 arb 文件中。把它们引入 App 中,并用 intl 来使用它们。 更多 Flutter 中国际化和本地化的细节,请访问 internationalization guide ,里面有不使用 intl 包的示例代码。 组件 在 Flutter 中一切皆是 组件,仅仅 Widget 的子类和间接子类就有350多个,如此多的组件到底如果学习,真的需要学习 350 多个组件?经济学中有一个著名的 二八定律 ,而我们学习 Flutter 也适用于二八定律,大部分组件是平时很少用到的,因此作为初学者,只需学习那 20% 常用的组件即可。 RenderObjectWidget及其子类共有89个: ProxyWidget及其子类共有34个: StatelessWidget及其子类共有89个: StatefulWidget的子类最多,高达141个 ▐ 组件树 Flutter 创建App的时候,所有的组件最后会生成一个组件树,例如如下代码: void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( ), home: Scaffold( body: Text('Hello world!'), ), ); } } main 函数是应用程序开始的地方,运行 MyApp 组件。生成的组件树如下: 让 Text 组件居中,修改如下: Scaffold( body: Center( child: Text('Hello world!'), ), ) 给应用程序添加 AppBar: Scaffold( appBar: AppBar(), body: Center( child: Text('Hello world!'), ), ) ▐ StatefulWidget vs StatelessWidget Flutter 中组件分为 无状态组件(StatelessWidget) 和 有状态组件(StatefulWidget)两种。它们唯一的区别就是运行时 重新加载 组件的方式不同,StatelessWidget 组件重新加载时重新创建当前组件的实例,而StatefulWidget组件重新加载时不会重新创建实例,而是重新执行 build 函数。 StatelessWidget 组件创建的方式: class StatelessWidgetDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Container(); } } build 函数返回当前组件,此组件一旦创建将不可改变,build 函数只能执行一次。如果想重新绘制此组件,只能重新创建此组件新的实例。 StatefulWidget 组件创建的方式: class StatefulWidgetDemo extends StatefulWidget { @override _StatefulWidgetDemoState createState() => _StatefulWidgetDemoState(); } class _StatefulWidgetDemoState extends State<StatefulWidgetDemo> { @override Widget build(BuildContext context) { return Container(); } } StatefulWidget 组件的创建方式和 StatelessWidget 不同,State<> 中的 build 函数返回当前组件,有状态的组件可以在其生命周期内多次重绘,即多次调用 build 函数,而不是创建一个新的实例。 StatefulWidget 组件重绘需要调用 setstate 方法,setstate 会使其自身及其子组件重绘,所以尽量封装 StatefulWidget 组件,避免无效的重建和重绘,影响性能。 快速书写小技巧:在 Android Studio 和 VS Code 中 输入 stl 然后点击回车,可以快速创建 StatelessWidget 组件,同理输入 stf 点击回车,可以快速创建 StatefulWidget 组件,这是编辑器 Live Templates 的功能。 ▐ Material vs Cupertino Flutter 中包含两套风格的组件,分别是 Material 和 Cupertino ,Cupertino 是 iOS风格的组件,命名都带 Cupertino 前缀,比如 CupertinoSlider 、 CupertinoDatePicker 等, Material Design 是由 Google 推出,旨在为手机、平板电脑、台式机和“其他平台”提供更一致、更广泛的“外观和感觉”。 Flutter 使用一套代码在不同的平台上表现一致,它不会根据不同的平台绘制不同的外形,比如使用 AlertDialog 弹出警告框,不管在 Android 上,还是在 iOS上效果是一样。 但有一些功能 Flutter 区分平台,比如 ListView 滑动到底部时继续滑动,Android 底部会出现淡蓝色(默认情况下)拱形,而 iOS 上则没有,这是因为 Flutter 在封装此组件时在代码中区分了平台,所以在查看 Flutter 源码到过程中会经常看到根据不同的平台做不同处理的情况。 总结 Flutter学习成本主要还是在组件的熟悉上,能数量常用组件就可以上手项目了,至于其他的控件只需大概浏览一下,做项目的时候遇到一些功能能够想起 Flutter 已经提供了此组件就可以了。 参考Flutter 中文网Flutter 老孟 Flutter 直播第一期预告 关注「淘系技术」微信公众号,一个有温度有内容的技术社区~

优秀的个人博客,低调大师

Angular 10.1.0 发布,Web 前端框架

Angular 10.1.0 现已发布,具体更新内容如下: Features bazel:从 ng_module 中提供 LinkablePackageInfo common:在 keyValuePipe 中添加 ReadonlyMap 代替 Map compiler-cli:将SourceFile.getOriginalLocation()添加到sourcemaps包中 compiler:支持一元运算符,以便进行更准确的类型检查 core:将 async 改名为 waitForAsync,以避免混淆 localize:允许在提取过程中处理重复的信息 platform-browser:允许sms-URLs ...... Bug Fixes bazel:修复 bazel 构建的集成测试 common:在模板类型检查器中缩小 NgIfcontext 变量的范围 compiler-cli:避免为只从类型导入的符号创建值表达式 compiler:错误地推断 SVG 中 HTML 节点的namespace core:允许在bootstrap之前随时修改lifecycle hooks elements:在正确的区域运行strategy methods forms:处理 groups/arrays自己的待定异步验证。 ...... Code Refactoring router:将 DefaultRouteReuseStrategy 导出到Router public_api 性能改进 compiler-cli:当 child scope 空时不发出template guards compiler-cli:修复增量程序重用中的回归问题 compiler-cli:仅在使用时生成指令声明 compiler-cli:仅为引用的 DOM 元素生成类型检查代码 forms:在 prod 构建中使用内部ngDevModeflag来 tree-shake 错误信息 ngcc:ESM 依赖项主机中的短路标记 ngcc:使用EntryPointManifest来加速 noopProgramBaseEntryPointFinder的速度 router:应用 priorizedizedGuardValue 运算符以优化 CanLoad 防护 更新说明:https://github.com/angular/angular/blob/master/CHANGELOG.md

优秀的个人博客,低调大师

Angular 10.0.1 发布,Web 前端框架

Angular 10.0.1已发布,具体更新内容如下: Bug Fixes core:移除root view后,清理 DOM 元素 (#37600)(64f2ffa),closes#36449 forms:更改错误消息(#37643)(c5bc2e7) forms:selectedOptions的正确用法(#37620)(dfb58c4),closes#37433 http:避免在获取操作完成后中止请求(#37367)(a5d5f67) language-service:恢复getExternalFiles()(#37750)(ad6680f) migrations:不要错误地为 @Injectable 或 @Pipe 添加待办事项(#37732)(13020b9),closes#37726 router:设置为isActive时,RouterLinkActive应运行 CD设置(#21411)(a8ea817),closes#15943#19934 router:为 RouterLink 指令添加 null 支持(#32616)(69948ce) router:调用 ParamMap.get 函数时修复错误(#31599)(3190ccf) Performance Improvements compiler-cli:修复增量程序重用中的回归问题(#37690)(96b96fb) 更新说明:https://github.com/angular/angular/blob/master/CHANGELOG.md#1001-2020-06-26

优秀的个人博客,低调大师

WebStorm 2020.1.2 发布,前端开发 IDE

WebStorm 2020.1.2 发布了,这是一个 bug 修复版本,主要更新内容包括: 修复了WSL 与 Node.js 相关的问题 解决了 CSS3 网格布局属性格式不正确的问题 现在可以在运行 ng build 之后正确识别 Angular Material 事件 解决了几个性能问题(WEB-45371、WEB-45028、WEB-45024、WEB-39488和WEB-45369) 使用 Shell 脚本打开项目时,不再显示错误的项目名称和路径 更新说明:https://blog.jetbrains.com/webstorm/2020/06/webstorm-2020-1-2/

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册