// 
//     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 - Parte 1: Vídeo de Conceitos Básicos sobre Aplicações HTML5
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: HTML5 - Parte 1: Vídeo de Conceitos Básicos sobre Aplicações HTML5 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, HTML5 - Parte 1: Vídeo de Conceitos Básicos sobre Aplicações HTML5

|===
|Este screencast apresenta o suporte no NetBeans IDE para desenvolver aplicações HTML5. O screencast demonstra como usar assistentes no IDE para criar um projeto HTML5 e como usar o browser Chrome com a extensão NetBeans para ajudar na exibição do layout do projeto em vários tamanhos de tela.

Autor: Ken Ganfield
Hora: 8:05

link:http://bits.netbeans.org/media/html5-gettingstarted-final-screencast.mp4[+Download / Veja em tamanho completo+] (44 MB)

 

|Para obter mais informações sobre como trabalhar com aplicações HTML5 no NetBeans IDE, assista aos screencasts a seguir.

* link:html5-css-screencast.html[+ HTML5 - Parte 2: Trabalhando com as Folhas de Estilo CSS nas Aplicações HTML5+]
* link:html5-javascript-screencast.html[+ HTML5 - Parte 3: Testando e Depurando JavaScript nas Aplicações HTML5+]

link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20Getting%20Started%20with%20HTML5%20Applications[+Enviar Feedback neste Tutorial+]
 
|===


== Links relacionados

* Demonstração:link:html5-css-screencast.html[+ HTML5 - Parte 2: Trabalhando com Folhas de Estilo CSS em Aplicações HTML5+]
* Demo:link:html5-javascript-screencast.html[+ HTML5 - Parte 3: Testando e Depurando JavaScript em Aplicações em HTML5+]
* link:../webclient/html5-gettingstarted.html[+Conceitos Básicos sobre Aplicações em HTML5 +]
* link:../webclient/html5-editing-css.html[+Trabalhando com Folhas de Estilo de CSS em Aplicações em HTML5+]
* link:../webclient/html5-js-support.html[+Depurando e Testando JavaScript em Aplicações em HTML5+]
* link:http://wiki.netbeans.org/HTML5[+Suporte a HTML5 na página Wiki do NetBeans IDE+]
* link:../../trails/php.html[+Trilha de Aprendizado de PHP e HTML5+]
