[Html/Css] 고급 정리 (SASS)

 

 

 

Pseudo

* pseudo class - (:) 다른 상태일 때 

* pseudo element - (::)내부의 일부분만 스타일을 줄 때

.text::first-letter {
  color : red;
}

.text::first-line {
  color : red;
}

.text::after {
  content : '뻥이지롱';
  color : red;
}

.text::before {
  content : '뻥이지롱';
  color : red;
}

first-letter: 앞 글자

first-line: 첫 문장

after: 뒤에 추가

before: 앞에 추가

 

.box::after {
  content : '';
  display : block;
  clear : both;
}

float 속성 사용시 clear: both; 속성 주기

 

 

 

shadow DOM

F12(개발자 도구) - 설정 - Show user agent shadow DOM 클릭

 

보려는 태그의 pseudo 속성값을 보면 해당 위치를 수정가능하다.

input::-webkit-input-placeholder {
  color : red; 
}

크롬: -webkit-

파이어폭스: -moz-

익스플로러: -ms-

 

* user agent stylesheet = 브라우저 기본 스타일같은 거

 - 기본 스타일은 apperance: none; 등을 사용해야 기본 스타일 적용을 해제 할 수 있다.

 

 

 

사이트 발행

1. github

아이디 / 아이디.github.io

Repository name 부분을 해당 형식으로 지정한다.

 

 

2. 일반 호스팅

cafe24.com 에서 웹 호스팅을 사고 FTP 프로그램(ex.Filezilla)을 이용해서 파일관리.

 

 

 

SCSS, SASS

css에 변수, 함수, import, 상속 등의 기능을 사용할 수 있게 만든 것.

$main-color: #2a4cb2; /* 변수 */
$sub-color: #eeeeee;

.box{
	font-color: $main-color; /* 변수 사용 */
}

- 자주 사용하는 색을 변수로 사용

 

$basic-size: 16px;

.background{
    font-size: ($basic-size - 2px);
}

- 사칙 연산도 가능하다.

 

 

* CSS에서 변수와 사칙연산 사용하기

:root{
  --main-color: red;
}

.background {
  background-color: var(--main-color);
  font-size: calc(16px - 2px);
}

 

 

 

 

* SCSS, SASS 차이

- SCSS

.background {
    color: red;
}

 

- SASS

.background
    color: red

 

 

* Nesting

- Nesting 전

.main-bg{
    width: 100px;
}

.main-bg h4{
    font-size: 16px;
}

.main-bg button{
    color: red;
}

 

- Nesting 후

.main-bg{
    width: 100px;
    h4{
        font-size: 16px;
    }
    button{
        color: red;
    }
}

 

 

 

* @extend

%btn{
    width: 100px;
    height: 100px;
    padding: 20px;
}

.btn-green{
    @extend %btn;
    color: green;
}

.btn-red{
    @extend %btn;
    color: red;
}

.btn-blue{
    @extend %btn;
    color: blue;
}

- %는 .대신 쓸 수 있는 임시 클래스를 의미한다. 아무것도 없는 css에 %를 쓴 임시클래스는 클래스로 컴파일 하고 싶지 않을 때 쓰는 기호이다. (% 대신 .도 사용 가능)

 

 

 

* @mixin

@mixin mixinEx($param, $param2) { /* 파라미터 받음 */
    font-size: $param; /* 파라미터 사용 */
    #{ $param2 }: -1px; /* 속성 부분은 #{} 으로 한번 더 감싸야 한다. */
}

h2{
    @include mixinEx(40px, letter-spacing); /* @mixin 적용 */    
}

h3{
    @include mixinEx(30px, width) /* @mixin 적용 */
}

h4{
    font-size: 10px;
    letter-spacing: -1px;
}

 

 

 

* @use

- reset.scss

body{
    margin: 0;    
}

div{
    box-sizing: border-box;
}

$main-color: brown;

 

- main.scss

@use 'reset'; /* 해당 경로의 파일 이름 */

*** @use나 @import 같은 경우는 항상 맨 위에 적용한다.

- 해당 파일 같은 경우는 css 파일을 컴파일 할 필요가 없기 때문에 _reset.scss 형식으로 앞에 '_'를 붙여서 생성한다. '_'를 붙인 경우는 css 파일을 만들지 않는다.

 

