2 VirtualBox-CentOS 리눅스 네트워크 설정, 기본 패키지 설치

|

[1] 네트워크 설정

리눅스 설치가 완료되었으면, 네트워크 설정을 해야한다.

views
로그인

root 접속 : 가상머신을 만들 때 입력했던 비밀번호를 입력한다.


ifconfig -a: ip주소 확인하기

주소가 안잡힌다.

views

주소가 잡힐 수 있도록 설정을 해주어야 한다.


vi /etc/sysconfig/network-script/ifcfg-eth0

에서 insert 모드 i를 누른 뒤 ONBOOT=yes 로 설정한다.

views

저장하고 나오기 : esc -> :wq -> enter


잘 됐는지 확인

cat /etc/sysconfig/network-script/ifcfg-eth0

views
파일이 수정되었는지 확인해보기

수정 확인이 되었으니, 재시작을 해야한다.

views

sync 작업은 메모리의 데이터를 디스크에 저장하여 동기화시키는 작업이라고 할 수 있다.


리부트가 되었다면 다시 IP를 확인해보자

다시 IP 확인하기

ifconfig

views

나의 가상 머신 ip : 192.168.1.45


[2] 기본 명령어

리눅스에서 가장 기본이 되는 명령어를 확인해보자!

내부 구조 확인 : pstree

views

로그아웃 : exit or logout

프로세스 확인 : ps

패키지 캐시 파일 삭제 : yum clean all

모든 패키지 표시: yum list

패키지 삭제: yum remove <패키지 명>

패키지 업데이트: yum update <패키지 명>

리눅스 버전 확인 : uname, uname -a, uname -r

현재 접속자 확인 : who

리부트 : init 6 or reboot or shutdown -r now

종료 : init 0

정지 : shutdown -h +10 10분뒤 꺼지게

shutdown -c 취소

views

그냥 shutdown 을 ctrl + c 로 취소하면 좀비처럼 프로그램이 남아있음

그래서 shutdown -c로 취소하면 프로세스에서 아래처럼 사라진다.

views

[3] 기본 패키지 설치하기

yum 을 이용해 패키지 업데이트 및 새로운 패키치 설치가 가능하다.

리눅스에 기본으로 필요한 패키지들을 다운받자!

아래의 명령어들을 리눅스 커맨드에 치면 된다.

yum repolist

yum update

yum -y install crontab
yum -y install rdate
yum -y install gcc
yum -y install make
yum -y install wget
yum -y install gcc-c++
yum -y install cmake
yum -y install net-tools
yum -y install bind-utils
yum -y install psmisc

Complete!가 뜨면 설치 성공

already installed … Noting to do 가 뜨면 이미 설치된 패키지

yum install vixie-cron

yum clean all 패키지 캐시 파일 삭제

yum list 모든 패키지 표시

yum remove <패키지 명> 패키지 삭제

yum update <패키지 명> 패키지 업데이트

[4] 기본 설정 완료!

1 가상머신(VirtualBox)에 리눅스(CentOS) 설치

|

views
목차

[1] 리눅스 기본 알기(계획- 파티션, 메모리 … )

★ 파티션[하나의 물리적인 디스크를 여러개의 논리적 디스크로 나누는 것]

  • 일반적으로 리눅스를 설치할 디스크에 파티션을 나눠서 사용한다.
  • 특별한 이유가 없는 한 다음 5개 정도의 파티션으로 나누어 설치하게 된다.
views
  1. 부트 파티션은 커널과 초기 RAM 디스크를 포함, GRUB에 관련된 파일을 저장하기 때문에 100(보통128)MB 정도면 충분하다.
  2. /(루트) 파티션은 인스톨 예정의 RPM 패키지와 애플리케이션 소프트웨어를 인스톨 할 수 있는 정도의 사이즈가 필요핟.
  3. swap 영역은 RHEL에서 추천하는 다음 계산을 따른다.
    • 메모리가 2GB 이하 : 물리 메모리의 2배
    • 메모리가 2GB 이상 : 물리 메모리 + 2GB
  4. kdump는 물리 메모리 사이즈의 2~3배 정도가 알맞다.
  5. 데이터용 파티션은 애플리케이션 데이터 영역으로 운용 중에 데이터가 계속 증가할 영역으로 따로 파티션을 잡아두는 것이 좋다.
  • 디스크 파티션 설정 화면에서는 “Default Layout” 이 아닌 “Custom Layout”를 선택해서 명시적으로 파티션을 구성하도록 한다.
  • LVM(Logical Volume Management)는 사용하지 않는 것이 원칙이다. (설치 시)
  • 데이터 양이 일정 한 영역과 데이터가 증가하는 영역으로 나눠서 관리하는 것이 디스크 관리의 기본이다.


