λ°μν CSS μ§μ μμ±ν΄λ³΄κΈ° (μ΄μ΄μ)
λ΄κ° μ§ μ½λμ κ°μ λ΄μ© λΉκ΅Β·λΆμ (μ΄μ΄μ)
javascript νμ΅
λλ¦Όμ½λ© 'νλ‘ νΈμλ ν¬νΈν΄λ¦¬μ€ ν΄λ‘ μ½λ©' (λ°μν nav, λ°μν web site)
λλ¦Όμ½λ© μ νλΈ 'μλ°μ€ν¬λ¦½νΈ κ°μ' (1~3νΈ)
μ¬μ νμ΅ κ°μ΄λ step 2 (~Types)
(1) μλ λ΄κ° μΌλ μ½λ β λΈλΌμ°μ ν¬κΈ°λ₯Ό μ€μ΄λκΉ outer μμ μ’μ°κ° κ°μ΄ μ€μ΄λλ λ¬Έμ λ°μ
.testimonial-avatar-outer { border-radius: 50%; width: 200px; height: 200px; overflow: hidden; position: relative; } .testimonial-avatar { height: 100%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); margin: auto; }
(2) ν΄κ²° λ°©μμ κ²μν΄μ μμ ν μ½λ
.testimonial-avatar-outer { width: 200px; height: 200px; } /* μλ μμλλ° divμ img μ¬μ΄μ μΆκ°ν div νκ·Έ */ .testimonial-avatar-outer-two { border-radius: 50%; overflow: hidden; position: relative; padding-top: 100%; } .testimonial-avatar { height: 100%; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); margin: auto; }
β» λ€μν λΉμ¨ λ§λ€κΈ° β
2:1 λΉμ¨ β
padding-top: 50%
1:2 λΉμ¨ βpadding-top: 200%
4:3 λΉμ¨ βpadding-top: 75%
16:9 λΉμ¨ βpadding-top: 56.25%
width: 100%
λ₯Ό μ¬μ©νλλ°, κ°μμμλ flex-grow: 1
μ μ¬μ©νλ€. μ μμ κ²½μ° @mediaμμ μ μν max-width μ΄νλ‘ μμμ§λ©΄ 무쑰건 ν μ€μ 1κ°μ projectλ§ μ€κ² λλ€. κ·Έλ¬λ νμμ κ²½μ° max-width μ΄νλ‘ μμμ Έλ μ΄λ μ λλ ν μ€μ 2κ°μ projectκ° μλ€κ° μ’ λ μ€μ΄λ©΄ 1κ°μ projectλ‘ λ°λλ€.<script src="main.js" defer></script>
async
VS defer
async
: parsing μ€μ js νμΌμ λ€μ΄λ‘λ λ°κ³ , HTMLμ μ μλ μμμ μκ΄μμ΄ js νμΌμ΄ νλμ© λ€μ΄λ‘λκ° μλ£λ λλ§λ€ parsingμ λ©μΆκ³ μ΄λ₯Ό μ€ννλ€.
defer
: parsing μ€μ js νμΌμ μ λΆ λ€μ΄λ‘λ λ°μλκ³ , parsingμ΄ λλλ©΄ HTMLμ js νμΌμ΄ μ μλ μμμ λ°λΌ μ°¨λ‘λλ‘ μ€ννλ€
'use strict';
μ μΈjs νμΌ μ μΌ μμ 'use strict';
λ₯Ό μ μΈν΄μ€μΌ νλ€.
μ΄λ κ² ν΄μ£Όλ©΄ μ€μλ‘ μ μΈλμ§ μμ λ³μμ κ°μ ν λΉνλ λ± λΉμμμ μΈ μμ μ νμ λ, κ°λ°μ λꡬμ console μ°½μ μ€λ₯ λ©μμ§κ° λ¨κ² λλ€.
console.log('Hello World!');
global scope
μμ μ μΈλ μ μ λ³μ
: μ΄ν리μΌμ΄μ
μ΄ μ€νλλ μκ°λΆν° λλ λκΉμ§ νμ λ©λͺ¨λ¦¬μ νμ¬λμ΄ μμΌλ―λ‘ μ΅μνμΌλ‘ μ¬μ©ν΄μΌ ν¨
local scope
μμ μ μΈλ μ§μ λ³μ
: λ°μμλ μμ΄ λ³΄μ΄μ§ μκ³ , μμμλ§ λ°μ λ³Ό μ μλ€.
cf. scope : λ³μμ μ κ·Όν μ μλ λ²μ
function scope
: ν¨μ μκ³Ό λ°μ΄ λ¨μ λ¨
block scope
: blockμ μκ³Ό λ°μ΄ λ¨μ λ¨
var
: λ μ΄μ μ°λ©΄ μλ¨var hoisting
μ λΉμμμ μΈ μμ
μ κ°λ₯μΌ ν΄μ μννλ€.ex.
console.log(me); me = 3; var me;
λΌκ³ μ°λ©΄, console μ°½μ undefinedκ° λ¬λ€. μ΄λ κ°μ΄ λμ λμ§ μμμ λΏ λ³μλ μ μΈλμμμ μλ―Ένλ€. 맨 λ°μ μλ var me;λ₯Ό μ μΌ μλ‘ λμ΄μ¬λ € μΈμνλ κ²μ΄λ€. λ°λ©΄μ,
let
μ μ¬μ©νλ©΄ console μ°½μ λ³μκ° μ μΈλμ§ μμλ€λ μ€λ₯ λ©μμ§κ° λ¨κ² λλ€.
let
(λ©λͺ¨λ¦¬μμ μ½κ³ λ°κΏ μ°κΈ° κ°λ₯)
νλ² κ°μ ν λΉν΄λ λ³κ²½μ΄ κ°λ₯νλ€ (mutable type)
ES6μμ μΆκ°λ¨
constant
(λ©λͺ¨λ¦¬μμ μ½κΈ°λ§ κ°λ₯, λ°κΏ μ°κΈ° λΆκ°λ₯)
νλ² κ°μ ν λΉνλ©΄ μ λλ‘ λ³κ²½ν μ μλ€ (immutable type)
μ¬λ§νλ©΄ constλ₯Ό μ¬μ©νκΈΈ μΆμ²νλ€ (보μ, μ€μ λ°©μ§)
- HTML μμ μ°ΎκΈ°
- μΉ νλ©΄ μμ λμλ€μ κ°μ§ (μ΄λ²€νΈμ ꡬλ νκ³ μλ΅νκΈ°)
- HTML μμ Β·μμ Β·μμ±
javascript β ν μ€ : //
, μ¬λ¬ μ€ : /* */
HTML β <!-- -->
CSS β /* */
λ³μλ₯Ό μ μΈν λ μ§μ΄μ£Όλ μ΄λ¦
λ³μ
μ«μ, μνλ²³, $, _
μ¬μ© κ°λ₯
μ«μλ‘ μμν μ μκ³ , javascript ν€μλ(μμ½μ΄)λ μ¬μ©ν μ μλ€
μλ°μ€ν¬λ¦½νΈμμ =
λ =λ₯Ό κΈ°μ€μΌλ‘ 'μ€λ₯Έμͺ½μ μμΉν κ°'μ 'μΌμͺ½μ λ³μ'μκ² λμ
/ν λΉ νλ€λ κ²μ μλ―Ένλ€.
- μμ νμ : λλ μκ² λλ μ μλ ν κ°μ§ μμ΄ν , value(κ°) μμ²΄κ° λ©λͺ¨λ¦¬μ μ μ₯λ¨
- μ«μ
- λ¬Έμμ΄
- boolean (true/false)
- undefined
- null
- symbol
- κ°μ²΄ νμ : object(κ°μ²΄)λ₯Ό κ°λ¦¬ν€λ referenceκ° λ©λͺ¨λ¦¬μ μ μ₯λ¨
- object
~ ν κ°μ§ μμ΄ν λ€μ μ¬λ¬ κ° λ¬Άμ κ²
~ functionλ λ³μμ κ°μΌλ‘ ν λΉμ΄ κ°λ₯ν¨
- immutable λ°μ΄ν° νμ : μμ νμ , frozen objects
- mutable λ°μ΄ν° νμ : κΈ°λ³Έμ μΌλ‘ μλ°μ€ν¬λ¦½νΈμμμ λͺ¨λ objects
false
λ‘ λ³νλλ κ° :
0 ο½ -0 ο½ false ο½ undefined ο½ null ο½ NaN ο½ "" ο½ '' ο½ ``
true
λ‘ λ³νλλ κ° : κ·Έ μΈμ κ° λͺ¨λ
const what = 1 > 4; console.log(`value: ${what} type: ${typeof what}`) // value: false type: boolean
undefined
: μ μλμ§ μμ, κ°μ΄ λμ
λμ§ μμ μνλ₯Ό μλ―Ένλ κ°
null
: μλμ μΌλ‘ κ°μ΄ μμμ λνλ΄κ³ μΆμ λ μ¬μ©λλ κ°
NaN
: μ ν¨νμ§ μμ μ«μ μ°μ°μ μ€ννμ λ λνλλ κ°
%
: λλ¨Έμ§ κ°μ ꡬνλ μ°μ°μ
**
: κ±°λμ κ³±μ ꡬνλ μ°μ°μ
console.log(2 ** 3); // 2μ 3μΉ
π‘
a = a + 1
=a += 1
=++a
( -, *, / )λ λ§μ°¬κ°μ§, κ·Έλ¬λ
//a
λ**a
λ μλ€)let a = 1; console.log(a = a + 1); // 2 console.log(a += 1); // 3 console.log(++a); // 4
π‘ μ¬μ Β·μ¬ν μ¦κ° (κ°μλ λ§μ°¬κ°μ§)
// counterλΌλ λ³μμ κ°μ λ€μμ λ°κΏ κ²μ΄λ―λ‘ const λ§κ³ let μ¬μ© let counter = 1; // μ¬μ μ¦κ° const preincrement = ++counter; /* μμ counter = counter + 1; preincrement = counter; */ console.log(`preincrement: ${preincrement}, counter: ${counter}`); // preincrement: 2, counter: 2 // μ¬ν μ¦κ° const postincrement = counter++; /* μμ postincrement = counter; counter = counter + 1; */ console.log(`postincrement: ${postincrement}, counter: ${counter}`); // postincrement: 2, counter: 3
Infinity/-Infinity
: μ΄λ€ μλ₯Ό 0/-0μΌλ‘ λλμμ λ λμ€λ κ°
isNaN ν¨μ
: μ΄λ€ κ°μ΄ NaN(Not A Number)μΈμ§ νλ³νκΈ° μν΄ μ¬μ©
var a = 5; var b = isNaN(a); console.log(b); // false
typeof μ°μ°μ
: μ΄λ€ μ’
λ₯μ κ°μΈμ§ νλ³νκΈ° μν΄ μ¬μ©, κ°μ νμ λ¬Έμμ΄λ‘ λνλ¨ ("number", "object", "function"...)var a = typeof 3; console.log(a); // "number"
νμ λ°μ΄νλ₯Ό λΆμ¬μ μ΄λ€
λ¬Έμμ΄μ λν μ μλ€
var result = "a" + "b"; console.log(result); // ab
β» ν νλ¦Ώ λ¬Έμμ΄(=template literals=template string) β
λ°±ν± κΈ°νΈ
μ${...}
μ¬μ©const c = "a" + "b"; console.log(`value: ${c} type: ${typeof c}`); // value: ab type: string const Jimmy = "Jimmy"; const man = `Bye, ${Jimmy}!`; console.log('Bye, ' + Jimmy + '!'); // Bye, Jimmy! console.log('value: ' + man + ' type: ' + typeof man); // value: Bye, Jimmy! type: string console.log(`value: ${man} type: ${typeof man}`); // value: Bye, Jimmy! type: string
\n
,\t
,\
λ μ΄μ μΈ νμ μμ΄ (enter, tab, ') κ·Έλλ‘ νν κ°λ₯console.log('I\'m ' + 'Syong'); // I'm Syong console.log(`string literals: ${1 + 3} '''' 3 + 2 = ${1 + 4}`); /* string literals: 4 '''' 3 + 2 = 5 */
var number = 30; var something = typeof number; console.log(number === something); // false (β΅ number β "number")
.length
 ⻠곡백λ ν¬ν¨νλ€var str = "happy "; console.log(str.length); // 6 console.log("sad".length); // 3
