[    CSS로 일정 길이 이상일 때 텍스트 줄임말 ...로 표시하기    ]




1. 가끔 일정 길이를 넘어가면 문자열이 ...으로 생략되듯이 표시되게 하고 싶거나


2. 혹은, textarea 내에서 문자열을 길게 입력하면 지정한 길이 이상일 때 자동으로 개행(줄바꿈) 되도록 처리하고 싶을 때가 있다.



먼저, 1번 일정 길이를 넘어가면 문자열이 ... 으로 생략되듯이 표시하게 하려면 다음의 조건이 필요하다.

1) width가 고정적일 것( 최대 표시될 너비를 꼭 지정되어야 한다.)

2) overflow: hidden; 을 사용해 영역을 감출 것

3) 아래줄로 내려가는 것을 막기위해 white-space: nowrap 등이 필요

4) 마지막으로, 반드시 block요소여야 한다. inline요소에는 적용이 안됨... 따라서 인라인 태그 요소일 경우 => display:block으로 지정해 주어야 함!

5) ...으로 표시하기 위해서 text-overflow:ellipsis 로 지정해야한다.


이를 적용하면

<style type="text/css">
  body p {

  display:block;
  overflow: hidden; 
  text-overflow: ellipsis;
  white-space: nowrap; 
  width: 100px;
  }
</style>

처럼 지정하면 된다.

-------------------------------------------------------------------------------------------

다음으로...

일정 길이 이상이면 자동으로 개행이 되도록 textarea에서 설정할 경우는 다음과 같이

white-space:normal; 를 써주면 된다. 역시 width가 지정되어야 한다.

[    float 속성    ]


float 속성은 본래 이미지 태그와 글단락이 같이 있을 때 한 줄에 같이 나오기 위해 주로 사용되었는데


그뿐만 아니라 레이아웃을 잡을때도 많이 이용되게 되었다. 하지만 최근에는 flex가 도입되면서 점차 float를 이용한

레이아웃을 잡는 방식은 줄어들고 있는 추세이다.


float:left

float:right

처럼 사용해서 태그가 배치될 위치를 지정하게 된다.

아래의 예제에서는 본래 이미지 태그와 p태그는 block 속성에 의해 이미지 태그가 오고 그 아래에 문단 태그가 와야 정상이지만

이미지에 float:right를 줌으로서 img는 오른쪽으로 배치가 되고 문단이 왼쪽으로 배치되었다.


하지만 그 이후에 또 나오는 p태그(id="clearAdjustP")의 경우는 이러한 float의 영향을 배제시키고 싶기 때문에

float를 해제하는 clear 속성을 이용해서 clear:both해주면 float:left든 float:right든 다 해제한다는 의미가 되기 때문에

정상적으로 이미지 태그 아래에 출력되게 되는 것을 알 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title>float attribute</title>
    <style media="screen">
      img{
        width:300px;
        float:right;
        margin: 20px;
      }
      p{
        border:1px solid gray;
      }
      .clearAdjustP{
        clear: both;
      }
    </style>
  </head>
   
    <p>
      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate minus, obcaecati quia eaque perspiciatis! Vero cum libero architecto. Odit, et. Totam expedita Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate minus, obcaecati quia eaque perspiciatis! Vero cum libero architecto. Odit, et. Totam expedita Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate minus, obcaecati quia eaque perspiciatis! Vero cum libero archi
    </p>
    <p id="clearAdjustP">
      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate minus, obcaecati quia eaque perspiciatis! Vero cum libero architecto. Odit, et. Totam expedita Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate minus, obcaecati quia eaque perspiciatis! Vero cum libero architecto. Odit, et. Totam expedita Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptate minus, obcaecati quia eaque perspiciatis! Vero cum libero archi
    </p>
  




float로 만든 Holy Grail Layout이다.