★ 마운트 (Mount) - 특정 디렉토리에 파일시스템을 탑재 하는 것

  • 리눅스 파일 단위로 모든 장치를 관리하기때문에 새롭게 만든 파일 시스템 사용하기위해서는 디스크 장치를 임의의 디렉토리에 마운트 시켜 사용해야한다.

마운트 포인트 ( Mount Point ) - 디스크 장치와 디렉토리가 연결이되어야 하는데 이때 연결되는 디렉토리이다.

마운트가 잘 정리된 블로그


[2] Virtual Box 설치하기

Virtual Box는 실제 서버 장비의 운용 전에 테스트 용도로 사용한다.

게스트 운영체제로 가상화하는 가상화 소프트웨어

가상 머신 다운받기

views
위의 윈도우 버전을 다운받는다.

[3] 가상 머신 만들기

다운로드가 완료되었다면, 가상머신을 만들어보자!

1, 새로만들기 클릭

views


2, 가상 머신 이름, 경로 설정

views


3, 메모리 설정

views

자신 PC 사양에 맞게 가상 머신이 사용할 메모리를 지정해준다.


views

처음 사용하는 경우 지금 새 가상 하드 디스크 만들기를 선택한다.

만약 기존에 사용하던 가상머신에 문제가 생겨 새 가상머신을 만들고 기존 설정을 다시 가져와야한다면, 기존 사용하던 가상 하드 디스크 파일(VDI)을 가지고 있어야 한다.

기존에 가지고 있던 .vdi 파일을 선택해주면 된다.


views

VDI - 버츄얼 박스에서 사용하는 기본 디스크 이미지(VDI를 선택하면 해당 디스크를 다른 PC에서 이동해서 사용할 때도 다른 PC에 버츄얼 박스가 설치되어 있어야만 사용 가능)

VHD - 버츄얼 박스에서 VDI외에 별도 가상 HDD를 추가할 수 있을 때 사용

VMDK : 버츄얼 박스 만이 아닌 다른 가상머신에서도 사용할 디스크 이미지일 경우 선택


views

고정크기로 용량을 여유있게 주거나,

어떻게 사용하게 될 지 잘 모르므로 동적 할당으로 설정한다.


views

가상머신을 만들시 생성되는 vdi 파일을 저장할 위치 지정과

가상머신에 PC사양에 맞게 적당한 하드 용량을 선택한다.

가상머신을 사용하다 보면 용량을 많이 차지하게 될 수 있다. 그렇기에 용량이 작은 파티션에 설치 하지 않도록 여유 있는 하드에 저장위치를 잡아주자.



[ 만들어진 가상 머신 설정 ]

views
가상머신의 설정 클릭

4, 저장소 설정

CentOS를 사용 -> CentOS 설치 ISO 디스크 파일을 선택한다.

CentOS6.9버전 다운받기 - (minimal.iso를 다운 받음)

views
가상 광 디스크 파일 선택
views
CentOS ISO 디스크 파일 저장소에 연결!

5, 네트워크 설정

views
어댑터에 브리지로 설정

NAT : 네트워크에서 외부망과 내부방을 나눠주는 기능을 한다. 공인망으로 나갈 때 내부망의 주소를 그대로 가져갈 수 없다. => 주소 변환(IP주소를 변환)

=> 가상머신이 사설 IP로 잡힘, 내부 접근 불가하다.

=> 외부에서 접솔할 때 따로 설정이 필요하다.

=> 어댑터에 브리지 로 설정


브리지 어댑터 : 게스트OS가 독립적인 IP를 가진다. 가상 스위치 설정 (호스트OS와 게스트OS가 같은 네트워크에 있을 수 있게 설정하는 것)

이렇게 설정하면, 외부에서 접속을 따로 설정할 필요가 없이 호스트OS와 게스트OS간 접속이 편리하다.

호스트OS : 실물 컴퓨터에 설치된 OS

게스트OS : 가상머신(VM)에 설치된 OS


6, 마우스 클릭 가능하게 설정

views

