Solid UI:前端开发者的高效交互工具库
组件化开发是前端开发中的一种常见模式,它将用户界面划分为独立的、可复用的组件。这些组件可以独立开发、测试,并且可以集成到更大规模的应用程序中。组件化的优势在于它提高了代码的复用性,简化了开发流程,增强了代码的可维护性,以及促进了团队开发协作。solid-ui是一个功能丰富的前端组件库,它提供了一系列核心组件,这些组件可以根据不同的功能需求组合使用。核心组件包括但不限于:按钮(Button)输入框(
简介:Solid UI是一个前端开源库,提供创建高效、交互丰富的Web应用的强大工具集。它具有响应式设计、组件化、样式定制、无障碍性和性能优化等特点。本文将深入探讨Solid UI的核心特性、设计理念,并通过实战案例演示其在创建登录页面、构建数据表格和实现导航菜单等方面的有效应用。 
1. 响应式设计的实践与探索
随着移动设备的多样化和用户访问习惯的转变,响应式网页设计已成为现代Web开发的标准实践之一。本章将带你探索响应式设计的核心原理、实践策略以及如何通过响应式设计来提升用户体验和满足业务需求。
1.1 响应式设计的必要性
响应式设计允许网站通过单一的代码库适应不同尺寸的屏幕和设备。这种设计方式不仅能提高网站的可访问性,还能提升SEO排名和用户的参与度。在这一部分,我们将讨论为什么响应式设计对现代网站至关重要。
1.2 响应式设计的原理
响应式设计是通过CSS媒体查询、灵活的栅格布局、可伸缩的图像和媒体以及流体网格来实现的。我们将深入理解这些关键要素是如何工作的,以及如何运用它们来构建一个能够适应各种屏幕尺寸的网站。
1.3 响应式设计的实践工具
在这个章节中,我们将介绍一些常见的响应式设计工具和技术,比如Bootstrap、Foundation等前端框架,以及使用媒体查询的技巧。我们还会分析各种布局框架的优缺点,帮助你选择最合适的工具来构建响应式网站。
<!-- 示例:使用媒体查询调整样式 -->
@media screen and (max-width: 600px) {
body {
background-color: lightblue;
}
}
通过本章的学习,你将获得在项目中实施响应式设计的实用知识,并能够解决实际开发中遇到的相关问题。
2. 组件化开发的高效实践
2.1 前端组件化开发概述
2.1.1 组件化的概念与优势
组件化开发是前端开发中的一种常见模式,它将用户界面划分为独立的、可复用的组件。这些组件可以独立开发、测试,并且可以集成到更大规模的应用程序中。组件化的优势在于它提高了代码的复用性,简化了开发流程,增强了代码的可维护性,以及促进了团队开发协作。
2.1.2 组件化的实践原则
在组件化开发中,实践原则是指引开发行为的规范。原则包括:
- 单一职责:每个组件只负责一项功能,这有助于保持组件的简洁和专注。
- 高内聚低耦合:组件之间应该具有高度的内聚性和低耦合性,这有助于降低系统的复杂度。
- 可复用性:设计的组件应该是可复用的,以便在不同的上下文中重用。
- 可维护性:组件的设计应该考虑未来可能的变更,以确保长期的可维护性。
2.2 solid-ui组件库组件体系
2.2.1 核心组件介绍
solid-ui是一个功能丰富的前端组件库,它提供了一系列核心组件,这些组件可以根据不同的功能需求组合使用。核心组件包括但不限于:
- 按钮(Button)
- 输入框(Input)
- 列表(List)
- 卡片(Card)
- 导航栏(Navbar)
这些组件被设计得易于扩展和自定义,以适应各种应用的界面设计需求。
2.2.2 组件间的交互模式
在组件化开发中,组件间的通信和交互是构建复杂用户界面的关键。solid-ui组件库支持以下交互模式:
- 父子组件通信:使用props传递数据和回调函数。
- 事件传播:组件通过事件机制向上或向下传递消息。
- 状态管理:通过中央状态管理库(如Redux)管理跨组件的状态。
2.3 组件化项目构建工具
2.3.1 项目构建工具的选择与配置
构建工具是前端开发中的重要一环,它负责将源代码转换为可部署的静态文件。常见的构建工具包括Webpack, Rollup, 和Parcel。在solid-ui的项目中,通常使用Webpack作为构建工具,因为它提供了高度的可配置性、插件系统以及广泛社区支持。
构建工具的配置涉及到entry, output, module rules, plugins等关键配置项。配置文件(如webpack.config.js)需要详细定义这些参数,以便正确处理ES6+代码、SASS文件、图片资源等。
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
},
},
{
test: /\.scss$/,
use: [
'style-loader',
'css-loader',
'sass-loader',
],
},
],
},
plugins: [
// 插件列表
],
};
2.3.2 组件库的集成与管理
在项目中集成和管理组件库,首先需要确定使用哪种方式集成。目前主流的方式有:
- CDN引入:通过在HTML文件中添加script标签,直接引用组件库的网络资源。
- npm/yarn安装:使用npm或yarn命令安装组件库到项目依赖中,然后在项目代码中import/require使用。
例如,使用npm安装solid-ui组件库并集成到项目中:
npm install solid-ui
在项目代码中使用组件:
import { Button } from 'solid-ui';
function App() {
return (
<div>
<Button>Click Me</Button>
</div>
);
}
在这一章节的实践中,我们从组件化的基础概念和原则讲起,逐步深入到solid-ui组件库的具体介绍,最后详述了组件化项目构建工具的选择与配置。本章内容不仅是对组件化开发理念的概述,更是为实际项目中的组件化开发提供了可操作性的指导和工具。
3. 主题与样式定制的艺术
3.1 理解solid-ui的样式原理
在创建具有吸引力和一致性的UI时,理解所使用框架的样式原理是至关重要的。solid-ui,作为一种流行的UI框架,同样也遵循其内部的样式机制,确保组件的样式既可以定制化也可以保持一致性。
3.1.1 CSS预处理器的使用
CSS预处理器如Less或Sass为前端开发者带来了极大的便利,通过变量、嵌套、混入(mixin)等特性简化CSS的编写。在solid-ui中,开发者可以利用这些预处理器的特性来增强样式表的可维护性和可读性。比如,你可以通过变量来控制主题色彩,从而使整个应用的颜色风格保持一致。
// 配置变量
$primary-color: #007bff;
$danger-color: #dc3545;
// 使用变量
.button-primary {
background-color: $primary-color;
}
.button-danger {
background-color: $danger-color;
}
以上是一个简单的SCSS代码示例,展示了如何使用变量来定制按钮的颜色。在预处理器中使用变量可以极大地提高开发效率,并使得主题更换变得简单。
3.1.2 样式封装与隔离机制
为了防止样式的冲突和全局污染,solid-ui采用了CSS-in-JS或者BEM命名规范等方法来封装和隔离样式。这些方法能有效地限制样式的应用范围,确保样式的局部性和组件之间的独立性。
// CSS-in-JS的一个例子
const Button = styled.button`
background-color: ${props => props.primary ? 'blue' : 'white'};
color: black;
// 更多样式...
`;
// 使用Button组件时,可以通过props传入primary来定制样式
<Button primary>Primary Button</Button>
通过这种封装,solid-ui中的组件样式不会相互干扰,即使是在复杂的应用中也能保持清晰和可预测的样式行为。
3.2 自定义主题与样式方法
当项目需要特定的视觉风格时,自定义主题和样式是一个必须具备的能力。在solid-ui框架中,开发者可以轻松地通过配置变量和混入来实现主题的自定义。
3.2.1 主题配置与变量覆盖
自定义主题通常涉及覆盖默认的主题变量来创建新的样式。在solid-ui中,这些默认变量会在构建时被解析,开发者可以创建一个自定义的主题文件,并在项目中覆盖这些变量来改变UI的外观。
// 自定义主题配置文件
const customTheme = {
...defaultTheme,
primaryColor: '#663399',
secondaryColor: '#ffcc00'
};
在上述代码段中,我们创建了一个新的主题对象,其中包含了 primaryColor 和 secondaryColor 变量的自定义值。然后,我们只需要将这个自定义主题传递给solid-ui的Provider,整个应用的样式就会按照这个新主题进行渲染。
3.2.2 样式定制的最佳实践
样式定制的过程需要遵循一些最佳实践,以确保最终产品的质量。首先,应该在项目的初始阶段就确定样式指南和设计系统,然后根据这些指南来进行定制。此外,在定制样式时应该考虑到样式的可维护性,避免过度定制而导致后期难以维护。
在实际操作中,可以将自定义样式分为几个部分:基础样式、组件样式和页面特定样式。对这些样式进行模块化管理可以降低复杂性,并提高代码的可读性和可重用性。
3.3 样式性能优化技巧
在前端开发中,性能优化是一个不可忽视的环节,特别是对于样式而言。优化样式不仅能够提升页面加载的速度,还能改善用户体验。
3.3.1 避免全局样式污染
为了避免全局样式污染,建议使用CSS模块或者在组件内部定义样式。这样可以保证样式只作用于对应的组件上,避免在全局作用域中相互影响。
/* CSS模块的使用 */
.myButton {
background-color: blue;
color: white;
}
/* 组件内部样式 */
.myComponent {
&-title {
font-size: 16px;
}
}
3.3.2 CSS样式的合理压缩与合并
压缩CSS文件是减少HTTP请求和提高加载速度的有效手段。压缩工具如 cssnano 可以在不改变视觉表现的前提下,减少CSS代码的体积。合并多个CSS文件为一个文件也有助于减少服务器请求次数,提升性能。
在自动化构建工具如Webpack中,可以通过插件实现这一过程,例如 MiniCssExtractPlugin 可以将CSS提取到单独的文件中,并压缩它们。
总结来说,理解并实践样式定制的艺术,不仅能帮助我们创建出美观的应用界面,还能通过优化手段提升应用的性能。
4. 无障碍性设计的重要性与实现
无障碍性设计(Accessibility Design),简称为A11y(由于首尾两个字母与中间11个字母的缩写),是构建数字产品时常常被忽视的重要组成部分。随着技术的发展和用户需求的多样性,无障碍性设计不仅是对特定群体的关怀,也是构建更普适用户体验的关键因素。
4.1 无障碍性设计基础
4.1.1 无障碍性设计的意义与标准
无障碍性设计意味着让不同能力的用户都能够访问和使用网站或应用,无论他们是否有视觉、听觉、运动或认知障碍。设计的目的是消除障碍,提供等同的用户体验,确保所有用户都能够获取信息,使用功能。
在技术实现层面,无障碍性设计遵循一系列标准和指南,如Web Content Accessibility Guidelines (WCAG)。WCAG是国际公认的一套最佳实践,它定义了四个核心原则:
- 可感知(Perceivable):信息和用户界面组件必须被用户感知。
- 可操作(Operable):用户界面组件和导航必须是可操作的。
- 可理解(Understandable):信息和操作必须易于理解。
- 坚固(Robust):兼容性必须足够坚固,可以被各种用户代理(包括辅助技术)解释。
遵循这些原则,开发人员和设计师能够创建出更易用和更包容的应用程序。
4.1.2 常见的无障碍性问题与解决方案
在开发过程中,常见的无障碍性问题包括:
- 图片缺少替代文本(alt text)导致屏幕阅读器无法描述图片内容。
- 色彩对比度不足,影响色盲或视力弱的用户阅读。
- 动态内容变化时,屏幕阅读器无法及时通知用户。
- 不合理或缺失的表单输入提示,导致理解和操作困难。
- 视频或音频媒体缺少字幕或手语翻译。
针对这些问题,可以采取以下解决方案:
- 为所有非文本内容提供替代文本,包括图片、图表和视频等。
- 使用足够的色彩对比度,确保文字和背景色的可见性。
- 使用正确的语义标记来描述动态变化的内容。
- 提供清晰的表单验证信息和说明。
- 对于音视频内容,提供字幕和/或手语翻译。
4.2 solid-ui中的无障碍性实践
4.2.1 组件的无障碍性设计案例分析
solid-ui 提供了一系列经过无障碍性优化的组件,以确保开发人员能够轻松实现无障碍性设计。例如,按钮组件提供明确的语义标记,标签与输入字段严格对应,使屏幕阅读器用户能够轻松理解表单字段功能。
另外, solid-ui 的导航菜单遵循逻辑和层次结构,确保键盘用户可以导航到每个可交互元素。这些组件的无障碍性优化不仅限于视觉表现,还包括了对键盘事件和屏幕阅读器的深度支持。
4.2.2 实现无障碍性设计的技术细节
实现无障碍性设计的技术细节包括:
- 键盘可访问性:所有可交互元素必须能够通过键盘进行导航和激活。
- ARIA (Accessible Rich Internet Applications) 角色和属性的正确使用:为自定义控件提供必要的无障碍性信息。
- 确保交互模式如警告、提示等不会干扰屏幕阅读器的使用。
- 为表单元素提供清晰的错误提示和验证信息。
下面展示一个简单的无障碍性键盘可访问性示例代码:
<button type="button" aria-label="打开菜单" id="menu-button">☰</button>
<script>
document.getElementById('menu-button').addEventListener('keydown', function(event) {
if (event.key === 'Enter' || event.key === ' ') {
event.preventDefault();
// 执行打开菜单的函数
alert('菜单已打开!');
}
});
</script>
在这个示例中,按钮通过 aria-label 属性提供了辅助技术可读的标签,并且监听了 keydown 事件以确保使用键盘操作时的无障碍性。
4.3 无障碍性测试与评估
4.3.1 无障碍性测试工具与方法
无障碍性测试需要利用专业的工具和方法。常见的无障碍性测试工具包括:
- WAVE (Web Accessibility Evaluation Tool):提供网站的无障碍性反馈。
- axe-core:一个可集成至开发流程的自动化无障碍性检查工具。
- Lighthouse:Google开发的一个自动化审计工具,包含了无障碍性审计。
无障碍性测试方法包括:
- 自动化测试:快速发现可修复的问题。
- 手动测试:验证自动化测试的准确性并检查自动化无法触及的复杂问题。
- 用户测试:邀请有障碍的用户参与测试,提供真实反馈。
4.3.2 无障碍性评估报告的撰写与应用
无障碍性评估报告是确保无障碍性得到持续改进的重要环节。报告应该详细记录发现的问题和推荐的解决方案,并且明确责任人和改进时间表。
无障碍性评估报告撰写步骤:
- 描述所测试网站或应用的范围。
- 列出发现的无障碍性问题及其严重程度。
- 为每个问题提供详细描述、截图或视频,以及重现步骤。
- 根据WCAG原则提出改进建议。
- 指定跟进时间表和负责人。
无障碍性设计并非一蹴而就的工作,它需要持续的关注和改进。通过综合的测试与评估方法,我们可以不断地提升产品的无障碍性,为所有用户创造更加平等和舒适的数字体验。
通过上述内容,我们可以看到无障碍性设计不仅是一项社会责任,还是提升产品可用性和满足用户需求的重要手段。它涉及到从基础设计原则到具体实现,再到测试和评估的整个流程。在前端开发中,理解并实践无障碍性设计,可以让我们创造出更具包容性的产品,达到更广泛的用户群体。
5. 前端性能优化技术详解
5.1 性能优化的基本概念
5.1.1 性能指标的定义与测量
性能指标是衡量前端应用性能的重要依据,涉及到多个方面,包括但不限于首屏加载时间、总页面加载时间、页面渲染时间、交互响应时间等。为了准确测量这些指标,开发者会使用性能分析工具如Chrome DevTools、WebPagetest、Lighthouse等。这些工具不仅可以帮助开发者理解性能瓶颈所在,还能提供改进的建议。
例如,首屏加载时间是指从用户发起请求到页面主要内容渲染完成的时间。测量首屏加载时间通常会使用User Timing API记录关键时间点,结合性能报告分析得出结论。
5.1.2 前端性能优化的常见误区
在进行性能优化时,存在一些常见的误区。例如,开发者可能会过分依赖第三方工具的性能评分而忽视了实际的用户体验。另外,有的优化手段可能会带来副作用,比如过度压缩资源文件可能会损坏文件,而滥用缓存可能造成数据更新不及时。
避免这些误区的关键在于制定合理的性能预算,并通过实际用户测试来不断验证和调整优化方案。此外,持续监控应用性能,结合用户反馈,可以更科学地制定性能优化策略。
5.2 solid-ui的性能优化策略
5.2.1 组件级别的性能优化
在solid-ui这样的UI组件库中,每个组件的性能直接影响到整个应用的表现。性能优化可以从减少组件的渲染次数、避免不必要的DOM操作、合理使用虚拟滚动等方面着手。例如,可以利用React的 shouldComponentUpdate 或Vue的 v-once 来避免不必要的组件更新。
此外,合理利用组件的 key 属性来标识DOM元素,可以在列表更新时最大程度地复用现有元素,从而减少DOM操作。
5.2.2 响应式设计下的性能考量
响应式设计在不同的设备和网络条件下会带来不同的性能挑战。在低带宽或低性能设备上,保持应用流畅的关键是减少资源加载,例如使用图片懒加载或使用较低分辨率的资源。在固态设备上则需要关注高分辨率的图片和复杂的动画效果,可能会造成性能问题。
为了适应各种设备,可以使用CSS媒体查询来适配不同屏幕尺寸,并且通过网络信息API( navigator.connection )来判断网络速度,从而动态调整加载的资源。
5.3 实际案例分析与实践
5.3.1 常见性能瓶颈的诊断
一个常见的性能瓶颈是“白屏时间”过长,特别是在应用启动时。这种情况下,可以使用Chrome的Timeline工具进行分析,找出主要的性能瓶颈。有可能是大量的数据请求导致,或者是首屏渲染所需的CSS和JS资源过大。
诊断过程涉及到分析渲染树构建、脚本执行时间、样式计算等关键指标,并结合网络瀑布图来观察资源加载情况。
5.3.2 性能优化的实战案例演示
以一个电商首页为例,该首页包含大量商品卡片和图片轮播。在优化前,用户体验不佳,首屏加载时间过长。通过实施以下策略后,性能得到了显著提升:
- 图片懒加载 :仅加载首屏可视区域的图片,其他图片在滚动到视图时再加载。
- 组件级代码分割 :拆分大的组件代码,按需加载。
- 资源压缩与合并 :使用工具对CSS和JS资源进行压缩和合并,减少HTTP请求。
- 服务端渲染 (SSR):加快首屏内容的展示速度。
以下是一个使用JavaScript实现图片懒加载的代码示例:
document.addEventListener("DOMContentLoaded", function() {
var lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
if ("IntersectionObserver" in window) {
let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
let lazyImage = entry.target;
lazyImage.src = lazyImage.dataset.src;
lazyImage.classList.remove("lazy");
lazyImageObserver.unobserve(lazyImage);
}
});
});
lazyImages.forEach(function(lazyImage) {
lazyImageObserver.observe(lazyImage);
});
} else {
// Fallback for browsers that don't support IntersectionObserver
}
});
在这个代码段中,当图片元素进入视口时,会触发 data-src 属性中的图片链接替换到 src 属性中,从而加载图片。这样的懒加载策略能有效减少初次页面加载时的数据传输。
为了演示性能优化,可以展示优化前后网站的加载性能对比图:
| | 首屏加载时间(优化前) | 首屏加载时间(优化后) | |------|----------------------|----------------------| | 示例1 | 6.5s | 1.5s | | 示例2 | 5.8s | 2.1s |
在优化过程中,还需要确保优化的策略不会影响用户交互体验和应用功能的完整性。因此,进行A/B测试来评估不同用户群体在优化前后的使用体验是非常必要的。
以上就是第五章“前端性能优化技术详解”的全部内容,本章从性能优化的基础知识,到solid-ui的性能策略,再到实际案例分析,层层深入地探讨了性能优化的方法和实践。
6. solid-ui开源库的社区与未来
6.1 solid-ui的安装与引入流程
6.1.1 源码安装与配置说明
对于前端开发者而言,将solid-ui集成到项目中是实现快速UI开发的有效途径。solid-ui的源码安装与配置对于确保库的正确工作至关重要。以下是solid-ui的源码安装流程:
# 克隆库到本地
git clone https://github.com/your-username/solid-ui.git
# 进入克隆的库目录
cd solid-ui
# 安装依赖
npm install
# 构建库
npm run build
# 编译后的文件会出现在dist目录中
完成构建后,你可以根据需求将构建出的文件引入到你的项目中。例如,你可以通过npm或yarn将库添加到项目依赖:
# 使用npm
npm install --save path/to/solid-ui
# 或者使用yarn
yarn add path/to/solid-ui
在项目中引入solid-ui后,你可能需要按照以下方式在你的JavaScript文件中使用它:
import { Button } from 'solid-ui';
import 'solid-ui/dist/solid-ui.css';
function App() {
return (
<Button>
Click me
</Button>
);
}
export default App;
6.1.2 CDN引入与版本控制
除了传统的安装方式外,使用CDN引入solid-ui也是一个方便快捷的选择。这尤其适合静态网站或者小型项目,可以减少构建时间并简化依赖管理。
<!-- 在HTML文件中引入CDN -->
<script src="https://cdn.jsdelivr.net/npm/solid-ui@latest/dist/solid-ui.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/solid-ui@latest/dist/solid-ui.min.css">
使用CDN时, latest 可以根据需要替换为特定版本号,这样可以确保你的项目在升级时不会因版本不兼容而受到影响。
6.2 组件使用方法与自定义技巧
6.2.1 组件的API与使用场景
solid-ui提供了一系列预制组件供开发者使用。每个组件都封装了丰富的功能,可以通过其API灵活使用。例如,使用 <Button> 组件:
<Button onClick={() => alert('Button Clicked!')}>Click Me</Button>
在此例中, onClick 是Button组件的一个属性,用于处理点击事件。
在你的应用中,选择合适的组件并使用它们可以显著提高开发效率。例如:
<Input>组件用于文本输入。<Select>组件用于下拉选择。<Switch>组件用于布尔型选项切换等。
6.2.2 自定义组件的开发指南
除了使用预制组件外,solid-ui也支持开发者根据自己的需求创建自定义组件。在solid-ui中自定义组件的流程大致如下:
- 创建一个新的组件文件,例如
MyComponent.js。 - 使用JavaScript类或函数创建组件。
- 使用solid-ui的样式体系定义组件样式。
- 通过配置项扩展组件功能。
import { Component } from 'solid-ui';
class MyComponent extends Component {
render() {
// 渲染逻辑
return <div>My Custom Component</div>;
}
}
export default MyComponent;
在solid-ui的生态系统内,你可以通过覆盖默认样式来自定义组件的外观,并通过添加新的属性和方法扩展其功能。
6.3 solid-ui社区支持与版本更新维护
6.3.1 社区资源与问题反馈渠道
solid-ui拥有一个积极的社区,为开源库贡献者和用户提供支持。社区资源包括:
- 论坛:提供一个交流平台,让用户分享经验、解答疑问。
- GitHub仓库:用于提交问题和拉取请求。
- Stack Overflow等问答网站:提供社区支持。
对于遇到的问题,用户可以通过以下方式获取帮助:
- 在GitHub仓库中发起issue。
- 通过电子邮件联系核心团队。
- 在论坛或问答网站中提问。
6.3.2 版本更新记录与维护策略
solid-ui的维护团队遵循严格的版本管理策略,确保库的稳定性和向后兼容性。每个版本的更新记录都会在GitHub的release页面详细列出。
新版本发布通常伴随着新特性、bug修复和性能优化。维护团队会为重大更新提供迁移指南,确保用户能够顺利更新。
# v1.2.3 - 2023-03-20
## Features
- 新增了表单验证组件
## Bug Fixes
- 修复了Button组件在IE11中显示不正确的问题
## Performance
- 优化了Dialog组件的加载速度
## Documentation
- 更新了自定义组件的开发指南
通过这些维护策略和持续更新,solid-ui能够保持其在开源UI库中的竞争力,并不断改进用户体验。
以上即为solid-ui开源库的社区与未来章节内容,涵盖了安装、使用、社区支持与版本更新等方面,为开发者提供了在项目中高效使用solid-ui的详尽指南。
简介:Solid UI是一个前端开源库,提供创建高效、交互丰富的Web应用的强大工具集。它具有响应式设计、组件化、样式定制、无障碍性和性能优化等特点。本文将深入探讨Solid UI的核心特性、设计理念,并通过实战案例演示其在创建登录页面、构建数据表格和实现导航菜单等方面的有效应用。
更多推荐




所有评论(0)