내가 몰랐던 CSS, HTML

내가 몰랐던 CSS, HTML

강의나 서적을 통해 오랜만에 CSS, HTML를 빠르게 훑고 있다. 블로그에 자주 쓰지않아서 잊기 쉬운 것들이나 내가 몰랐던 CSS, HTML 특징? 에 대해 정리해놓으면 나중에 까먹었을 때 보기 편할 것 같아서 정리한다.

강조하기 위한 태그들

b 태그 vs. strong 태그

b 태그는 글자를 굵게만 만들지만, strong 태그는 그 내용이 중요하다는 의미 또한 담고 있다.

i 태그 vs. em 태그

둘 다 글자를 기울이지만, i 태그와 달리 em 태그는 강조하는 역할을 한다.

첨자 태그

<sup> 위 첨자

<sub> 아래 첨자

1<sup>st</sup>, 2<sup>nd</sup>

H<sub>2</sub>O, x<sub>n</sub>

밑줄, 취소선 태그

<u> : 철자 오류 표시

<s> : 더 이상 유효하지 않은 정보 표시

인용 태그

<blockquote> : 비교적 긴 인용문에 사용

<cite> : 저작물의 출처 표기

<q> : 비교적 짧은 인용문에 사용

<mark> : 인용문 중 하이라이트 또는 사용자 행동과 연관된 곳 표시

<abbr> : 준말/머릿글자 표시 ex) <abbr title="HyperText Markup Language">HTML</abbr>

목록 표현 태그

<ol> : 순서가 있는 목록, typestart 속성 사용 가능

테이블 태그

<caption> : 표 설명 또는 제목

<table>
    <caption>1에서 9까지의 숫자들</caption>
		...
  </table>

다른 곳으로의 링크

tel: 전화번호 연결, 스마트폰에서 누르면 전화창으로 감

전화 <a href="tel:010-1234-5678">010-1234-5678</a>

입력 받기

<input> 태그에 maxlength, minlength 속성이 있다.

<accept> : 받아들일 수 있는 파일 형식

multiple : 여러 파일 업로드 가능 여부

<input 
      id="fileIp"
      type="file"
      accept="image/png, image/jpeg"
      multiple
    >

<select> 태그 안에 <optgroup> 태그 활용 가능

<select id="shopping">
    <optgroup label="과일">
      <option value="f_apl">사과</option>
      <option value="f_grp">포도</option>
      <option value="f_org">오렌지</option>
    </optgroup>
    <optgroup label="채소">
      <option value="v_crt">당근</option>
      <option value="v_tmt">토마토</option>
      <option value="v_ept">가지</option>
    </optgroup>
    <optgroup label="육류">
      <option value="m_bef">소고기</option>
      <option value="m_prk">돼지고기</option>
      <option value="m_ckn">닭고기</option>
    </optgroup>
  </select>

결합자와 가상 클래스

/* 자식(1촌 자손) 결합자 */
.outer > li {
  color: dodgerblue;
}

/* 뒤따르는 모든 동생들 결합자 */
.starter ~ li {
  font-style: italic;
}

/* 뒤따르는 바로 다음 동생 결합자 */
.starter + li {
  font-weight: bold;
}

/* 첫 번째, 마지막 요소 가상 클래스 */
ol li:first-child,
ol li:last-child {
  color: yellowgreen;
}

/* ~가 아닌 요소 가상 클래스 */
.outer > li:not(:last-child) {
  text-decoration: line-through;
}

ul:not(.outer) li {
  font-weight: bold;
}

/* ~번째 요소 가상 클래스 */
/* #, #n, #n+#, odd, even 등 시도해보기 */
ol li:nth-child(3) {
  font-weight: bold;
  color: deeppink;
}

텍스트 스타일

text-transform 속성은 알파벳의 대소문자 표시에 사용된다.

p {
  /* capitalize, uppercase, lowercase */
  text-transform: none;
}

문단, 목록 스타일

letter-spacing으로는 자간 조절 word-spacing으로는 단어 간격 조절 text-indent 속성으로는 들여쓰기를 조절

list-style

ul {
  list-style: circle; // "👉" custom 가능
}

/* li별로 지정하는 것도 가능 */
ul > li:first-child {
  list-style: "🚩 "
}

ol {
  list-style: lower-alpha;
}

인라인 요소와 블록 요소

inlineblockinline-block
기본 너비컨텐츠만큼부모의 너비만큼컨텐츠만큼
width, height 속성무시적용적용
가로공간 차지공유독점공유
margin 속성 ( 바깥쪽 여백 )가로만 적용모두 적용 ( 상하 상쇄 )모두 적용
padding 속성 ( 안쪽 여백 )가로만 적용, 세로는 배경색만모두 적용모두 적용

박스 모델

뷰포트(viewport) 너비와 높이의 1/100 단위인 vw와 vh, 이들 중 큰 것과 작은 것의 1/100 단위인 vmax와 vmin도 유용하게 사용