[4] 가상머신 시작하기

views
시작 클릭

Install or upgrade an existing system <- enter

views


skip

views
skip


언어 설정

views
views


예, 모든 데이터를 삭제합니다 선택

views
views
다음
views
다음


비밀번호 입력 후 다음

views


[5] 사용자 레이아웃 파티션 설정하기

views
사용자 레이아웃 선택

기본 설정으로는 Swap 파티션을 서버 메모리의 2배를 할당하고 난 나머지를 루트(/)에 할당한다.

사용자 레이아웃을 선택한다.


views
표준파티션 생성

새로운 파티션 추가를 위해서는 새로운 파티션 크기만큼 루트(/)파티션을 줄여서 만들기에 할당되지 않은 빈 영역이 남아있어야한다.


views

부팅 시 부팅 가능한 커널 이미지 파일 공간 설정.(많은 용량이 필요하지 않다.)


views

swap은 자신 가상머신 메모리의 1.5~2배 정도를 잡아준다.

나는 2048MB이기에 4096MB로 잡아주었다.


views

루트(/)는 가능한 최대 용량으로 채움(나머지 용량 할당)


views
파티션 설정 완료 -> 다음
views
포맷


views
변경 사항 기록


views
기다린다.
views
재부팅 클릭

리눅스 centos 6.9 설치 완료!!!!!!!!!!!!!!

2 리눅스 기본 네트워크, 패키지 설정하러 가기





Django-mysite만들기10 게시판 javascript 페이징, 검색기능 추가

|

django mini project

cafe24신입사원 교육과정 - django 수업 내용 정리


전체 코드 보기


django- javascript로 검색과 페이징 구현하기

여러가지 방법으로 구현해보고 싶어서

페이징처리의 페이지는 url의 path variable 형태로 받고,

검색의 키워드는 url의 ?a=b형태의 파라미터로 받아서 처리했다.

url 예시 : http://localhost:8888/board/list?kwd=키워드


urls.py

page의 경우 page를 선택한 순간 항상 해당 페이지의 상태를 유지해야 하기 떄문에 모든 url에서 page 값을 받았다.

from django.urls import path
from . import views

app_name = 'board'

urlpatterns = [
    path('list/<int:page>', views.list, name='list'),
    path('list/', views.list, name='list'),
    path('writeform/<int:page>', views.writeform, name='writeform'),
    path('writeform/<int:no>/<int:page>', views.writeform, name='reply_writeform'),
    path('write/<int:page>', views.write, name='write'),
    path('<int:no>/<int:page>', views.view, name='view'),
    path('modify/<int:no>/<int:page>', views.modifyform, name='modifyform'),
    path('modify/<int:page>', views.modify, name='modify'),
    path('delete/<int:no>/<int:page>', views.delete, name='delete'),
]


views.py

page의 경우 dafault를 1값으로 처리해, 페이지가 없는 경우 항상 1페이지로 보냈다.

키워드의 경우, 스트링 파라미터의 ?kwd=kwd 형태로 오기 때문에 request.GET.get('kwd') 코드를 통해 kwd 변수로 받아주었다.

django orm을 통해 해당 키워드의 게시글은 Board.objects.filter(title__contains=kwd) 코드로 조회했다.

PAGESIZE=10 # 한 페이지에 보여줄 게시글 수
def list(request, page=1):
    # 키워드의 받기
    kwd = request.GET.get('kwd')
    
    # 키워드가 없는 경우 모든 게시글 조회
    if kwd is None or kwd is '' or kwd == 'null':
        start = (page - 1) * PAGESIZE
        board_count = Board.objects.count()
        boardlist = Board.objects.all().order_by('-groupno','orderno')[start:start+PAGESIZE]
    # 키워드가 있는 경우 해당 키워드만 조회
    else:
        start = (page - 1) * PAGESIZE
        board_count = Board.objects.filter(title__contains=kwd).count()
        boardlist = Board.objects.filter(title__contains=kwd).order_by('-groupno', 'orderno')[start:start + PAGESIZE]
	
    # template에 총 게시글 수와 현재 페이지 정보를 보내준다.
    data = {
        'boardlist': boardlist,
        'board_count': board_count,
        'current_page': page,
        'page':page,
    }

    # 검색어가 null인 경우 javascript에서 처리해줘야한다.
    kwd = request.GET.get('kwd')
    if kwd is None:
        data['kwd'] = json.dumps(kwd)
    else:
        data['kwd'] = kwd

    return render(request, 'board/list.html', data)

