Program Ç Ão
Program Ç Ão
Program Ç Ão
_
Toda página da web é criada a partir de tags HTML, com a seguinte
aparência: conteúdo Todo documento HTML começa e termina com a
tag <html>. (A propósito, HTML significa Hypertext Markup Language, a
linguagem padrão para criar páginas e aplicativos da Web. Existe uma
brincadeira online em que são criados significados para HTML. Um dos
significados, por exemplo, é "Hieróglifos, para máquinas legíveis" (este é bem
conhecido).
_
Para criar uma página da web, você precisa de duas tags
principais: <html> e <body>.
_
Existem tags que podemos usar para adicionar ênfase ou importância a
determinadas palavras ou frases da página. As duas maneiras mais comuns de
fazer isso são negrito ou itálico. A tag <b> é usada para deixar o texto em
negrito e a tag <i> é usada para colocar o texto em itálico.
_
Então, o que fazemos se quisermos mudar a cor do nosso texto? Existem
algumas maneiras de fazer isso. Por exemplo, podemos usar a
tag <font> com o atributo color para alterar a cor do texto em uma página
da web. Aqui está um exemplo de como alterar a cor do texto vermelho: <font
color="red">red</font>
Vamos praticar o uso de atributos para alterar a cor do nosso texto para
vermelho e azul.
_
Você notou nas etapas anteriores que colocou tags dentro de outras tags? Isso
é chamado de aninhamento. Desde a adição de estrutura a uma página da web
até a formatação de elementos, o aninhamento é utilizado sempre que criamos
uma nova página da Web.
_
Bom trabalho efetuando o aninhamento! Agora podemos criar a estrutura
básica para cada postagem em nosso app.
_
Uma página da web pode ter um visual bem entediante sem nenhuma imagem.
Então vamos adicionar algumas imagens!
_
Como já sabemos, os links são utilizados em todos os websites e apps para
mover-nos de uma página para outra. Você utiliza links o tempo todo para ver
informações, jogar vídeo games e assistir a vídeos em seus websites favoritos.
Nossos usuários podem também compartilhar links, então vamos aprender a
adicionar links aos posts de um usuário.
Vamos experimentar!
_
Vamos finalizar! Conclua esta lição digitando a postagem inteira novamente e
realmente entendendo a marcação HTML.
Na lição 2, você aprenderá sobre folhas de estilo (Style Sheets) para fazer com
que este HTML tenha uma aparência fantástica!
_
É hora de fazer o nosso pequeno projeto ficar bonito! Nós utilizaremos CSS
(Folha de estilo em cascatas, em inglês Cascading Style Sheets) para que isso
aconteça.
_
Nesta lição aprenderemos muitas das propriedades mais populares de CSS
utilizadas hoje em dia. Embora não possamos aprender todas elas, há recursos
excelentes online para pesquisar e aprender centenas de propriedades de CSS
disponíveis. Felizmente, os nomes de muitas propriedades de CSS são
também auto-explicativos!
Para fazer com que nossas e <img> tags sejam interativas, as cercaremos
com <button> tags. Daremos a cada botão sua própria classe que estilizaremos mais
tarde.
Agora você vai digitar bastante CSS para estilizar os outros elementos HTML
na página da web. Haverá comentários incorporados que descreverão alguns
dos elementos estilizados. Depois disso, a caixa de postagem começará de
fato a tomar forma!
Você tem feito um excelente trabalho até agora! Agora você estilizará a seção do
rodapé e a linha divisora horizontal.
Mas espere... agora você precisa ter uma maneira de criar postagens novas.
É hora de pegar o app que você construiu nas lições de HTML e CSS e torná-lo
interativo! Podemos fazer isso por meio da utilização de JavaScript, a
linguagem de programação da web.
Funções são blocos de código projetados para executar uma tarefa específica.
Esses blocos conterão cada uma das etapas que você deseja que o
computador execute para essa tarefa. Após uma função é criada, você pode
executá-la chamando-a ou referindo-se a ela pelo seu nome no código.
Até agora, utilizamos JavaScript para fazer alterações nos elementos HTML
existentes. Em nossa última lição, aprendemos que podemos usar o JavaScript
não apenas para alterar elementos HTML, mas também podemos adicionar ou
remover elementos no DOM.
Como sabemos como segmentar IDs para fazer alterações, adicionaremos IDs
a elementos em nossa página que ainda não possuem um.
Para nossa próxima tarefa, utilizaremos o código HTML e CSS que você criou
nas lições anteriores e adicionaremos IDs a alguns de nossos elementos para
que possamos direcioná-los facilmente nas próximas lições.
Existem algumas coisas que precisaremos fazer para que isso aconteça.
Primeiro, criaremos uma função chamada deletePost e usaremos um novo
método que remove elementos HTML de uma página. Em seguida,
adicionaremos um atributo onclick ao botão "X" para que os usuários
possam remover suas postagens clicando nele.
Alguns dos aplicativos que usamos hoje, como Instagram e Twitter, permitem
que os usuários curtam uma postagem tocando em um ícone de coração na
postagem.
_
Os sites de mídias sociais possuem limites para a quantidade de caracteres
que uma postagem pode ter. O Facebook tem um limite grande, de 63.206
caracteres! O Instagram, por outro lado, tem um limite de 2.200 caracteres.
Queremos que nossos usuários publiquem pensamentos e idéias rápidas,
então nosso limite de caracteres será muito menor, de 140 caracteres. Isso
ajudará a manter as postagens de nossos usuários curtas, agradáveis e
objetivas.
Agora, vamos aprender dois novos atributos HTML e escrever uma função
chamada checkCharacterCount que verificará e exibirá o número de
caracteres em uma postagem.
Pense nas diferentes maneiras pelas quais você é notificado ou alertado pelos
dispositivos e aplicativos que você usa todos os dias. Nossos telefones usam
vibrações, sons e luzes para nos notificar sobre uma mensagem ou
atualização. Os sites usam pop-ups, alterações de ícones e texto para nos
informar quando recebemos uma solicitação de amizade ou inserimos a senha
incorreta.
Reportar anúncio
Remova as propagandas
Nosso aplicativo está tomando forma! Nossos usuários podem interagir com as
postagens ao curti-las ou exclui-las.
_
Ótimo! Podemos ver nosso alerta, o que significa que nossa função está
funcionando.
Você finalizou com sucesso seu web app em JavaScript com funcionamento
completo! Você deve sentir-se orgulhoso de seu trabalho árduo!
Vamos adicionar alguns toques finais ao nosso projeto e fazê-lo brilhar! Vamos
arrumar a caixa de postagem e adicionar nosso avatar pessoal a nossos posts.
<html>
<head>
<style>
4
/*
Estilos
Base
*/
body
background-color:
#f7f7f7;
color:
#4a4a4a;
font-family:
'open-sans',
sans-serif;
font-size:
16px;
10
line-height:
1.2;
11
12
main
13
margin-left:
auto;
14
margin-right:
auto;
15
max-width:
800px;
16
padding:
20px;
17
18
/*
Anchor
Tag
*/
19
20
color:
#2D9CDB;
21
font-family:
'open-sans',
sans-serif;
22
font-weight:
700;
23
24
a:hover
25
color:
#1789C9;
26
27
/*
Artigos
com
algumas
bordas,
preenchimento
sombras
*/
28
article
29
background-color:
#ffffff;
30
border-width:
1px;
31
border-style:
solid;
32
border-radius:
10px;
33
margin-bottom:
20px;
34
padding:
20px;
35
border-color:
#eaeaea;
36
box-shadow:
10px
20px
rgba(0,
0,
0,
0.05);
37
position:
relative;
38
39
/*
Avatar
*/
40
.avatar
41
background-color:
#ffffff;
42
border-width:
1px;
43
border-style:
solid;
44
border-color:
#81C4E9;
45
border-radius:
50%;
46
float:
left;
47
height:
50px;
48
margin-right:
10px;
49
min-width:
50px;
50
position:
relative;
51
52
.avatar
img
53
left:
50%;
54
position:
absolute;
55
top:
50%;
56
transform:
translate(-50%,
-50%);
57
58
/*
Blockquote
com
algum
espaço
em
volta.
*/
59
blockquote
60
margin-left:
0;
61
margin-right:
0;
62
margin-top:
20px;
63
64
/*
Botão
*/
65
button
66
border:
none;
67
cursor:
pointer;
68
padding-left:
0;
69
padding-right:
0;
70
transform:
scale(1);
71
72
button:hover
73
transform:
scale(1.2);
74
75
button:focus
76
outline:
none;
77
}
78
button.close
79
opacity:
0.5;
80
position:
absolute;
81
right:
20px;
82
top:
20px;
83
84
button.close:hover
85
opacity:
1;
86
}
87
/*
novo
botão
no
formulário
*/
88
button.compose
89
background-color:
#2D9CDB;
90
border-radius:
10px;
91
margin-left:
10px;
92
height:
50px;
93
width:
50px;
94
95
button.compose:hover
96
background-color:
#1789C9;
97
98
button.heart
99
float:
right;
100
101
button.heart:hover
{
102
opacity:
1;
103
104
/*
Data
da
Postagem
*/
105
.date-posted
106
color:
#a9a9a9;
107
margin-bottom:
0;
108
width:
90%;
109
float:
left;
110
margin-top:
0;
111
112
.date-posted
time
113
color:
#4a4a4a;
114
115
/*
Container
do
rodapé
*/
116
footer
{
117
margin-top:
20px;
118
height:
15px;
119
120
footer
121
color:
#a9a9a9;
122
font-size:
14px;
123
font-weight:
300;
124
}
125
/*
Cabeçalhos
*/
126
h1
127
font-family:
'open-sans',
sans-serif;
128
font-size:
16px;
129
font-weight:
700;
130
line-height:
1.2;
131
margin-top:
0;
132
margin-bottom:
0;
133
padding-top:
8px;
134
135
h2
136
color:
#a9a9a9;
137
font-family:
'open-sans',
sans-serif;
138
font-size:
14px;
139
font-weight:
300;
140
line-height:
1.2;
141
margin-top:
0;
142
margin-bottom:
0;
143
144
/*
Linha
divisora
horizontal
*/
145
hr
146
border-width:
1px;
147
border-style:
solid;
148
border-color:
#eaeaea;
149
150
/*
Formulário
*/
151
form
152
background-color:
#D5EBF8;
153
border-width:
1px;
154
border-style:
solid;
155
border-color:
#81C4E9;
156
border-radius:
10px;
157
margin-bottom:
20px;
158
padding-left:
20px;
159
padding-right:
20px;
160
padding-top:
20px;
161
padding-bottom:
30px;
162
163
form.is-error
{
164
background-color:
#fbbfbf;
165
border-color:
#ec5e5e;
166
167
form.is-error
textarea
168
border-color:
#ec5e5e;
169
color:
#ec5e5e;
170
171
form.is-error
div
{
172
color:
#ec5e5e;
173
174
/*
Textarea
*/
175
textarea
176
border-radius:
10px;
177
border-width:
1px;
178
border-style:
solid;
179
border-color:
#81C4E9;
180
color:
#4a4a4a;
181
font-size:
14px;
182
height:
50px;
183
margin-bottom:
2px;
184
padding:
6px;
185
resize:
none;
186
width:
100%;
187
188
textarea::placeholder
189
color:
#a9a9a9;
190
191
textarea:focus
192
border-color:
#2D9CDB;
193
outline:
none;
194
195
/*
Fieldset
*/
196
fieldset
{
197
border:
none;
198
float:
left;
199
font-size:
12px;
200
margin:
0;
201
padding:
0;
202
width:
calc(100%
122px);
203
204
fieldset
div
205
color:
#2D9CDB;
206
margin-left:
6px;
207
margin-top:
2px;
208
209
</style>
210
<script>
211
function
lovePost(id)
212
let
heart
document.getElementById("heart-image-"+id)
213
if(heart.src.indexOf("active")
===
-1)
214
heart.src
"tweeter/images/heart-active.svg"
215
else
216
heart.src
"tweeter/images/heart.svg"
217
218
}
219
function
deletePost(id)
220
let
elementId
"article-container-"+id
221
let
element
document.getElementById(elementId)
222
element.remove()
223
224
function
checkCharacterCount(textArea)
225
let
counter
document.getElementById("input-characters")
226
let
container
document.getElementById("form-container")
227
228
if
(textArea.value.length
>
140)
229
textArea.value
textArea.value.substr(0,
140)
230
container.classList.add("is-error")
231
else
232
container.classList.remove("is-error")
233
234
counter.innerText
textArea.value.length
235
236
function
submitPost()
237
let
textArea
document.getElementById("input-textarea")
238
let
counter
document.getElementById("input-characters")
239
let
contentToPost
textArea.value;
240
241
if(contentToPost.length
===
0)
242
return
false;
243
244
245
textArea.value
"";
246
counter.innerText
0;
247
248
createPostHTML(contentToPost)
249
return
false;
250
251
let
currentPostId
1;
252
function
createPostHTML(postContent)
{
253
let
now
new
Date()
254
let
time
now.toLocaleTimeString()
255
let
date
now.toLocaleString()
256
let
name
"Marty
McFly"
257
let
username
"username"
258
259
currentPostId
currentPostId
260
261
postContent
postContent.replace(/</g,
"<")
262
postContent
postContent.replace(/\n/g,
"<br
/>")
263
postContent
postContent.replace(/(https?:\/\/[^\s]+)/g,
"<a
href=\"$1\"
target=\"_blank\">$1</a>")
264
265
let
template
266
<article
id="article-container-${currentPostId}">
267
<header>
268
<button
class="close"
onclick="deletePost(${currentPostId})">
269
<img
src="tweeter/images/close.png"
height="15"
width="15"/>
270
</button>
271
<div
class="avatar">
272
<img
src="basic/avatar-05_v1.png"
height="40"
width="40"/>
273
</div>
274
<h1>${name}</h1>
275
<h2>@${username}</h2>
276
</header>
277
<blockquote>
278
${postContent}
279
</blockquote>
280
<hr/>
281
<footer>
282
<p
class="date-posted">Posted
283
<time>${date}</time>
284
</p>
285
<button
class="heart"
onclick="lovePost(${currentPostId})">
286
<img
src="tweeter/images/heart.svg"
id="heart-image-${currentPostId}"
height="15"
width="16"/>
287
</button>
288
</footer>
289
</article>`
290
document.getElementById("form-
container").insertAdjacentHTML("afterend",
template)
291
292
</script>
293
</head>
294
<body>
295
<main
id="container-wrapper">
296
<form
id="form-container"
onsubmit="return
false;">
297
<div
class="avatar"
id="input-avatar">
298
<img
src="basic/avatar-05_v1.png"
height="40"
width="40"/>
299
</div>
300
<fieldset>
301
<textarea
placeholder="O
que
está
acontecendo?"
id="input-textarea"
onkeypress="checkCharacterCount(this)"
onchange="checkCharacterCount(this)"></textarea>
302
<div
class="character-count"><span
id="input-characters">0</span>/140
caracteres</div>
303
</fieldset>
304
<button
class="compose"
onclick="submitPost()">
305
<img
src="tweeter/images/compose-icon.png"
height="30"
width="30"/>
306
</button>
307
</form>
308
<article
id="article-container-1">
309
<header>
310
<button
class="close"
onclick="deletePost(1)">
311
<img
src="tweeter/images/close.png"
height="15"
width="15"/>
312
</button>
313
<div
class="avatar">
314
<img
src="basic/avatar-05_v1.png"
height="40"
width="40"/>
315
</div>
316
<h1>Marty
McFly</h1>
317
<h2>@username</h2>
318
</header>
319
<blockquote>
320
Oi,
pessoal.
Estou
aprendendo
digitar
no
<a
href="https://www.typing.com"
target="_blank">www.typing.com</a>.
Nossa,
um
321
link!
322
</blockquote>
323
<hr/>
324
<footer>
325
<p
class="date-posted">Postado
em
326
<time>19/11/2021
11:47:59</time>
327
</p>
328
<button
class="heart"
onclick="lovePost(1)">
329
<img
src="tweeter/images/heart.svg"
id="heart-image-1"
height="15"
width="16"/>
330
</button>
331
</footer>
332
</article>
333
</main>
334
</body>
335
</html>