하지만... Flex가 더 유연함으로 FLex로 만드는 것을 권장한다...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title>Float Holy Grail Layout</title>
    <style media="screen">
      *{
        box-sizing: border-box;
      }
      .container{
        width:540px;
        border:1px solid gray;
        margin:auto;
      }
      header{
        border-bottom:1px solid gray;
      }
      nav{
        float:left;
        width:120px;
        border-right:1px solid gray;
      }
      article{
        float:left;
        width:300px;
        border-left: 1px solid gray;
        margin-left:-1px;
        border-right: 1px solid gray;
      }
 
      aside{
        float:left;
        width:120px;
        border-left: 1px solid gray;
        margin-left: -1px;
      }
      footer{
        clear:both;
        border-top:1px solid gray;
        text-align: center;
        padding:20px;
      }
    </style>
  </head>
   
 
    <div class="container">
      <header>
          <h1>CSS</h1>
      </header>
 
      <nav>
        <ul>
          <li>position</li>
          <li>float</li>
          <li>flex</li>
        </ul>
      </nav>
 
      <article class="">
        <h2>float</h2>
        Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sit quae earum enim ab distinctio corrupti eius reprehenderit non, rerum ut nisi autem cum sint perferendis eum id velit, molestias nesciunt. Ullam dignissimos consequuntur explicabo id voluptas vel deleniti nesciunt veritatis iusto commodi, laudantium cumque vero deserunt laboriosam. Ea, qui
 
      </article>
 
        <aside class="">
          advertise
        </aside>
 
        <footer>footer</footer>
 
    </div>
      


[    반응형 웹을 만드는 Media Query    ]


화면 크기에 따라 반응하는 웹을 만드는데 필요한 media query에 대해 학습합니다.


@media (){

} 라는 구조를 가지고 있는대요


- @media(width:500px){

width가 500px일 때 지정할 속성을 지정하게 됨.

}


- @media(max-width:500px){

최대 500px까지 즉 0~500px까지를 의미

}


- @media(min-width:500px){

최소 500px 즉 500px 이상을 의미한다.

}


만약 500 ~ 600을 지정하고 싶다면?

cascading을 주의해야한다. 나중에 쓴 것이 우선순위가 더 높다는 것에 유의!

@media(max-width:600px){

background-color:red;

}

@media(max-width:500px){

background-color:blue;

}

이렇게하면 500 ~ 600 px까지는 red가 적용되고 500이하가 되면 blue가 적용된다.


만약 두개의 순서를 바꿔서 쓰면? 600px이하면 0픽셀이 될때까지 red가 나오게 된다. cascading에 의한 우선순위때문에

이점을 유의해서 작성하자.


또한, 모바일 기기에서도 반응형이 잘 적용될 수 있도록 다음의 meta 태그를 넣도록 하자.


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <!--
      모바일 화면에 적합하게 나오도록 설정하는 meta
    -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Media Query Study</title>
    <style media="screen">
 
/*
  아래는 0 ~ 500px
        501 ~ 600px
        601 ~ x 까지를 지정
*/
 
      @media (max-width:600px){
        body{
          background-color:green;
        }
      }
 
      /*
        최대 500px까지 적용될 속성(500px이하)
      */
      @media (max-width:500px){
        body{
          background-color:red;
        }
      }
 
      @media (min-width:601px){
        body{
          background-color: blue;
        }
      }
 
 
    </style>
  </head>
   
 
  



Flex로 만든 layout에 Media Query를 적용해 보기


아래는 모바일 화면(500px 보다 작아졌을 때) section 영역이 수직으로 main nav aside 순으로 보이고

기존에 nav와 aside가 가지고 있었던 border를 없애는걸 적용한 것이다.


따라서, section의 flex-direction:column으로 바꾸고 nav와 aside의 border를 border:none으로 한 다음에