검색어가 null인 경우, javascript에서 Python의 None값을 인식하지 못해

data['kwd'] = json.dumps(kwd) json형태로 변환해서 보내주었다.


다른 뷰에서 page, keyword 정보 유지하기

글 상세 조회 후, 답글 등록 후 등 여러 상황이 끝난 뒤 항상 기존의 page와 keyword정보를 갖고 제자리로 돌아가야 하는 처리

def modify(request, page=1):
    ... # 코드 생략 ...
    
    data = {
        'board':board,
        # page 추가
        'page':page,
    }

    # 검색어 추가
    kwd = request.GET.get('kwd')
    # 자바스크립트를 위한 처리
    if kwd is None:
        data['kwd'] = json.dumps(kwd)
    else:
        data['kwd'] = kwd
	
    return HttpResponseRedirect('/board/'+board_id+'/'+str(page), data)

javascript로 페이징과 검색 처리하기

paging.js 코드보기

views


list.html 코드보기 - 리스트 view

views

이렇게 검색과 페이징 기능 추가를 완료!


django url namespace로 get parameter보내기

template에서 url namespace로 url을 처리할때는

views

위와 같이 처리하면 urls.py에서 /뒤의 값으로도 받을 수 있고,

views.py에서 ?파라미터를 받는 kwd = request.GET.get('kwd') 코드로도 받을 수 있다.



페이징 처리

views
views

검색 했을 때

views

CSS 박스 모델 속성

|

마진과 패딩 (margin & padding) 속성

먹히는 순서 -> top , right, bottom, left

views
지정 방법
방법1.  4개의 방향을 각각 지정
        margin-top:10px;
        margin-right:20px;
        margin-bottom:30px;
        margin-left:40px;
        
방법2. 각 방향으로 한꺼번에 지정하는 단축형
		margin: 10px 20px 30px 40px;   
		margin 값은 음수가 될 수 있다. 
  • 가장 자주쓰는 속성

  • 마진은 컨텐츠의 테두리를 기준으로 외부공간 지정

  • 패딩은 컨텐츠의 테두리를 기준으로 내부공간 지정

  • 보통 모든 브라우저마다 마진 값이 기본적으로 지정되어 있다. 그리고 브라우저 마다 그 값이 다르다. 그래서 초기화 해주는 것이 페이지 레이아웃 잡을 때 편리하다.

    * { margin:0; padding:0}

  • px(픽셀), %(퍼센트), em(엠) 이렇게 세가지 단위를 가장 많이 사용

  • margin 값은 음수가 될 수 있다.

ex)

padding-top: 10px;
padding-right: 20px;
padding-bottom: 30px;
padding-left: 40px;
/* shorten */ padding : 10px 20px 30px 40px;

/* 상하 좌우 같은 경우 */
padding: 10px 20px 10px 20px;
/* shorten */ padding : 10px 20px;

/* 모두 다 같은 경우 */
padding: 10px 10px 10px 10px;
/* shorten */ padding : 10px;

/* 좌우만 같은 경우 */
padding: 50px 10px 80px 10px;
/* shorten */ padding : 50px 10px 80px;


margin음수값은 어떻게 응용할 수 있을까?

시간 지나면 점점 올라가 사라지는

<script>
	window.onload = function() {
		var margin = 0;
		var intervalId = setInterval(function() {
			var el = document.getElementById('box');
			/* console.log(el.style.marginTop) */
			margin -= 10;
			el.style.marginTop = margin + "px"
			if (margin < -200) {
				clearInterval(intervalId);
			}
		}, 100);
	}
</script>
<body>
    <div id='box' style='margin-top:0;'>
    Hello World
    </div>
</body>


width & height 지정

  • width 와 height 지정

    width 와 height의 속성값은 %(퍼센트) 또는 px(픽셀 사용)

  • 최대(최소) width 와 최대(최소) height 는 화면해상도에 맞는 페이지 작성할 때 유용