@use 'reset';

h2{    
    color: reset.$main-color; /* scss 파일의 변수를 사용 */
}

- @use로 가져온 scss 파일의 $나 @mixin을 사용하기 위해서는 위처럼 그 파일 명을 꼭 앞에 붙여야 한다.

 

 

 

Video, Audio
<video controls autoplay muted loop poster="썸네일경로" preload="metadata">
  <source src="비디오파일경로">
</video>
  • controls: 재생 버튼이 생김
  • autoplay: 자동 재생 (chorm에선 muted와 함께 써야 함)
  • muted: 음소거
  • loop: 반복재생
  • poster: 썸네일 이미지 생성
  • preload: 미리 다운 받을지 정함. (auto, metadata, none)

 

* 비디오 배경 가운데 정렬

.video-box {
  height: 500px;
  width: 100%;
  overflow: hidden;
  position: relative;
}

.video-container {
  position: absolute;
  width : 100%;
  top: 50%;
  left: 50%;
  transform : translate(-50%,-50%);
  z-index: 0;
}

 

 

자식 요소를 position absolute, top, left, transform 속성을 주면 position relative를 가진 부모 요소의 정 가운데에 위치 시킬 수 있다.

 

 

 

 

transform & animation
.box {
  transform : rotate(10deg); /* 회전 */
  transform : translate(10px, 20px); /* 좌표이동 */
  transform : scale(2); /* 확대축소 */
  transform : skew(30deg); /* 비틀기 */
  
  /*transform 두개 이상을 한꺼번에 쓰려면*/
  transform : rotate(10deg) translateX(30px);
}

 

* transition과의 차이

- transition은 시작스타일, 최종스타일, 트리거, transition을 변경하면 a -> b 형태로 변환이 가능하다. 하지만 추가적으로 a -> b -> c 등 이나 정지, 복잡한 움직임 등은 하지 못함. (@keyframes 사용해야 함)

 

 

@keyframes

@keyframes moveTo{
  0% {
    transform : translateX(0px); /* 애니메이션이 0%만큼 동작시 */
  }
  50% {
    transform : translateX(-20px); /* 애니메이션이 50%만큼 동작시 */
  }
  100% {
    transform : translateX(20px); /* 애니메이션이 100%만큼 동작시 */
  }
}

- 애니메이션을 정의하기 위한 공간이다.

 

.box:hover {
  animation-name : moveTo; /* 애니메이션 이름 (만든 keyframes) */
  animation-duration : 1s; /* 애니메이션 동작시간 */
  animation-timing-function : linear; /*베지어 주기*/
  animation-delay : 1s; /*시작 전 딜레이*/
  animation-iteration-count : 3; /*몇회 반복할것인가*/
  animation-play-state : paused;  /*애니메이션을 멈추고 싶은 경우 자바스크립트로 이거 조정*/
  animation-fill-mode: forwards;  /*애니메이션 끝난 후에 원상복구 하지말고 정지*/
}

 

 

* transform을 쓰는 이유

 - browser에는 RenderTree부터 layout, paint, composite 등의 작업을 순서대로 하면서 화면을 만들어 나가는데, margin이나 width 등은 layout 단계에서 수정이 일어나게 되어 layout부터 composite까지의 작업이 다시 일어나야 하지만 transform은 composite 단계에서 작업이 일어나기 때문에 상대적으로 성능부분에서 이득이 있다.

 

 

* css 성능 향상

 

- will-change

.box {
  will-change: transform;
}

바뀔 내용을 미리 렌더링한다. 애니메이션을 주는 스타일이 느리게 동작한다면 사용한다. 성능이 안나올 때만 사용하자.

 

 

- 하드웨어 가속

.box {
  transform: translate3d(0, 0, 0); /* 3D 이동을 하여 GPU 사용하여 연산 */
}

3D 이동을 하는데 값을 0,0,0을 주었기 때문에 움직이지 않는 이동명령을 내린 뒤, 추가적으로 필요한 transform을 적용하면 GPU를 통해서 transform 속성을 연산할 수 있다.

 

 

 

CSS Grid
.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr 1fr; /* 격자 열 (fr은 배수) */
  grid-template-rows: 100px 100px 100px; /* 격자 행 */
  grid-gap: 10px;
}

 

 