[ ]
Β β» 1 μ΄ μλλΌ 0 λΆν° μμνλ€var str = "happy"; console.log(str[0]); // "h" console.log("sad"[2]); // "d"
toLowerCase()
console.log('You hAve BeEn DiSHonest'.toLowerCase()); // you have been dishonest
toUpperCase()
console.log('No wAy!'.toUpperCase()); // NO WAY!
indexOf('μ°Ύμ λ¬Έμ')
console.log('Are you sure?'.indexOf(' yo')); // 3
slice(μΆμΆ μμν λ¬Έμ μΈλ±μ€, μΆμΆ λλΌ λ¬Έμ μΈλ±μ€)
console.log('My name is Syong.'.slice(1, 5)); // y na
split('κΈ°μ€μ΄ λ λ¬Έμ')
console.log('I?doubt?that'.split('?')); // (3) ['I', 'doutb', 'that']
console.log('Why would you doubt my word?'.split('')); /* (28) ['W', 'h', 'y', ' ', 'w', 'o', 'u', 'l', 'd', ' ', 'y', 'o', 'u', ' ', 'd', 'o', 'u', 'b', 't', ' ', 'm', 'y', ' ', 'w', 'o', 'r', 'd', '?'] */
startsWith('κ²μν λ¬Έμμ΄')
console.log('what are you doing?'.startsWith('what ')); // true
endsWith('κ²μν λ¬Έμμ΄')
console.log('I am doing FiNe'.endsWith('iNe')); // true
includes('κ²μν λ¬Έμμ΄')
console.log('hi ken'.includes(' ke')); // true
repeat(νμ)
console.log('6'.repeat(3)); // 666
맡μ΄λ μλ£ κ΅¬μ‘°μμ λμλ€λ°μ μΌλ‘ μΌμ΄λ μ μλ μ½λμμ μ°μ μμλ₯Ό μ£Όκ³ μ νλ λ± κ³ μ ν μλ³μ
κ° νμν λ μ¬μ©
μ£Όμ΄μ§ stringμ΄ κ°μλ κ°κΈ° λ€λ₯Έ κ³ μ ν μλ³μλ₯Ό λ§λ€ μ μλ€
μ£Όμ΄μ§ stringμ΄ κ°μ λλ κ°μ μλ³μλ₯Ό λ§λ€κ³ μΆμΌλ©΄ .for
μ μΆκ°νλ©΄ λλ€
symbolμ valueλ₯Ό μ¬λ°λ₯΄κ² μΆλ ₯νκΈ° μν΄ λ€μ .description
μ μΆκ°νλ€
const symbol1 = Symbol('hi'); // μ€λ₯Έμͺ½μ λ°λμ 'λλ¬Έμ S'λ‘ μ¨μΌ ν¨ const symbol2 = Symbol('hi'); console.log(symbol1 === symbol2); // false const symbol3 = Symbol.for('hi'); const symbol4 = Symbol.for('hi'); console.log(symbol3 === symbol4); // true console.log(`value: ${Symbol1.description} type: ${typeof Symbol1}`); // value: hi typeof: symbol
const syong = {name: 'syong', age: 21}; syong.age = 22;
constλ₯Ό μ¬μ©νμΌλ―λ‘ νλ² ν λΉλ objectλ λ€λ₯Έ objectλ‘ λ³κ²½ν μ μλ€. κ·Έλ¬λ object μμ λ³μμΈ nameκ³Ό age κ°μ λ³κ²½ κ°λ₯νλ€.
1) μ μ νμ
μΈμ΄
ex) C, JAVA ...
2) λμ νμ
μΈμ΄
ex) javascript...
λ³μλ₯Ό μ μΈν λ νμ μ μ μΈνμ§ μκ³ , νλ‘κ·Έλ¨μ΄ λμν λ(runtimeμ) ν λΉλ κ°μ λ°λΌμ νμ λ³κ²½μ΄ κ°λ₯νλ€.
μ’μ μμ΄λμ΄κ° μμ΄μ λΉ λ₯΄κ² νλ‘ν νμ μ νκ³ μΆμ λλ λ§€μ° μ μ©νλ€.
κ·Έλ¬λ λ€μκ° μ°Έμ¬νλ κ·λͺ¨ μλ νλ‘μ νΈμμλ μ£Όμκ° νμνλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λμ¨ κ² typescriptμ΄λ€.
let text = "hello"; console.log(text.charAt(0)); // h console.log(text[0]); // h text = `1` + 5; // 5λ λ¬Έμλ‘ μλ μΈμ console.log(`value: ${text} type: ${typeof text}`); // value: 15 type: string text = '8' / '2'; // λ λ€ μ«μλ‘ μλ μΈμ console.log(`value: ${text} type: ${typeof text}`); // value: 4 type: number console.log(text.charAt(0)); // error (β΅ textλ λ μ΄μ λ¬Έμμ΄μ΄ μλ)
javascript κΈ°μ΄ λ³΅μ΅
λλ¦Όμ½λ© μ νλΈ 'μλ°μ€ν¬λ¦½νΈ κ°μ' (4~6νΈ)
git μ»€λ° κΈ°μ€ μμ보기