<style type="text/css">
.box1 {
     max-width: 980px;
     min-width: 800px;  
         
     max-height: 100px;
     min-height:50px;
     
     height:500px;  
     
     overflow-y:hidden;
     overflow-y:scroll;
     overflow-y:auto;
}
</style>
<body>
<div class="box1">
	<p>여름 장이란 애시당초에 글러서, 해는 아직 중천에 있건만 장판은 벌써 쓸쓸하고 더운 햇발이 벌려 놓은 전 휘장 밑으로 등줄기를 훅훅 볶는다. 마을 사람들은 거지반 돌아간 뒤요, 팔리지 못한 나무꾼패가 길거리에 궁싯거리고들 있으나 석유병이나 받고 고깃마리나 사면 족할 이 축들을 바라고 언제까지든지 버티고 있을 법은 없다. 춥춥스럽게 날아드는 파리떼도 장난꾼 각다귀들도 귀찮다. 얼금뱅이요 왼손잡이인 드팀전의 허생원은 기어코 동업의 조선달을 나꾸어 보았다.</p>
	
	<p>"그만 거둘까?" </p>
	
	<p>"잘 생각했네. 봉평 장에서 한번이나 흐붓하게 사본 일 있었을까. 내일 대화 장에서나 한몫 벌어야겠네." </p>
</div>

</body>
views

border 속성

  • 박스의 선을 긋는 속성으로 가장 많이 사용되는 속성중 하나이다.
지정 방법
[방법1].  일반형
    border-width: 속성값(두께지정)
    border-style : 속성값(dashed, dotted, double, inset, outset, ridge, solid, none)
    border-color : 색상지정
    
[방법2]. 
    border: 두께 스타일 컬러;
    
[방법3].
    border-top: 두께 스타일 컬러;
    border-right: 두께 스타일 컬러;
    border-bottom: 두께 스타일 컬러;
    border-left: 두께 스타일 컬러;

ex)

<style type="text/css">
body {
	font-family: "돋움", "맑은 고딕";
	font-size: 0.8em;
	color: #333;	
	margin:0;
	padding:0; 
}
.box1, .box2, .box3, .box4, .box5, .box6, .box7, .box8, .box9  {
	margin:10px;
	padding:10px;
	width:300px;
	background-color: #FFC;
}
.box1 { border: 4px dashed;}
.box2 {border:4px dotted;}
.box3 {border:4px double;}
.box4 {border:4px groove;}
.box5 {border:4px  inset;}
.box6 {border:4px outset;}
.box7 {border: 4px ridge;}
.box8 {border: 4px solid;}
.box9 {border: 4px none;}
</style>

<body>
<div class="box1">dashed</div>
<div class="box2">dotted</div>
<div class="box3">double</div>
<div class="box4">groove</div>
<div class="box5">inset</div>
<div class="box6">outset</div>
<div class="box7">ridge</div>
<div class="box8">solid</div>
<div class="box9">none</div>
</body>
views

상 하 좌 우 로 각각 개별 속성을 줄 수 있다.

views
<style type="text/css">
.box8 {
	border: 3px #f00 solid;
	border-color: #f00 #0f0 #ff0 #000;
	border-style: 1px 5px 10px 15px;
	border-top-width: 10px;
}
</style>
views

백그라운드 이미지 속성

  • 아름다운 페이지를 표현하는 제일 강력한 속성
  • 백그라운드 이미지를 사용하면 스타일만 제거했을 때 불필요한 이미지들이 대부분 사람짐 -> 프린트할 때 유용
  • 표준 웹 페이지 는 백그라운드 이미지로 이미지를 대부분 표현한다.
지정 방법
방법1  :
{background: 속성값;}

[속성값]
color:  색상을 지정,
image:  배경 이미지 지정 URL(‘……’)
repeat: 배경이미지의 반복  repeat, no-repeat, repeat-x, repeat-y
position:  백그라운드 이미지의 위치  x,y 축을 기준으로  픽셀  값으로 지정  하거나 top, center, bottom, left, right 를 복합적,  또는 하나만 사용 

ex)

백그라운드 컬러 : background-color:#022250;

백그라운드 url 지정: background-image:url('/wp_ch3/images/back_image2.jpg');

백그라운드 사이즈 : background-size:300px;

백그라운드 시작 위치 : background-position:0 0;

백그라운드 반복 :

# x 축으로 반복
background-repeat:repeat-x; 
# y 축으로 반복
background-repeat:repeat-y; 
# xy축으로 반복
background-repeat:repeat-xy;


**ex2) ul, li 속성에 image 삽입하기 **

<style type="text/css">
body {
	font-size:12px;
	margin:10px;
	padding:10px;
}