텍스트가 한 줄일 경우 height과 line-height을 똑같이 맞춰주면 세로 방향에서 가운데로 정렬한 것과 같은 모습이 됨

블록 요소의 위, 아래 margin은 전후 블록 요소의 것과 상쇄됨

margin에서 auto 값은 너비가 지정된 블록 요소의 가로 방향에서 남은 공간을 채움

포지셔닝

position 속성은 자식 요소에게 대물림되지 않는다는 점이 있다.

static은 기본값으로, 전적으로 페이지의 흐름을 따르며, topbottomleftrightz-index 속성의 영향을 받지 않음

relative 값은 원래 위치를 기준으로 top~right 속성값이 적용, 요소의 위치는 이동하지만 요소가 차지하는 공백의 위치는 유지

absolute 값은 static이 아닌 첫 부모 요소를 기준으로 top~right을 사용하여 위치를 조정

블록 요소도 position이 absolute나 fixed가 되면 가로너비를 가득 채우지 않게 됨

요소 감추기

opacity 속성을 0으로 하면 모습만 감춤

visibility 속성을 hidden으로 하면 위 효과에 더해 마우스 오버 효과나 포커스, 클릭 등도 무효하게 됨

display 속성을 none으로 하면 위 효과들에 더해 자리도 차지하지 않게 됨

Flex

flex-wrap은 내부 요소의 갯수 X 길이가 컨테이너를 넘어갈 때 이들을 여러 줄에 걸쳐 나열할지 여부를 정한다.

flex 컨테이너 안 아이템의 속성들

flex-basis 는 메인 축상의 길이로, 컨테이너의 flex-direction 값에 따라 너비 또는 높이값으로 작용한다. 기본값은 auto

flex-grow는 빈 공간을 채울지 여부, 그리고 채울 시 다른 아이템들의 동 속성값에 비례해서 공백을 나눠갖음. 기본값은 0

flex-shrink 속성은 전체 공간이 부족할 때, 해당 아이템의 길이가 컨텐츠의 너비 또는 flex-basis 로 지정한 값보다 작아질 수 있을지를 지정한다. 기본값은 1이며, 증가할수록 길이가 많이 줄어든다.

flex: (flex-grow 값) (flex-shrink 값) (flex-basis 값);

플렉스 컨테이너의 아이템들은 order 속성을 사용해서 순서를 임의 변경할 수 있다.

<div style="order: 2;">1</div>

meta 태그

IE 관련 호환정보

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

모바일 등 특수 상황

  • 시각적 뷰포트: 사람에게 보여지는 영역
  • 레이아웃 뷰포트: 브라우저가 웹페이지를 그리는 영역
width뷰포트의 너비device-width : 기기의 화면 너비. 정수를 넣으면 픽셀 단위로
initial-scale페이지가 처음 로드될 때의 줌 레벨기본 1.0

접근성

이모지나 SVG 요소 등을 스크린 리더에게만 감추고 싶다면 aria-hidden 속성을 true로 만든다.

특정 정보를 나타내는 이모지나 SVG 요소 등을 스크린 리더가 특정 텍스트로 읽도록 하려면 role 속성에 이미지임을 명시하고 aria-label 속성에 값을 넣는다.

선택자 심화

/* 속성 값을 기준으로 선택 */
a[href="https://binary01.me"] {
  color: #ff4e00;
  font-weight: bold;
}

/* 특정 속성이 있는 요소 선택 */
input[disabled]+label {
  color: lightgray;
  text-decoration: line-through;
}

/* 속성값이 특정 텍스트를 포함하는 요소 */
span[class*="item"] {
  text-decoration: underline;
}

/* 속성값이 특정 텍스트로 시작하는 요소 */
span[class^="fruit"] {
  color: tomato;
}
span[class^="vege"] {
  color: olivedrab;
}

/* 속성값이 특정 텍스트로 끝나는 요소 */
span[class$="-1"] {
  font-weight: bold;
}

/* 체크된 것 */
input[type=radio]:checked+label {
  color: tomato;
  font-weight: bold;
}

/* 활성화된 것 */
input[type=radio]:enabled+label {
  text-decoration: underline;
}

/* 비활성화된 것 */
input[type=radio]:disabled+label {
  color: lightgray;
  text-decoration: line-through;
}

/* 인풋 등이 클릭되어 포커스된(입력을 받는) 상태 */
input[type="text"]:focus {
  /* border 밖의 선 (박스 요소가 아님) */
  outline: 2px solid dodgerblue;
}

/* 필수 입력요소 */
input:required {
  border-color: orangered;
}

/* 값이 유효한 입력요소 */
input[type="email"]:valid {
  border-color: green;
}

/* 값이 무효한 입력요소 */
input[type="email"]:not(:valid) {
  border-color: purple;
}

[class*="focus"]:focus {
  outline: 2px solid deeppink;
}
.tab-focus:focus,
.no-focus:focus {
  outline: none;
}