* 레이아웃 만드는 법

 

1. 자식 높이와 폭 조정

<div class="grid-container">
    <div class="grid-nav"></div>
    <div class="grid-sidebar"></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</div>
.grid-nav {
  grid-column : 1 / 4; /* 열의 1번 째 선부터 4번째 선까지 병합 */
  grid-row : 2 / 4; /* 행의 2번 째 선부터 4번째 선까지 병합 */
}

- grid-column: 열의 시작 선 / 열의 끝 선

- grid-row: 행의 시작 선 / 행의 끝 선

 

 

2. 자식 이름으로 부모가 배치

<div class="grid-container">
    <div class="grid-nav">헤더</div>
    <div class="grid-sidebar">사이드바</div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</div>
.grid-nav {
  grid-area: 헤더;
}

.grid-sidebar {
  grid-area: 사이드;
}

- grid-area: 자식 태그의 이름 지정할 수 있음.

 

 

.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr 1fr;
  grid-template-rows: 100px 100px 100px;
  grid-gap: 10px;
  grid-template-areas: 
    "헤더 헤더 헤더 헤더"
    "사이드 사이드 . ."
    "사이드 사이드 . ."
}

grid-template-areas 속성으로 지정한 모양대로 grid를 나눌 수 있음

 

 

 

position sticky
<body style="background : grey; height : 3000px">

<div class="grey">
  <div class="image">
    <img src="appletv.jpg" width="100%">
  </div>

  <div style="clear : both"></div>
  <div class="text">Meet the first Triple Camera System</div>
    
</div>

</body>
.grey {
  background: lightgrey;
  height: 2000px;
  margin-top: 500px;
}
.text {
  float: left;
  width : 300px;
}
.image {
  float: right;
  width : 400px;
  position: sticky;
  top: 100px;
}

position: sticky; 는 스크롤할 만큼의 크기에 부모 박스가 있어야하고 top을 꼭 지정해 주어야 한다.

 

 

 

3D 애니메이션
transform : rotateX(180deg); /* 가로를 대칭으로 회전 */
transform : rotateY(180deg); /* 세로를 대칭으로 회전 */
transform : rotateZ(180deg); /* 모니터와 사용자간을 대칭으로 회전 */
transform-style: preserve-3d; /* 3d 사물처럼 동작하기 위해 줌 */
backface-visibility: hidden; /* 뒷면의 그림자(앞면의 대칭) 안보이게 처리 */

 

 

 

 

 

 

'Html&Css' 카테고리의 다른 글

[Html/Css] 중급 정리  (0) 2021.11.15
[Html/Css] 기초 정리  (0) 2021.11.05

[Html/Css] 중급 정리

 

 

font-family 설정
body {
  font-family : 'gulim', 'gothic'
}

 

폰트를 여러개 나열하면 차례대로 적용하며 없다면 그 다음 폰트를 적용한다.

 

 

* @font-face

@font-face {
    font-family: '고딕';
    src: url(../font/gothic.ttf);
}

 

폰트가 사용자의 컴퓨터에 저장이 되어 있지 않으면 적용이 되지 않기때문에 해당 스타일을 사용한다. (url 경로에 있는 폰트 파일을 가져온다.)

 

 

* ttf, woff

 - 폰트 파일 중 확장자가 .ttf인 파일은 대체로 용량이 크기 때문에, woff 파일을 쓰면 용량도 적고 서버에서 성능도 챙길 수 있음.

 

 

* IE의 낮은 버전에서 폰트사용하기

