// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= HTML5 - 第 1 部分：HTML5 应用程序入门指南的视频
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: HTML5 - 第 1 部分：HTML5 应用程序入门指南的视频 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, HTML5 - 第 1 部分：HTML5 应用程序入门指南的视频

|===
|此截屏视频介绍了 NetBeans IDE 中的 HTML5 应用程序开发支持。此截屏视频演示如何在 IDE 中使用向导创建 HTML5 项目，以及如何结合使用 Chrome 浏览器和 NetBeans 扩展来帮助您以各种屏幕大小查看项目布局。

作者：Ken Ganfield
播放时长：8:05

link:http://bits.netbeans.org/media/html5-gettingstarted-final-screencast.mp4[+下载/观看全图+] (44 MB)

 

|有关在 NetBeans IDE 中使用 HTML5 应用程序的更多信息，请观看以下截屏视频。

* link:html5-css-screencast.html[+ HTML5 - 第 2 部分：在 HTML5 应用程序中使用 CSS 样式表+]
* link:html5-javascript-screencast.html[+ HTML5 - 第 3 部分：在 HTML5 应用程序中测试和调试 JavaScript+]

link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20Getting%20Started%20with%20HTML5%20Applications[+发送有关此教程的反馈意见+]
 
|===


== 相关链接

* 演示：link:html5-css-screencast.html[+HTML5 - 第 2 部分：在 HTML5 应用程序中使用 CSS 样式表+]
* 演示：link:html5-javascript-screencast.html[+HTML5 - 第 3 部分：在 HTML5 应用程序中测试和调试 JavaScript+]
* link:../webclient/html5-gettingstarted.html[+HTML5 应用程序入门 +]
* link:../webclient/html5-editing-css.html[+在 HTML5 应用程序中使用 CSS 样式表+]
* link:../webclient/html5-js-support.html[+在 HTML5 应用程序中调试和测试 JavaScript+]
* link:http://wiki.netbeans.org/HTML5[+NetBeans IDE 中的 HTML5 支持 Wiki 页+]
* link:../../trails/php.html[+PHP 和 HTML5 学习资源+]