flex의 order 속성을 이용해서 순서를 지정해주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title>Holy Grail Layout</title>
    <style media="screen">
      .container {
        display:flex;
        flex-direction: column;
      }
      header{
        border-bottom: 1px solid gray;
        padding-left:20px;
        flex-grow: 1;
      }
      footer{
        border-top:1px solid gray;
        padding:20px;
        text-align: center;
        height:100px;
      }
      .content{
        /* 배치하고자하는 자식들의 부모에 display:flex를 항상줘야함 */
        display:flex;
        flex-grow: 8;
      }
 
 
      .content nav{
        border-right:1px solid gray;
        flex-grow: 1;
      }
 
      @media(max-width:500px){
        .content{
            flex-direction:column;
        }
        .content nav, .content aside{
          border: none;
          flex-basis: auto;
        }
        main{
          order:0;
        }
        nav{
          order:1;
        }
        aside{
          order:2;
        }
      }
 
      .content aside{
        border-left: 1px solid gray;
        flex-grow: 1;
      }
      nav,aside{
        /* 화면이 줄어들어도 nav와 ad부분은 줄어들지 않도록... */
        flex-basis:150px;
        flex-shrink: 0;
        /* 중간에 main만 줄어들게 됨 */
      }
      main{
        padding:10px;
        flex-grow: 8;
      }
    </style>
  </head>
   
    <div class="container">
      <header>
        <h1>생활코딩</h1>
      </header>
      <section class="content">
        <nav>
          <ul>
            <li>html</li>
            <li>css</li>
            <li>javascript</li>
          </ul>
        </nav>
        <main>
          생활코딩은 일반인을 위한 코딩 수업입니다.
          Lorem ipsum dolor sit amet, consectetur adipisicing elit. Reiciendis veniam totam labore ipsum, nesciunt temporibus repudiandae facilis earum, sunt autem illum quam dolore, quae optio nemo vero quidem animi tempore aliquam voluptas assumenda ipsa voluptates. Illum facere dolor eos, corporis nobis, accusamus velit, similique cum iste unde vero harum voluptatem molestias excepturi. Laborum beatae, aliquid aliquam excepturi pariatur soluta asperiores laudantium iste, architecto ducimus fugiat sed, saepe quaerat recusandae exercitationem sapiente, impedit nostrum error. Doloremque impedit, eos in quos assumenda illo eum dicta. Voluptatum quaerat excepturi consectetur, doloremque esse deleniti commodi natus, maxime sit? Officia rerum quibusdam porro dolorum numquam harum soluta ex quo! Vero, nam? Necessitatibus rem hic perferendis maiores obcaecati voluptate sunt autem id doloribus, similique repudiandae nesciunt vel facere ex accusantium ipsum provident iste itaque? Perferendis culpa nostrum repellendus dolores repudiandae assumenda, tempora laudantium in quibusdam placeat facilis ex voluptatem provident velit iusto fuga eum nobis deserunt enim minus. Explicabo vel labore, eum doloremque, impedit recusandae aut illum corporis quis atque sit vero quasi tempore placeat ipsam similique quo delectus provident animi distinctio debitis eligendi voluptatum! Dolorem perspiciatis similique non fugit eaque? Commodi suscipit earum aliquam rem, neque ad. Obcaecati nisi beatae officia inventore laborum nostrum natus perspiciatis iste, aperiam vero quisquam saepe labore facilis veritatis illo excepturi vitae autem quis! Voluptatibus atque doloribus perferendis, eligendi ex aliquid debitis laudantium omnis accusamus similique cum mollitia quos adipisci reprehenderit assumenda sequi, dolore tenetur ipsam, odio, vero reiciendis iure. Dolore itaque nesciunt ipsam, id maxime saepe officiis dolorum molestias earum temporibus? Possimus ipsum accugnissimos, nisi doloremque hic itaque aspernatur. Ab labore dolorum cumque rem vitae repellat quo quae porro cupiditate minus. Perspiciatis cumque sequi provident fugit. Nulla reiciendis voluptates molestiae corporis voluptate, quidem consequuntur, dolor vero necessitatibus deleniti tempora ab facilis similique, ea error deserunt fuga quia atque omnis nam earum non, illo. Minima quos optio nostrum eos aperiam? Quam, obcaecati velit deserunt tempore, iure vitae repudiandae quos illum quasi esse quas quaerat at consectetur necessitatibus. Cum, quod, dolore voluptatibus quibusdam accusamus aliquam consequatur dolorum illo! Sequi commodi adipisci explicabo soluta necessitatibus magni expedita cumque, officiis voluptas, vel amet recusandae sunt, quidem eum aliquid deleniti unde, impedit non magnam consectetur est minima facere architecto. Molestias cum vero nostrum saepe, dignissimos eius beatae natus fugiat deserunt esse, nesciunt eos ducimusa eum repudiandae esse, atque impedit nihil debitis, assumenda est. Sapiente rerum alias ipsa tempore obcaecati deserunt maiores distinctio officiis itaque fugit optio, eveniet facere amet ipsum, harum laboriosam eius, enim magni blanditiis temporibus nobis consequuntur ut. Quia magnam vero atque modi aspernatur in perferendis voluptas reprehenderit, rerum dolore unde iusto ab non eius molestiae quasi tenetur beatae ipsam quidem, quos at architecto voluptate alias eos. Deserunt velit beatae, ullam, accusantium sit asperiores! A vero perferendis, harum praesentium dolorem deserunt. Numquam voluptas necessitatibus, aliquam ullam saepe harum amet consequatur minima neque officia maxime quo beatae ab aliquid ex placeat rerum unde, reiciendis aspernatur similique, doloremque ad laboriosam modi. Minus quam aperiam, sed aliquid. Fugiat amet harum consequuntur reprehenderit id eum ratione quos temporibus, quae. Ab ut omnis tempora voluptates, sed ea animi voluptatem pariatur quod mollitia corrupti voluptas repellendus consequatur quae adipisci, enim vitae harum nulla natus iusto hic totam officia architecto quam. Debitis dignissimos praesentium, hic. Ad assumenda, aliquid consequuntur dolore eum repudiandae ab explicabo ipsa sed blanditiis. Quidem unde necessitatibus facilis, quis commodi. Dignissimos perferendis, nihil labore corrupti autem cumque ipsum vel voluptatum? Nostrum labore, omnis provident ullam repellendus culpa amet rem consequatur animi, necessitatibus porro. In consequatur optio recusandae, quisquam accusantium at deserunt voluptatem fugit quibusdam neque libero assumenda consectetur numquam ratione quaerat. Quos omnis neque atque, id perferendis possimus, alias, dignissimos doloribus ducimus similique ratione vitae eos laudantium, tempore cupiditate quod consectetur! Voluptas enim laboriosam nesciunt rem. Recusandae beatae numquam asperiores a
       </main>
       <aside>
          AD
       </aside>
      </section>
      <footer>
        <a href="https://opentutorials.org/course/1">홈페이지</a>
      </footer>
    </div>
  