@font-face { 
  font-family: 'Gothic'; 
  font-weight: 400; 
  src: url(GothicR.eot); 
  src: url(GothicR.eot?#iefix) format('embedded-opentype'), 
      url(GothicR.woff) format('woff'), 
      url(GothicR.ttf) format('truetype'); 
}

 

 

* 구글 폰트 사용하기

 

fonts.google.com

 

Google Fonts

Making the web more beautiful, fast, and open through great typography

fonts.google.com

 

해당 사이트의 폰트에 들어가서 link(html)나 @import(css)로 복붙하고 사용하면 된다.

 

 

* Anti-aliasing (윈도우에 한함)

 

 - 폰트가 비트맵 이미지 마냥 살짝 깨져보이는 현상

transform : rotate(0.03deg);

 

기울기를 살짝 돌려주면 글자가 매끈해 보인다.

 

 

 

Flexbox
<div class="flex-container">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>
.flex-container {
  display : flex;
  justify-content : center;  /* 좌우정렬 */
  align-items : center;  /* 상하정렬 */
  flex-direction : column; /* 세로정렬 */
  flex-wrap : wrap;  /* 폭이 넘치는 요소 wrap 처리 */
}
.box {
  flex-grow : 2;  /* 폭이 상대적으로 몇배인지 결정 (중간에 삽입하면 크기가 큰 박스가 생김)*/
}

 

메뉴 만들 때, 왼쪽에 로고 오른 쪽에 메뉴 정렬을 하고싶다면

<div class="flex-container">
  <div class="box"></div>
  <div class="box" style="flex-grow : 1"></div>
  <div class="box"></div>
</div>

위와 같은 방법으로 임시로 만든 div에 flex-grow로 크기를 키워준 박스를 삽입한다.

 

 

 

 

head 태그

- CSS 파일

<head>
  <link href="css/main.css" rel="stylesheet">
</head>

1. css/main.css (상대경로: 현재 파일의 경로부터 시작)

2. /css/main.css (절대경로: 현재 사이트에 메인(root) 경로부터 시작)

 

 

- style 태그

<head>
  <style>
    .main {
      
    }
  </style>
</head>

html은 코드 진행이 위에서 아래이기 때문에 body보다 head에 넣는 편이 낫다.

 

 

- 제목

<head>
  <title>페이지 제목</title>
</head>

 

 

- meta 태그

<head>
  <meta charset="UTF-8">
  <meta name="description" content="검색 시 제목으로 뜨는 부분">
  <meta name="keywords" content="검색에 도움을 주는 키워드">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

1. UTF-8: 캐릭터셋 인코딩

2. description: 구글 등의 브라우저에서 검색 시 화면에 뜨는 글

3. keywords: 검색에 도움을 주는 키워드

4. viewport: 화면 시작 시 렌더링 하는 부분 (width=device-width: 장치 기기의 실제 폭으로 렌더링, initial-scale: 화면 줌 레벨)

5. open graph

<head>
  <meta property="og:image" content="/이미지경로.jpg">
  <meta property="og:description" content="사이트설명">
  <meta property="og:title" content="사이트제목">
</head>

페이스북에서 만든 메타태그로 커스터마이징 하여 사용 가능

 

 

 

- Favicon

<head>
  <link rel="icon" href="아이콘경로.ico" type="image/x-icon">
</head>

ico, png 등 파일 가능, 호환성은 ico가 제일 좋으며 사이즈는 32 x 32로 사용한다.

 

 

 

반응형 레이아웃

- 웹의 단위

.box {
  width : 16px; /* 기본 px 단위 */
  width : 1.5rem; /* html태그 혹은 기본 폰트사이즈의 1.5배 */
  width : 2em; /* 내 폰트사이즈 혹은 상위요소 폰트사이즈의 2배 */
  width : 50vw; /* 브라우저(viewport) 화면 폭의 50% */
  width : 50vh; /* 브라우저(viewport) 화면 높이의 50% */
}

typography 디자인 할 때, rem을 사용하긴 함. (18px = 1.2rem, 22px = 1.4rem)

 

 

- viewport 설정

<meta name="viewport" content="width=device-width, initial-scale=1.0">

태블릿이나 모바일 등에서 반응형을 하기 위함.

 

 

- media query

@media screen and (max-width : 1200px) { 
  .box {   
  } 
  
  .box2 {   
  } 
} 

@media screen and (max-width : 768px) { 
  .box { 
    font-size : 30px; 
  } 
}

css 파일의 최하단에서 사용함. 설정한 css에 중복이 발생하면 더 밑에 있는 스타일을 적용한다. 크기는 대체로 (1200px / 992px / 768px / 576px) 사이즈를 권장함. 1200 / 768 or 992 / 576 등으로 사용한다.

 

 

 

개발자 도구 디버깅 및 IE 호환성

- Ctrl + Shift + C 를 누르거나 f12 누르면 원하는 요소의 디버깅이 가능하다. style을 보면 해당 요소에 적용 되어있는 모든 css를 확인할 수 있음.

 

- IE 11 버전 이하에서는 적용되지 않는 요소들이 많은데 조건부로 style을 적용할 수 있다.

<!--[if lt IE 10]>
  <link rel="stylesheet" type="text/css" href="ie/main.css" />
<![endif]-->

해당 조건부로 첨부하면 인터넷 익스플로러 10 미만에서 스타일이 적용된다. (link 태그는 중요할 수록 밑으로 보내는게 좋다.)

 

 

 

Font awesome

- download

https://fontawesome.com/start

 

Font Awesome

The world’s most popular and easiest to use icon set just got an upgrade. More icons. More styles. More Options.

fontawesome.com

 

zip파일 다운로드 후 사용

 

 

- cdn

https://cdnjs.com/libraries/font-awesome

 

font-awesome - Libraries - cdnjs - The #1 free and open source CDN built to make life easier for developers

The iconic SVG, font, and CSS toolkit - Simple. Fast. Reliable. Content delivery at its finest. cdnjs is a free and open-source CDN service trusted by over 12.5% of all websites, serving over 200 billion requests each month, powered by Cloudflare. We make

cdnjs.com

 

url 긁어와서 사용

 

 

fontawesome에선 주로 아이콘을 많이 사용한다.

 

 

 

Transition css 애니메이션
.box {
  opacity : 0; /*투명도 (1: 불투명, 0: 투명)*/
  transition : all 1s; /*1초 동안 모든 스타일 중 하나가 변할 때 동작*/
}
.box {
  transition-delay: 1s; /* 시작 전 딜레이 */
  transition-duration: 0.5s; /* transition 작동 속도 */
  transition-property: opacity; /* 어떤 속성에 transition 입힐건지 */
  transition-timing-function: ease-in; /* 동작 속도 그래프조정 */
}

 

- 애니메이션 만드는 순서

1. 시작 스타일 정하기

2. 최종 스타일 정하기

3. 언제 최종스타일로 변할지 트리거 주기 (대부분 hover)

4. transition으로 서서히 동작하게 하기

 

 

* Tip

<div style="position: relative;">
  <div class="overlay-wrap"> <!-- 회색화면 추가 동작을 위해 한번 더 감싼다. -->
    <div class="overlay-black"> <!-- 회색화면 -->
      <span>$60</span>
    </div>
  </div>
  <img src="img/product1.jpg"> <!-- 이미지 -->
</div>

 

 

 

 

Bootstrap

https://getbootstrap.com/docs/5.1/getting-started/download/

 

Download

Download Bootstrap to get the compiled CSS and JavaScript, source code, or include it with your favorite package managers like npm, RubyGems, and more.

getbootstrap.com

 

ex)

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <title>Hello, world!</title>
  </head>
  <body>
  
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
  </body>