/* 탭으로 포커스된 요소에 적용 */
/* 브라우저 지원 확인 */
[class*="tab-focus"]:focus-visible {
  outline: 2px solid dodgerblue;
}

/* 부모 요소 내 첫 번째 ~요소 */
b:first-of-type {
  text-decoration: overline;
}

/* 부모 요소 내 마지막 ~요소 */
i:last-of-type {
  text-decoration: line-through;
}

/* 부모 요소 내 N번째 ~요소 */
b:nth-of-type(2) {
  text-decoration: underline;
}

/* 부모 요소 내 유일한 ~요소 */
div :only-of-type {
  text-decoration: overline line-through underline;
}

/* 부모 요소 내 종류 무관 유일한 요소 (독자) */
div :only-child {
  text-decoration: wavy underline tomato;
}

inherit : 스스로의 값을 포기하고 부모로부터 받은 상속값을 적용

initial : 브라우저가 부여한 값을 포기하고 각 속성의 초기값을 적용합니다. 브라우저가 기본적으로 제공하는 p의 display 속성은 block인데, 속성값을 initial로 주게 되면  display 속성의 초기값인 inline으로 바뀌게 된다.

unset : 상속되는 값이 있다면 inherit, 없다면 initial처럼 작동합니다.

벤더 프리픽스

접두사브라우저
-webkit-사파리, 크롬, 오페라
-moz-파이어폭스
-ms-엣지, 익스플로러
-o-구버전 오페라

텍스트 심화

vertical-align 속성

1. inline 요소 안에서의 사용 2. table-cell 요소 안에서의 사용

Grid

gird로 layout 만들기

<main>
    <nav>nav</nav>
    <aside>aside</aside>
    <section class="sec-1">.sec-1</section>
    <section class="sec-2">
      .sec-2
      <div>
        살어리 살어리랏다<br>쳥산애 살어리랏다<br>멀위랑 다래랑 먹고<br> 쳥산애 살어리랏다<br>얄리얄리 얄랑셩<br>얄라리 얄라<br>
        우러라 우러라 새여<br>자고 니러 우러라 새여<br>널라와 시름 한 나도<br>자고 니러 우니로라<br>얄리얄리 얄라셩<br>얄라리 얄라<br>
        가던 새 가던 새 본다<br>믈 아래 가던 새 본다<br>잉무든 장글란 가지고<br>믈 아래 가던 새 본다<br>얄리얄리 얄라셩<br>얄라리 얄라
      </div>
    </section>
    <section class="sec-3">.sec-3</section>
    <footer>footer</footer>
  </main>
body { margin: 0; }
main { width: 100vw; }

main > * {
  padding: 0.8em;
  color: slateblue;
  background-color: lavender;
}
.sec-2 div {
  margin: 2em;
  padding: 1.6em;
  line-height: 2.8em;
  font-family: serif;
  color: #555;
  background-color: white;
}

main {
  display: grid;
  grid-template-columns: 200px 1fr 300px;
  grid-template-rows: 80px 200px auto 200px;
  gap: 12px;
}

nav {
  grid-column: 1 / -1;
}
aside {
  grid-column: 1;
  grid-row: 2 / span 2;
}
.sec-1 {
  grid-column: 2 / -1;
}
footer {
  grid-column: 1 / -1;
}

변형

transform 속성은 주위 요소들에 영향을 끼치지 않으면서 요소의 모습을 바꾼다.

scroll-snap 관련 속성

scroll-snap-type

부모 요소에 스크롤 스냅할 방향( x | y | both )과 방식( proximity | mandatory )을 설정

  • proximity: 스냅할 위치에 가까울 때 스냅
  • mandatory: 항상 가까운 방향으로 스냅

scroll-snap-align

자식 요소에 스크롤 스냅될 기준선을 지정

<section class="result">
      <section style="scroll-snap-type: y;">
        <div class="_1" style="scroll-snap-align: start;"></div>
        <div class="_2"></div>
        <div class="_3"></div>
        <div class="_4"></div>
        <div class="_5"></div>
        <div class="_6"></div>
        <div class="_7"></div>
        <div class="_8"></div>
        <div class="_9"></div>
        <div class="_10"></div>
      </section>
</section>

aspect-ratio 속성

박스 요소의 가로 세로 비율을 지정한다.

Reference

제대로 파는 HTML CSS - by 얄코(Yalco) 강의 | 얄팍한 코딩사전 - 인프런

얄팍한 코딩사전 | , &nbsp; ⭐️&nbsp; 대학교 이메일 계정이 있다면?🎓&nbsp; 대학생 반값쿠폰 받으러 가기 (클릭) 👉 이런 것들을 배워요!&nbsp;📚 [사진] HTML과 CSS를 쌩초보를 위한 기초부터 현업 개발자를 위한 고급 활용법과 실전 팁

https://www.inflearn.com/course/제대로-파는-html-css/dashboard
제대로 파는 HTML CSS - by 얄코(Yalco) 강의 | 얄팍한 코딩사전 - 인프런