[    Flex    ]


기존의 table이나 div를 쓰고 position Float를 사용하던 방식에서 벗어나 Flex를 이용한 레이아웃을 구성하는 방법에 대해서알아봅시다.


1. flex 기본(display:flex, flex-direction, flex-basis) & flex-grow, flex-shrink 속성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title>Flex Study</title>
    <style media="screen">
      .container{
        background-color:powderblue;
        display:flex; /* Flex를 사용하려면 container(부모)에 display:flex를 지정해줘야함 */
        flex-direction:row; /* 행으로 정렬 */
        /*flex-direction:column;  수직 정렬 */
        /*
          - 행정렬일 떈 각 자식 element는 수직을 꽉 채우고
          - 수직 정렬일 땐 각 자식 element는 행을 가득 채운다.
        */
        height:200px;
      }
      .item{
        background-color:tomato;
        color:white;
        border:1px solid white;
        flex-grow:1; /* 안드로이드의 weight와 유사(차지하는 비율을 지정) */
      }
      .item:nth-child(2){
        /* flex-basis:200px; /* 자식의 기본 크기 지정 */
        flex-grow:2; /* 2번째 자식은 2비율만큼 차지하도록 함 */
      }
      .item:nth-child(1){
        flex-basis:150px;
        flex-shrink: 1;
        /*
          flex-shrink는 grow와 반대로
          flex-basis 값이 지정되어 있는 상태에서 이 크기보다 창크기를 작게해 줄어들어야하는 경우
          줄어드는 비율을 지정하게 된다.
          0으로하면 안줄어들고
          두군대서 각각 1, 2로해놓으면 첫번째는 3분의 1속도로 줄어들고 2번째는 3분의 2속도로 줄어든다.
        */
      }
    </style>
  </head>
   
    <div class="container">
      <div class="item">1</div>
      <div class="item">2</div>
      <div class="item">3</div>
      <div class="item">4</div>
      <div class="item">5</div>
    </div>
  