</html>

 

 

- Bootstrap Grid

<div class="row">
  <div class="col-md-4"></div>
  <div class="col-md-4"></div>
  <div class="col-md-4"></div>
</div>
  • row : 행(row)을 뜻함
  • col : 열(column)을 뜻함
  • md : 반응형을 위한 크기지정 (sm : 576px, md : 768px, lg : 992px, xl : 1200px)
  • 숫자 : 한 row를 12분할 했을 때, 가져 갈 크기 비율

 

 

 

CSS 덮어쓰기

- 하나의 CSS 파일

.box {
  background : red;
}

.box {
  background : blue; /* 하단의 스타일이 우선 적용 */
}
<link href="css/main.css" rel="stylesheet">
<link href="css/main2.css" rel="stylesheet"> <!-- 하단이 css가 우선 적용 -->

 

 

- 우선 순위 적용

.div {
  background : red !important; /* 우선 순위 10000 */
}

#div {
  background : blue; /* 우선 순위 100 */
}

.div {
  background : blue; /* 우선 순위 10 */
}

div{
  background : blue; /* 우선 순위 1 */
}

 

 

- Specificity(구체성 점수) 적용

div.container div.box { /* 22점 */
  color : red;
}

div.container .box { /* 21점 */
  color : blue;
}

 

 

 

 

'Html&Css' 카테고리의 다른 글