ul.bullet {
	list-style-type:none;
	margin:10px 0 0 0;
	padding:0;
	border:1px solid #999;
	border-radius:10px;
	width:350px;
}

ul.bullet li {
	width:350px;
	height:40px;
	margin:10px 0 0 0;
	padding:0 0 0 30px;
	border:0px solid #555;
	background-image: url(images/bullet1.gif);
	background-repeat: no-repeat;
	background-position: 10px top;	
}
</style>
<body>
<ul  class="bullet">
    <li> 1. 리스트의 bullet 을 백그라운드로 사용가능합니다.</li>
    <li> 2. 리스트의 bullet 을 백그라운드로 사용가능합니다.</li>
    <li> 3. 리스트의 bullet 을 백그라운드로 사용가능합니다.</li>
    <li> 4. 리스트의 bullet 을 백그라운드로 사용가능합니다.</li>
    <li> 5. 리스트의 bullet 을 백그라운드로 사용가능합니다.</li>
    <li> 6. 리스트의 bullet 을 백그라운드로 사용가능합니다.</li>
</ul>
</body>
views

float를 이용한 박스모델 정렬 속성

  • 박스 모델의 위치를 잡을 때 사용
  • 부유라는 의미로 박스 모델을 물에 띠워 오른쪽이나 왼쪽으로 보낸 다는 의미
지정 방법
float: 속성값
속성값에는
right(오른쪽), left(왼쪽), none(없음)

CSS 선택자와 CSS 적용 우선순위

|

기본 모양 : 선택자 { 속성: 속성값; }

기본적으로 태그, 클래스, 아이디 선택자 등이 있으며 그 외에 종속, 하위, 전체, 그룹 선택자 등이 웹 개발 실무에서 많이 사용된다.


태그 선택자

HTML 태그를 선택자로 사용하는 것

ex)

h1{font-size: 20px; color: #f00; margin:10px;}
h2{font-size: 14px; color: #36f; margin:5px; }
p {font-size: 12px; color: #333; margin:5px; }

클래스 선택자

  • 직접 이름(class)를 만들어 속성 지정

  • 모양 : .CLASSNAME { 속성이름: 속성값; }
  • .(점)으로 시작하고 첫문자는 영문자로 시작해야 하며, 대소문자 구별
  • 태그 선택자가 페이지내 모든 태그에 적용되었다면 클래스 선택자는 클래스 속성에서 같은 클래스 이름을 가진 엘리멘트들이 적용 대상이 된다.

ex)

<style>
.head{
	font-size: 60px;
	color: #333; 
	border:1px solid #999; 
	margin:25px; 
	padding:10px;
}
</style>
<body>
	<h1 class='head'>Hello World</h1>
</body>

아이디 선택자

  • 직접 이름(id)를 만들어 속성 지정

  • 모양 : #id { 속성이름: 속성값; }
  • #(샵)으로 시작하고 첫문자는 영문자로 시작해야 하며, 대소문자 구별
  • 기본적으로 HTML 엘리멘트의 id는 유일해야 하기 때문에 하나의 엘리멘트는 하나의 유일한 id를 가진다. 따라서 클래스 선택자와 차이는 페이지내 특정 하나의 엘리멘트에만 적용할 수 있다.

ex)

<style>
#head{
	font-size: 60px;
	color: #333; 
	border:1px solid #999; 
	margin:25px; 
	padding:10px;
}
</style>
<body>
	<h1 id='head'>Hello World</h1>
</body>

종속 선택자

  • 태그, 클래스, 아이디 선택자가 결합되 형태의 선택자

  • 태그에 결합된 형태는 태그중에 특정 아이디, 특정 클래스에만 적용
  • 클래스와 아이디에 모두 적용해서 스타일을 적용할 수 있지만, 너무 복잡한 조합은 피하는 것이 좋다.

ex)

모양

h1#head {  } 
.headline.selected {  }
input#user-id.focused { }
p.title {  }

코드

<style>
    p.txt1{color: red; font-weight: bold;}
    .txt1 {font-weight: normal; color: blue;}
</style>
<body>
	<p class='txt1'> Hello World </p>
</body>

하위 선택자

  • 선택자 내부의 자식 선택자에 속성을 지정하는 방식이다.

  • 엘리멘트 개별로 클래스 또는 아이디를 주지 않아도 스타일을 적용할 수 있다

ex)

모양