2. 위에서 공부한 속성을 활용해서 대표적인 레이아웃 디자인인 Holy Grail Layout을 구성해보도록 하자.


이러한 구조를 만들어 볼 건데

먼저, (Header), (Nav, Main, AD), (Footer)로 구성되어 있다.

크게 태그로

1) header, section, footer 시멘틱 태그로 구성하고 section에는 nav, main, aside(광고부분) 시멘틱 태그를 배치한다.

<div class="container">

<header>헤더</header>

<section>

<nav></nav>

<main></main>

<aside></asdie>

</section>

<footer>푸터</footer>

</div>


2) 먼저 Flex를 사용하기 위해 가장 부모인 container에 플렉스를 사용하겠다고 display:flex를 지정한다.

그리고, 그 자식들은 수직으로 배치되어야 함으로 flex-direction:column을 지정해 준다.



3) 헌데 section 태그 내의 자식들(nav,main,aside)는 가로로 배치되어야한다.

따라서, 그들의 부모인 section에 flex를 사용하기 위해 display:flex를 지정하고, flex-direction:row를 지정한다.



4) 마지막으로, 화면을 줄여도 nav부분과 aside부분은 줄어들지 않기 위해서 flex-shrink를 지정할 건데

지정하지 않을 경우 flex-shrink:1 로 되어있다. 따라서 나머지 부분은 그대로 두고 

nav와 aside만 flex-shrink:0 을 지정해 창을 줄여도 그 크기는 줄어들지 않도록 설정하도록 한다.

또한 nav와 aside는 일정 크기를 가지도록 flex-basis:150px; 정도를 할당하도록 하자.


5) 기타사항


만약, section 태그 내에서 지금은 nav, main, aside 순으로 되어 있는데 이 순서를 main nav aside로 바꾸고 싶은 경우는 어떻게 할까


태그의 위치를 바꿀 수도 있지만 order라는 속성을 사용하면 된다.

main{

order:0;

}

nav{

order:1;

}

aside{

order:2;

}

로 지정하면 된다.


Ex)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title>Holy Grail Layout</title>
    <style media="screen">
      .container {
        display:flex;
        flex-direction: column;
      }
      header{
        border-bottom: 1px solid gray;
        padding-left:20px;
      }
      footer{
        border-top:1px solid gray;
        padding:20px;
        text-align: center;
      }
      .content{
        /* 배치하고자하는 자식들의 부모에 display:flex를 항상줘야함 */
        display:flex;
      }
      .content nav{
        border-right:1px solid gray;
      }
      .content aside{
        border-left: 1px solid gray;
      }
      nav,aside{
        /* 화면이 줄어들어도 nav와 ad부분은 줄어들지 않도록... */
        flex-basis:150px;
        flex-shrink: 0;
        /* 중간에 main만 줄어들게 됨 */
      }
      main{
        padding:10px;
      }
    </style>
  </head>
   
    <div class="container">
      <header>
        <h1>생활코딩</h1>
      </header>
      <section class="content">
        <nav>
          <ul>
            <li>html</li>
            <li>css</li>
            <li>javascript</li>
          </ul>
        </nav>
        <main>
          생활코딩은 일반인을 위한 코딩 수업입니다.
        </main>
        <aside>
          광고
        </aside>
      </section>
      <footer>
        <a href="https://opentutorials.org/course/1">홈페이지</a>
      </footer>
    </div>
  


[    position offset    ]