[Html/Css] 고급 정리 (SASS)  (0) 2021.11.17
[Html/Css] 기초 정리  (0) 2021.11.05

[Html/Css] 기초 정리

 

 

기본 글씨 서체
font-size : 20px; /*글자 크기*/
font-family : 'gulim'; /*서체*/
color : black; /*글자 색*/
letter-spacing : -1px; /*자간*/
text-align : center; /*글자 정렬 위치*/
font-weight : 600; /*글자 굵기*/

 

 

가운데 정렬
display : block;
margin-left : auto;
margin-right : auto;

 

 

* span과 p의 차이

span = inline 속성 -> 요소의 폭 높이 등 설정 불가 (기본적으로 display:inline;)

p = block 속성 -> 요소의 폭 높이 등 설정 가능 (기본적으로 display:block;)

 

 

네모 박스 디자인 속성
width: 200px; /*너비*/
background-color: cadetblue; /*배경색*/
margin: 10px; /*여백*/
padding: 40px; /*안쪽 여백*/
border: 4px solid black; /*테두리 (두께 종류 색상)*/
border-radius: 5px; /*테두리 둥글게*/

 

 

* inherit

일부 속성은 상속이 가능하다. 예를 들어 글자와 관련된 스타일들이 주로 inherit 된다.

 

 

레이아웃 만들기

기본적으로 header, navbar, content, footer로 나눈다. (공통적으로 div -> block 속성)

 

  • float 사용
.container{
    width: 1000px;
} /* 해당 레이아웃의 흘러넘침을 방지하는 감싸는 컨테이너*/

.header{
    width: 100%; /*부모 요소의 style의 %를 따름*/
    height: 100px;
    background-color: black;
}

.navbar{
    width: 20%;
    height: 400px;
    background-color: red;
    float: left; /* 해당 요소를 공중에 띄워서 left 정렬*/
}

.content{
    width: 80%;
    height: 100px;
    background-color: blue;
    float: left; /* 해당 요소를 공중에 띄워서 left 정렬*/
}

.footer{
    width: 100%;
    height: 100px;
    background-color: yello;
    clear: both; /* float 속성으로 인해 공중에 뜬 태그들의 다음으로 정렬하기 위해 사용*/
}

 

 

  • inline-block 사용
.container{
    width: 1000px;
} /* 해당 레이아웃의 흘러넘침을 방지하는 감싸는 컨테이너*/

.header{
    width: 100%; /*부모 요소의 style의 %를 따름*/
    height: 100px;
    background-color: black;
}

.navbar{
    width: 20%;
    height: 400px;
    background-color: red;
    display: inline-block; /*inline-block 속성 추가*/
    vertical-align: top; /* inline 요소에 사용*/
}

.content{
    width: 80%;
    height: 100px;
    background-color: blue;
    display: inline-block; /*inline-block 속성 추가*/
}

.footer{
    width: 100%;
    height: 100px;
    background-color: yello;
}

 

* display: block; = 한 행을 전부 차지 함.

* display: inline-block; = 내 크기 만큼 차지 함.

 

*** inline-block는 html의 태그 간에 띄어쓰기(공백)가 생기면 그대로 공백이 반영 된다. ***

 

 

  - 해결 1) 태그 사이에 공백을 제거한다. (사실 상 안쓰는게 나음)

<div class="navBar"></div><div class="content"></div>

 

  - 해결 2) 주석을 사용한다.

<div class="navBar"></div><!--
--><div class="content"></div>

 

  - 해결 3) 부모의 폰트 사이즈 0으로 만들기

<div style="font-size: 0px;">
	<div class="navBar"></div>
	<div class="content"></div>
</div>

 

 

* inline or inline-block 속성을 사용하게되면 vertical-align: top; 태그를 사용한다.

vertical-align을 사용하는 이유는 inline 속성의 주변에 글씨를 쓸 때 baseline이 존재할 경우, baseline 위 쪽에 오려고 하기때문에 vertical-align으로 위치를 지정해 주어야 한다.

 

 

셀렉터
.content li{} /* 자식의 요소 전부 다 */
.content > li{} /* 직계 자식 요소 만 */
<div class="content title"></div> <!-- 클래스 여러개 부여 -->

 

 

 

 