body h1, body h2, body p {  } 
p .txt1 {  }     
.headline span                                            

코드

<style>
    p a {text-decoration:underline; font-weight: bold; color: #F60;}
</style>
<body>
	<p class='txt1'> Hello <a>World</a> </p>
</body>

그룹 선택자

  • 각각의 선택자를 그룹으 지어 속성을 부여하는 것

  • 선택자들 간에 공통적인 속성이 있는 경우 일괄 적용으로 편리하게 사용

ex)

모양

body h1, body h2, body p {  } 
.right_box, .left_box {  }                               

코드

<style>
    h1, h2, h3 { color: #F60; text-decoration:underline; }
</style>
<body>
	<h1> Hello World </h1>
    <h2> Hello World </h2>
    <h3> Hello World </h3>
</body>

수도 선택자

  • 선택자로 바로 사용되는 것이 아니고 선택자와 함께 사용되어 선택자를 보조 하는 역할

  • 그 역할에 따라 몇가지가 정해져 있다.

    :hover   -> 마우스의 커서가 올라가 있는 상태
    :active  -> 마우스 커서를 클릭한 순간부터 놀기 직전까지 상태
    :link     -> 링크를 클릭하지 않은 그냥 링크만 되어 있는 상태
    :visited -> 링크를 눌러서 방문한 후 상태
    :before -> 문장이 시작되기 전
    :after   -> 문장이 끝난 다음
    
    :hover, :active, :link, :visited 는 a 태그와 함께 링크를 데코레이션 할 때 많이 사용된다                         
    

코드

<style type="text/css">
a:link    {color: #F60;text-decoration: none;}
a:hover   {color: #06F;text-decoration: underline;}
a:visited {color: #999;}
a:active  {color: #F00;text-decoration: line-through;}

h1:before {content: url(images/bul1.gif);}
h1:after  {content:  url(images/bul2.gif);}

table    {border-collapse:collapse; width:500px;}
td 	 { padding:10px;}
tr:hover { background-color: #FC6; }

</style>
<body>
<h1>제주글꼴 <strong>공개</strong> 되었습니다. </h1>
<p>원래는 2010년 5월 4일 공개된 글꼴이지만, <a href="#">다시 여러분에게 안내해</a> 드리겠습니다. 첫번째로 제가 생각한 내용은 대한민국에서 가장 유명한 관광지인 <a href="#">제주를 상징할만한 요소</a>는 많지만 디자인적으로 통일된 무언가가 있어야 하겠다. 두번째로 <a href="#">공항부터 시작해서 관광객들이</a> 접하는 모든 곳에서 일관된 디자인의 통일성과 상징성이 필요하다. </p>

<table border="1">
  <tr>
    <td>test1</td>
    <td>test2</td>
    <td>test3</td>
    <td>test4</td>
  </tr>
  <tr>
    <td>test1</td>
    <td>test2</td>
    <td>test3</td>
    <td>test4</td>
  </tr>
</table>
</body>

전체 선택자

  • 말그대로 전체 엘리멘트를 뜻한다. (와일드 카드)

  • 스타일이 적용되는 모든 엘리멘트에 일괄 적용하고자 할 때 사용한다.

  • 모양 : * { margin:0; padding:0 } : 기본중에 기본!!!!!!!

    ex)
    브라우저 별로 모든 엘리멘트는 기본적인 margin값과 padding값을 가지고 있다. 그런데 브라우저별로 이 값이 틀리기 때문에 디폴트로 0로 만들고 시작하자 -> 기본중에 기본!!!!!!!으로 꼭 설정하자!!!!ㄴ
    
  • 하위 선택자에 적용된 경우

    #idname *  또는  .classname *
    아이디가 idname 인 엘리멘트 내부의 모든 자식 엘리멘트에 해당 속성들이
    적용될 것이다. 
    클래스 이름이 classname 인 엘리멘틀들의 내부의  모든 자식 엘리멘트들에게 해당 속성들이 적용될 것이다. 
    

CSS 우선순위

  1. 속성 값 뒤에 !important 를 붙인 속성
  2. HTML에서 style을 직접 지정한 속성
  3. #id 로 지정한 속성
  4. .클래스, :추상클래스 로 지정한 속성
  5. 태그이름 으로 지정한 속성
  6. 상위 객체에 의해 상속된 속성

점수로 본다면

아이디 : 10000000 > 클래스 : 100 > 태그 : 1