[엘리먼트의 위치를 정하는 속성 position 속성값 4가지]


1. static(기본값) : 움직이지 않고 정적인 상태 => position:static

2. relative : 부모 엘리먼트를 기준으로 상대적으로 움직인다 => position:relative


3. absolute : position값이 relative인 부모를 기준으로(없다면 웹페이지의 가장 가장자리 기준) 움직인다. => position:absolute
* 자식의 위치값이 absolute이면 부모와의 관계가 끊기고 그래서 자신의 크기가 딱 컨텐츠만 해진다.
그리고 값을 아예 없애면 원래 위치로 돌아간다.


4. fixed : 스크롤을 움직여도 지정된 위치에 고정된다. => position:fixed
* absolute와 마찬가지로 부모와의 관계가 끊기고 크기는 자신의 컨텐츠만 해진다.


offset

-    top 

-    right

-    bottom

-    left

~만큼씩 위치를 떨어져 위치될지 결정할 수 있는데 position 속성과 같이 사용된다.


아무것도 지정하지 않을 경우 position:static이 지정되어 있는데 이때는 이 offset 속성들은 영향을 주지 못한다.


따라서, position:relative 나 position:absolute를 사용해서 해야하는데


position:relative의 경우 부모와의 상대위치를 기준으로하는 것이다. 즉 자식이 position:relative라면 자신의 부모를 기준으로해서

left:10px; top:20px; 이면 부모를 기준으로해 위는 20px 떨어진 위치 왼쪽으로부터 10px 떨어진 위치에 위치하게 된다.


position:absolute의 경우 절대위치를 가리키는데 이떄는 position:static인 부모들은 무시하고 그 외의 position:relative나 position:absolute가 지정된 부모를 기준으로해서 배치되게 된다.


즉, 자신의 부모가 기준이 아니다!


또한 이러한 position:absolute는 z-index, fixed와 함께 사용되 메뉴를 구성하는데 사용될 수 있다.


position : fixed => 스크롤과 관계없이 고정된 위치에 배치되도록할 수 있다.(상단 메뉴등에 활용할 수 있음)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title></title>
    <style>
      html{
        border:1px solid gray;
 
      }
      div{
        border:5px solid tomato;
        margin:10px;
      }
      #me{
        /*
          offset(top,right,bottom,left)
 
          position:relative 혹은 absolute를 지정하지 않으면
          기본은 position:static이다.
          position:static이면, left, right, bottom, top 등의 속성이 먹지 않고
          본래 있어야되는 위치에 있게 된다.
 
          자신이 있어야하는 위치(부모기준)를 기준으로 상대적으로 위치를 조정하고 싶으면
          position:relative를 쓴다.
 
          그런 부모에 따른 자신의 위치는 무시하고 사용할 때는
          position:absolute 를 쓴다.
            child 요소에 absolute를 지정하면 부모요소와의 관계성은 상실되게 된다.
            또한, absolute는 position:static(기본) 인 부모는 무시하다가
            그 외의 position 속성인 relative나 absolute가 지정된 부모를 기준으로해서
            offset위치를 지정하게 된다.
         */
        position: relative;
        left:100px;
        top:100px;
      }
      div #child{
        border:1px solid red;
        position:absolute;
        right:0px;
        bottom:0px;
      }
    </style>
  </head>
   
    <div id="other">other</div>
    <div id="parent">
      parent
      <div id="me">me</div>
    </div>
    <div id="parent2">
      <div id="child">
 
      </div>
    </div>
  


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title></title>
    <style media="screen">
    #parent,#other{
        border:5px solid tomato;
    }
    #large{
      height:10000px;
      background-color:tomato;
    }
    #me{
      background-color:black;
      color:white;
      position:fixed;
      left:0;
      top:0;
      width:100%;
      height:30px;
      text-align:center;
    }
    </style>
 
  </head>
   
    <div id="other">other</div>
    <div id="parent">
      parent
      <div id="me">me</div>
    </div>
    <div id="large">large</div>
  


[    Layout 관련 속성    ]