배경
.background {
  background-image : url(../img.jpg); /*배경 이미지 url*/
  background-size : cover; /*배경 크기 cover: 꽉 채움, contain: 배경이 안짤리게 꽉 채움*/
  background-repeat : no-repeat; /*배경 이미지 반복 안함*/
  background-position : center; /*배경 위치*/
  background-attachment : fixed; /*스크롤 시 고정효과*/
  /*filter 속성을 사용하면 더욱 스타일 효과를 줄 수 있음*/
}

 

*margin collapse

두개의 박스에 테두리가 겹치면 하나의 박스에 스타일을 부여했을 시 같이 움직이는 현상.

 - 해결: padding을 1px 준다.

 

 

좌표 레이아웃 설정
.box {
  position: relative; /*좌표 속성의 기준 점*/
  top : 20px; /*위에서 20px*/
  left : 30%; /*왼쪽에서 30%*/
}

 

* position

 - 좌표 이동을 가능하게 한다.

 - 공중에 뜬다 (like float)

 

.box {
  position : static; /* 기준이 없음 (기본 값) */
  position : relative; /* 기준 */
  position : absolute; /* 기준이 부모 중 relative 속성이 있는 것 */
  position : fixed; /* 기준이 브라우저 창 (viewport) */
}

 

 - position: absolute 일 때, 가운데 정렬하기

.button {
  position : absolute; 
  left : 0;
  right : 0; 
  margin-left : auto;
  margin-right : auto;
  width : 아무값이나
}

 

 

max-width & box-sizing

* max-width

 - 기본적으로 width와 같이 사용. width 값을 %로 지정 해놓고 max-width 값을 설정하면 창이 커질 때 최고 width 값이 max-width 값으로 정해진다. (min-width는 반대)

 

* box-sizing

div {
  box-sizing : border-box; /*박스의 폭은 border까지 포함*/
  box-sizing : content-box; /*박스의 폭은 padding 안쪽*/
}

content-box의 width는 margin, padding, border를 포함 하지 않은 값으로 해당 하는 값이 더 해진 값이 box 값이지만 border-box는 해당 하는 값과 width 값의 총 합이 설정한 값이 된다.

 

 

vertical-align 상하정렬 속성

- 테이블

td, th {
  vertical-align : middle;
}

 

- inline 요소

span {
	vertical-align: top;
    vertical-align: super;
    vertical-align: middle;
    vertical-align: sub;
    vertical-align: bottom;
}

 

 

div 태그 table로 바꾸기
.box {
  display : table;
  display : table-row;
  display : table-cell;
}

 

 

Pseudo-class 셀렉터
:any-link /*방문 전, 방문 후 링크 한번에 선택할 때*/
:playing /*동영상, 음성이 재생중일 때*/
:paused /*동영상, 음성이 정지시*/
:autofill /*input의 자동채우기 스타일*/
:disabled /*disabled된 요소 스타일*/
:checked /*체크박스나 라디오버튼 체크되었을 때*/
:blank /*input이 비었을 때*/
:valid /*이메일 input 등에 이메일 형식이 맞을 경우*/
:invalid /*이메일 input 등에 이메일 형식이 맞지 않을 경우*/
:required /*필수로 입력해야할 input의 스타일*/
:nth-child(n) /*n번째 자식 선택*/
:first-child /*첫째 자식 선택*/
:last-child /*마지막 자식 선택*/

* hover, focus, active 스타일의 순서 -> 차례로 적용해야 작동이 잘 됨.

 

 

OOCSS, BEM

 - OOCSS

btn {
  font-size : 10px;
  padding : 8px;
  border : none;
  cursor : pointer;
}

.bg-red {
  background : red;
}
.bg-blue {
  background : blue;
}
<button class="btn bg-red">빨간버튼</button>
<button class="btn bg-blue">파란버튼</button>

 

 

 - BEM(Block__Element--Modifier)

<div class="main">
  <img class="main__img">
  <h4 class="main__h1">이름</h4>
  <p class="main__content">소개글</p>
  <button class="main__button--red">빨간버튼</button>
  <button class="main__button--blue">파란버튼</button>
</div>

 

'Html&Css' 카테고리의 다른 글

[Html/Css] 고급 정리 (SASS)  (0) 2021.11.17
[Html/Css] 중급 정리  (0) 2021.11.15

+ Recent posts