웹 페이지 구현하기에 앞서 웹 기초가 거의 없었기 때문에 HTML, CSS, JavaScript를 이번 기회에 제대로 공부할 겸, 과제도 할 겸 시간은 타이트했지만 열심히 해봤다. 그래서 급하게 필요한 문법이라던가, 개념을 정리하며 정리된 코드들을 참고하며 만들었다.
내 배경지식은 1학년 때 인터넷프로그래밍을 듣지 못하고 2학년 때 웹프로그래밍을 들었었는데 힘들어서 한 학기 내내 끌려다닌 정도로, 3-2에는 팀플 과목이 있기 때문에 어느 정도의 웹 공부를 해야겠다고 생각했고 이번이 기회라고 들어서 열심히 했다.
아마 css 보면 불필요한 코드가 있을 것 같은데 수정이 필요한 부분은 알려주세요!
| 요소 | 설명 |
|---|---|
<html> | HTML 문서의 범위 지정 |
<head> | HTML 문서의 정보 지정 |
<body> | HTML 문서의 구조 지정 |
| 요소 | 설명 |
|---|---|
<title> | 브라우저의 제목 표시줄 및 페이지 탭에 보여지는 문서 제목 지정 |
<base /> | HTML 문서에 포함된 모든 상대 URL들의 기준 URL을 지정함 - href: 기준 URL - target: target 속성을 사용하는 요소(<a>)의 기본값 |
<link /> | 외부 리소스(HTML, CSS, Icon 등)의 연결 및 현재 문서와의 관계 명시 - rel: (필수) 현재 문서와 외부 리소스와의 관계 - href: 외부 리소스의 URL - type: 외부 리소스의 MIME 타입 |
<meta /> | 기타 메타데이터 (검색엔진이나 브라우저에 정보 제공) - charset: 문자 인코딩 방식 - name: 메타 데이터의 이름 (정보의 종류) - http-equiv: 서버/사용자 에이전트의 작동방식 변경에 대한 지시 - content: name, http-equiv의 값 |
<style> | 문서나 문서 일부에 대한 스타일 정보(CSS)를 지정 - type: MIME 타입 |
| 요소 | 설명 |
|---|---|
<h1> <h2> <h3> <h4> <h5> <h6> | 문서의 정보 계층 구조화 (Heading) 문서나 구분된 영역의 제목 지정, 문서의 목차 |
<header> | 문서의 헤더 지정. 주로 제목, 로고 등을 포함 |
<footer> | 문서의 푸터 지정. 주로 작성자, 저작권, 관련 문서 등을 포함 |
<main> | 문서의 주 콘텐츠 지정 |
<section> | 문서의 일반적인 영역 지정 - Heading 요소 포함하여 식별 |
<aside> | 문서의 별도 콘텐츠 지정 - 주로 광고나 기타 링크 등의 사이드바 지정 |
<nav> | 다른 페이지 링크를 제공하는 영역 지정 (Navigation) - 주로 메뉴, 목차, 색인 등 지정 |
<div> | 본질적으로 아무것도 나타내지 않는 콘텐츠 영역 지정 (Division) |
| 요소 | 설명 |
|---|---|
<form> | 웹 서버에 정보를 제출하기 위한 양식 범위를 정의 - action: 전송한 정보를 처리할 웹페이지의 URL - autocomplete: 사용자가 이전에 입력한 값으로 자동 완성 기능을 사용할 것인지 여부 - method: 서버로 전송할 HTTP 방식 - name: 고유한 양식의 이름 - novalidate: 서버로 전송 시 양식 데이터의 유효성을 검사하지 않도록 지정 - target: 서버로 전송 후 응답 받을 방식을 지정 |
<input /> | 사용자에게 입력 받을 데이터 양식 - autocomplete: 사용자가 이전에 입력한 값으로 자동 완성 기능을 사용할 것인지 여부 - autofocus: 페이지가 로드될 때 자동으로 포커스 - checked: 양식이 선택되었음을 표시 - form: <form>의 id 속성 값 - list: 참조할 <datalist>의 id 속성 값 - max: 지정 가능한 최대 값 - min: 지정 가능한 최소 값 - maxlength: 입력 가능한 최대 문자 수 - multiple: 둘 이상의 값을 입력할 수 있는지 여부 - name: 양식의 이름 - placeholder: 사용자가 입력할 값의 힌트 - readonly: 수정 불가한 읽기 전용 - src: 이미지의 URL - alt: 이미지의 대체 텍스트 - type: 입력 받을 데이터의 종류 - value: 양식의 초기 값 - type=button: 일반 버튼 - type=checkbox: 체크박스 - type=color: 색상 - type=email: 이메일 - type=file: 파일 - type=hidden: 보이지 않는 전송할 양식 - type=image: 이미지 제출 버튼 - type=number: 숫자 - type=password: 비밀번호 - type=radio: 라디오 버튼 - type=range: 범위 컨트롤 - type=reset: 초기화 - type=search: 검색 - type=submit: 제출 버튼 - type=tel: 전화번호 - type=text: 일반 텍스트 - type=url: 절대 URL |
<label> | 라벨 가능 요소의 제목(Caption) - for 속성으로 라벨 가능 요소를 참조하거나 콘텐츠로 포함 - for: 참조할 라벨 가능 요소의 id 속성 값 |
<button> | 선택 가능한 버튼을 지정 - autofocus: 페이지가 로드될 때 자동으로 포커스 - disable: 버튼 비활성화 - form: <form>의 id 속성 값 - name: 폼 데이터와 함께 전송되는 버튼의 이름 - type: 버튼의 타입 |
<textarea> | 여러 줄의 텍스트 양식 - autocomplete: 사용자가 이전에 입력한 값으로 자동 완성 기능을 사용할 것인지 여부 - autofocus: 페이지가 로드될 때 자동으로 포커스 - disable: 양식 비활성화 - form: <form>의 id 속성 값 - maxlength: 입력 가능한 최대 문자 수 - name: 양식의 이름 - placeholder: 사용자가 입력할 값의 힌트 - readonly: 수정 불가한 읽기 전용 - rows: 양식의 줄 수 |
<select> | 드롭다운 목록 지정 - autofocus: 페이지가 로드될 때 자동으로 포커스 - disable: 양식 비활성화 - form: <form>의 id 속성 값 - multiple: 여러 옵션을 선택할 수 있는지 여부 - name: 양식의 이름 - size: 한 번에 보여지는 옵션의 수 |
<option> | 드롭다운이나 자동완성 목록의 옵션 지정 - disable: 옵션을 비활성화 - label: 표시될 옵션의 제목 - selected: 옵션이 선택되었음을 표시 - value: 양식으로 제출될 값 |
모든 HTML 요소에서 공통으로 사용할 수 있음
| 속성 | 설명 |
|---|---|
id | 문서 전체에서 고유한 식별자(identifier, ID)를 정의 |
class | 공백으로 구분된 요소의 별칭 지정 |
style | 요소에 적용할 CSS를 선언 |
title | 요소의 정보(설명) 지정 |
| 요소 | 설명 |
|---|---|
<a> | 다른 URL로 연결할 수 있는 하이퍼링크 지정 (Anchor) - 다른 페이지, 같은 페이지 위치(#), 파일, 이메일 주소, 전화번호 등 - download: 이 요소가 리소스를 다운로드하는 용도로 사용됨 - href: 링크 URL - rel: 현재 문서와 링크 URL의 관계 - target: 링크 URL의 표시 위치 - type: 링크 URL의 MIME 타입 |
<b> | 문체가 다른 글자의 범위 지정 (bold) |
<mark> | 하이라이팅할 때 사용 |
<strong> | 의미의 중요성 강조 (bold 표시) |
<u> | 밑줄이 있는 글자 지정 - CSS text-decoration: underline; 사용 권장 |
<br /> | 줄바꿈 지정 |
| 요소 | 설명 |
|---|---|
<iframe> | 다른 HTML 페이지를 현재 페이지에 삽입 - name: 프레임의 이름 - src: 포함할 문서의 URL - width: 프레임의 가로 너비 - height: 프레임의 세로 너비 - frameborder: 프레임 테두리 사용 여부 |
| 요소 | 설명 |
|---|---|
<img /> | 이미지 삽입 - src: 이미지 URL - alt: 이미지 대체 텍스트 - width: 이미지 가로 너비 - height: 이미지 세로 너비 |
<audio> | 소리 콘텐츠(MP3) 삽입 - autoplay: 준비되면 바로 재생 - controls: 제어 메뉴 표시 - loop: 재생이 끝나면 다시 처음부터 재생 - preload: 페이지가 로드될 때 파일을 로드할지의 지정 - src: 콘텐츠 URL - muted: 음소거 여부 |
<video> | 동영상 콘텐츠(MP4) 삽입 - autoplay: 준비되면 바로 재생 - controls: 제어 메뉴 표시 - loop: 재생이 끝나면 다시 처음부터 재생 - src: 콘텐츠 URL - muted: 음소거 여부 - poster: 동영상 썸네일 이미지 URL - width: 동영상 가로 너비 - height: 동영상 세로 너비 |
<figure> | 이미지나 삽화, 도표 등의 영역 지정 |
<figure>
<img src="milk.jpg" alt="A milk">
<figcaption>Milk is a nutrient-rich.</figcaption>
</figure>
style 속성에 직접 작성하는 방식<style></style> 안에 작성하는 방식<link>를 이용하여 외부 문서로 CSS를 불러와 적용하는 방식@import를 이용하여 외부 문서로 CSS를 불러와 적용하는 방식<body>
<p style="height:100px; color:blue">
</body>
------------------
<head>
<style type="text/css">
.logo {color: #eeeeee;}
</style>
</head>
-------------------
<head>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
-------------------
<head>
<style type="text/css">
@import url(style.css);
</style>
</head>
HTML 요소 선택자 : CSS 적용 대상으로 HTML 요소의 이름 직접 사용
h2 { color: teal; text-coration: underline; }id 선택자 : CSS를 적용할 대상으로 특정 요소 선택할 때 사용, 이때 # 사용
<input type=”text” id=”userid” value=”id” > //HTML#userid { color:teal; text-decoration: underline; } //CSSclass 선택자 : 특정 집단의 여러 요소를 한 번에 선택할 때 사용
<input type=”text” class=”userinfo” id=”userid” value=”id” ><input type=”password” class=”userinfo” id=”userpwd” value=”pwd” ><input type=”text” class=”userinfo” id=”usermail” value=”mail” > .userinfo { color: lime; font-size: 25px; }group 선택자 : 여러 선택자를 같이 사용하고자 할 때 사용, 쉼표로 구분하여 연결
전체 선택자 : * 문자를 사용하여 요소 내부의 모든 요소 선택
display : 속성을 어떻게 보여줄지 결정
none: 노출되지 않게 설정block: 가로 한 블록 전체 사용inline: 가로 한 줄에 노출되도록 사용inline-block: 블록과 인라인의 중간flex-box : display 속성 중 하나, display:flex 작성 후 아래 속성 값 사용 가능
flex-direction: 항목을 스택하려는 방향 정의row: 기본값, 가로row-reverse: 가로 역순column: 세로column-reverse: 세로 역순flex-wrap: 플렉스 항목을 래핑할지 여부wrap: 플렉스 항목이 래핑되도록nowrap: 기본값wrap-reverse: 래핑 역순justify-content: 플렉스 항목 정렬center: 가운데 정렬flex-start: 컨테이너 시작 부분 정렬flex-end: 컨테이너 끝 정렬space-around: 공백이 있는 일정 간격에 맞게 정렬space-between: 공백 없이 일정 간격에 맞게 정렬align-items: 플렉스 항목 정렬stretch: 기본값, 항목을 확장하여 컨테이너 채움center: 컨테이너 중간 부분 정렬flex-start, flex-end: 컨테이너 시작/끝 부분에 정렬baseline: 기준선과 같은 라인에 정렬position : 태그를 어떻게 위치시킬지를 정의
-static: 기본값, 다른 태그와의 관계에 의해 자동 배치
absolute: 절대 좌표와 함께 위치 지정relative: 원래 있던 위치를 기준으로 좌표 지정fixed: 스크롤과 상관없이 좌표 고정inherit: 부모 태그의 속성 값을 그대로 상속margin = 바깥쪽 여백 / padding = 안쪽 여백
px, auto 등의 값으로 설정, 위쪽/오른쪽/아래쪽/왼쪽 설정 가능 margin: 8px; /* 상하좌우 모두 8px 여백 */
margin-top, margin-bottom, margin-left, margin-right;
border: 태그의 테두리
border-width: 테두리의 두께;
border-style: 테두리의 스타일 (solid, dotted 등);
border-color: 테두리 색상;
border-top, border-bottom, border-left, border-right;
border: 1px solid #eeeeee;
border-bottom: 3px solid gray;
background : 배경 지정
background-color: black; /* 배경색 */
background-image: url(”pic.png”); /* 배경 이미지 */
background-repeat: repeat-x; /* 배경이미지 반복 여부 (x=가로, y=세로, no=반복X) */
background-position: 배경 이미지 위치;
font : 글자의 폰트
font-style: 글자 스타일;
font-weight: 글자 두께;
font-size: 글자 크기;
line-height: 줄 간격;
font-family: 글꼴 설정;
font-variant: 글꼴 변경 (소문자를 대문자로 등);
color : 글자 색상
text-align : 텍스트의 정렬 방향 지정
@media : CSS3에 도입된 기술인 미디어 쿼리, 특정 조건이 true인 경우에만 CSS 속성 포함
@media only screen and (max-width:80px){
/* CSS 작성 */
/* 가로 사이즈가 80px가 되면 해당 CSS 적용 */
}
동적인 기능을 추가할 수 있음
주석은 //, /* */
프로그래밍 기능
애플리케이션 프로그래밍 인터페이스(API)
인터프리터
서버 사이드 코드
<script> 요소 사용.js<script> 요소를 <script src=”script.js” defer></script> 로 대체태그 선택자
document.getElementsByTagName(태그명)[순서];
'div' 이런 구조클래스 선택자
document.getElementsByClassName(클래스명)[순서];
아이디 선택자
document.getElementById(아이디명);
window.alert() 메소드alert("내용");document.write() 메소드console.log() 메소드innerHTML property변수의 선언 방법에는 3가지 존재 (var, let, const)
var : 함수 스코프
let, const : 블록 스코프
스코프
변수를 사용할 수 있는 범위
{ } 안에서만 사용 가능let, const는 이미 존재하는 변수의 이름을 또 선언하면 에러
var, let은 변수 선언시 초기값 없어도 됨
var, let은 값을 다시 할당 가능, const는 한 번 할당한 값은 변경 불가(상수나 마찬가지)
변수 선언 식별자
이름에는 문자, 숫자, 밑줄 및 달러 기호 포함 가능
이름은 문자, $, _로 시작
대소문자 구분
예약어는 사용 불가
변수의 데이터 타입
기본 타입 : boolean, null, undefined, number, string, symbol
객체 타입 : object, array, function
배열의 선언
var arr = [ '1', 2, 'Hello' ];Array() 생성자 함수로 배열을 만드는 방법객체의 선언
{}) 사용 - 객체 리터럴 방식 let obj = { name : '홍길동', age : 21 };Object() 생성자 함수로 객체 생성function을 써주고 용도에 맞는 함수명을 지어줌return값은 반환값 없을 땐, return; 하면 됨함수 표현식 예시
let 함수명 = function () { 수 내용 return; }
함수 호출 예시
let fnc = (a, b) => a+b;
fnc(1, 2);

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
<link rel="stylesheet" href="style.css">
<script src="action.js"></script>
</head>
<body>
<div class="center">
<div class="Login"> Login </div>
<br>
<div>
<form onsubmit="return handleLogin()">
<input type="text" class="text-field" id="userid" placeholder="ID">
<input type="password" class="text-field" id="userpwd" placeholder="password">
<br>
<input type="submit" value="Login" class="submit-btn">
</form>
<div class="links">
<a href="signup.html">Sign up</a>
</div>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
<link rel="stylesheet" href="style.css">
<script src="action.js"></script>
</head>
<body>
<div class="center">
<div class="signup">Sign Up</div>
<form onsubmit="return handleSignup()">
<input type="text" class="text-field" id="userid" placeholder="ID">
<input type="password" class="text-field" id="userpwd" placeholder="password">
<input type="password" class="text-field" id="userpwd_confirm" placeholder="check password">
<br><br>
<input type="text" class="text-field" id="username" placeholder="Name">
<input type="email" class="text-field" id="usermail" placeholder="email">
<input type="submit" value="Sign Up" class="submit-btn">
</form>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Main</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="mainheader">Welcome!</div>
</body>
</html>
function handleSignup() {
// 입력된 값을 가져옴
const userid = document.getElementById('userid').value;
const userpwd = document.getElementById('userpwd').value;
const userpwd_confirm = document.getElementById('userpwd_confirm').value;
const username = document.getElementById('username').value;
const usermail = document.getElementById('usermail').value;
// 모든 필드가 채워졌는지 확인
if (!userid || !userpwd || !userpwd_confirm || !username || !usermail) {
alert('모든 항목을 채워주세요.');
return false;
}
// 비밀번호 확인이 맞는지 체크
if (userpwd !== userpwd_confirm) {
alert('비밀번호가 일치하지 않습니다.');
return false;
}
// login.html로 이동
alert("Success!")
window.location.href = 'login.html';
return false; // 폼이 실제로 제출되지 않도록
}
function handleLogin(){
alert("Success!");
window.location.href='main.html';
return false;
}
*{
box-sizing: border-box;
}
.mainheader{
width:100%;
top:10px;
position:relative;
margin: auto;
background-color:lightblue;
text-align: center;
font-size:50px;
font-weight:bold;
}
.center{
width:300px;
top:200px;
position:relative;
padding:20px;
margin: auto;
border:0;
border-radius: 5px;
background-color:lightblue;
}
.Login{
font-size: 30px;
font-weight: bold;
text-align: center;
}
.signup{
font-size: 30px;
font-weight: bold;
text-align: center;
padding-bottom:20px;
}
.text-field{
font-size:14px;
margin-bottom:10px;
border:none;
border-radius: 5px;
padding:10px;
width:100%;
}
.submit-btn{
font-size: 14px;
margin-bottom:10px;
padding:10px;
border:none;
border-radius: 5px;
width:100%;
}
.links{
text-align: center;
}