- inline 요소
- block 요소

두 요소의 특징을 바꾸는 display 속성

display:inline 하면 block요소를 inline으로 바꿀 수 있고...
display:block 하면 inline요소를 block요소로 바꿀 수 있다.
display:none; 화면에서 아예 사라진다.(공간마저 잡지 않음)


padding : 내부 영역
vs
margin: 외부 영역

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE html>
<!--
  [ inline vs blocked ]
  - inline : 자신의 content만큼만 영역을 지님 따라서 inline 요소가 그 옆에와도
             옆에 바로 붙어 올 수 있다.
  - blocked : 그 줄을 혼자 다 차지해 쓰게 됨 따라서, blocked 요소 옆에
              다른 태그를 써도 아래 오게 된다.
 
  하지만, 이러한 성격을 무시하고 제어할 수 있다.
  display : inline => block 요소를 inline으로 바꿀 수 있음.
  display : block 을 사용하면 block 속성으로 바까버릴 수 있다.
-->
 
  <head>
    <meta charset="utf-8">
    <title></title>
    <style media="screen">
      h1,a{
        border:1px solid red;
      }
      h1{
        display:inline;
      }
      a{
        display:block;
      }
      p #boxModel{
        border:10px solid red;
        padding:20px;
        margin:40px;
        width:120px;
      }
 
    </style>
  </head>
   
    <h1>Hellow world</h1>
    안녕하세요. <a href="https://opentutorias.org">생활코딩</a>입니다.
    <p id="boxModel">박스 모델</p>
 
  


[    폰트 관련 속성 및 외부 폰트 설정하기    ]



1. 폰트 사이즈 속성 => font-size:5rem;

2. 텍스트 정렬 속성 =>text-align:justify;

left, right, justify 등을 지정할 수 있다. justify는 양옆을 딱딱 맞추는 정렬 방법으로 글자 사이 간격을 조정해 맞추게 된다.

3. 글씨체 속성 =>  font-family:"Times New Roman" Times, serif;

이렇게 3개를 써놓으면, 첫번째 걸 지정하되 해당 글씨체가 없으면 2번째 것 그것도 없으면 3번째 것을 지정하게 된다.     

 4. 폰트 bold 속성 => font-weight: bold;

 5. 줄 간격 속성 => line-height: 1.8; 

// 1.8 배로 지정


[    외부 폰트 임포트하고 사용하는 방법    ]

@font-face{

font-family:"GoodFont"; /*폰트 패밀리 이름 추가*/

src:url("resources/fonts/NANUMGOTHICCODING.TTF"); /*폰트 파일 주소*/

}

적용

body{

font-familly:"GoodFont" !important;

}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title></title>
    <style media="screen">
      p{
        font-size:5rem;
        text-align:justify;
        font-family:"Times New Roman" Times, serif;
        font-weight: bold;
        line-height: 1.8;
        border:1px solid gray;
      }
    </style>
  </head>
   
    <p>
      안녕하세요.
    </p>
 
  


[    css의 가상 선택자    ]

1. a:link{
a태그의 기본 속성을 지정할 때
}

2. a:hover{
a태그에 마우스 오버시 속성을 지정할 때 사용
}

3. a:visited {
방문한 경우 속성을 지정
}

4. a:active{
누르는 순간을 지정
}

5. 태그:focus{
포커싱 되는 경우의 속성을 지정
}

이 태그의 경우는 input 태그 등이 focus를 얻을 시 하이라이트를 주는 등에 이용될 수 있음.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html>
 
  <head>
    <meta charset="utf-8">
    <title></title>
    <style media="screen">
 
      a:link{
        color:black;
      }
 
      a:visited{
        color:red;
      }
 
      a:hover{
        color:yellow;
      }
 
      a:active{
        color:green;
      }
 
      input:focus{
        border:1px solid red;
        color:#000000;
      }
    </style>
  </head>
   
    <a href="https://opentutorials.org">방문함</a>
    <a href="https://a.a">방문안함</a>
    <input type="text" />
  


+ Recent posts