아래와 같은 방식으로 동작하는 말풍선(Tooltip) 만들어 보고자한다.
-. 특정 영역 범위 안에서 마우스 포인터 따라 툴팁도 같이 따라 움직인다. 이때 마우스의 x좌표의 값을 툴팁에 보여준다.
-. 마우스 클릭(토글) 의해 툴팁이 보였다 사라졌다 되도록 한다.
-. 툴팁의 모양은 화살표 모양이 아랫쪽으로 오는 형태, 마우스 윗쪽에 툴팁이 보이는 형태로 한다.
-. 툴팁이 나타났을 Esc 키를 치면 툴팁이 사라지게 한다.

<html>
    <head>
        <title>Tooltip과 마우스 이벤트</title>
        <style>

        /* 툴팁을 보여줄 영역의 크기를 적당히 잡는다. 높이를 250px로 잡음. 
           display를 inline-block으로 하게되면 이 영역안에 있는 글자의 길이만큼 width가 잡힌다.
	       만일 display: inline-block을 없애고 대신 width를 이용해서 가로 길이를 지정해도 된다.
	       만일 display: inline-block을 없애고 width 값도 없으면 가로 길이는 현재 화면 크기만큼으로 설정된다.
	       position: relative는 마우스와 툴팁이 어느 정도 간격으로 따라 다닐지를 지정하는데 사용
         */
        .tooltip {
            padding: 80px;
            height: 250px;
            background-color: #eeeeee;
            position: relative;
            display: inline-block;
            border-bottom: 1px dotted black;
        }

        /* 클래스명이 tootip인 엘리먼트 안에 클래스명 tooltiptext를 가진 엘리먼트를 지정한다. 
	  	   아래는 한마디로 툴팁 박스 자체를 보이고자 하는 코드임
	  	   width: 110px은 툴팁 박스의 가로 크기를 지정, background-color: black은 툴팁 박스의 색상을 검정색으로
        */
        .tooltip .tooltiptext {
            visibility: hidden; /* 최초에는 툴팁 박스 안 보이게 */
            width: 110px;
            background-color: black;
            color: #fff;
            text-align: center; /*툴팁 박스 안의 글자가 가운데로 모이도록 */
            border-radius: 6px; /* 툴팁 박스 모서리가 약간 둥글게 */
            padding: 5px 5; /* 위아래 padding을 5 좌우 패딩을 5로 */
            z-index: 55; /* 툴팁이 화면의 다른 요소들 위에 보이고 가려지지 않도록 하기 위해 */
            position: absolute; /* 툴팁 박스의 위치 지정 방식 설정 */
            left: 50%;
            bottom: 77%;
            margin-left: -60px; /* 툴팁 박스가 마우스 위치에 적당히 놓이도록 */
        }

        /* 툴팁 아래쪽 역 삼각형 형태의 화살표 모양 만들기. 개념은 상당히 웃기고 재미있다.
			.tooltip .tooltiptext::after가 의미하는 바는 클래스명 tooltip 엘리먼트 안에있는
			tooltiptext 엘리먼트 바로 뒤따라서(::before이면 바로 앞에) content가 지정하는 내용을 표시되게 하는데 
			아래의 경우는 content 내용이 없으므로 아무것도 보여주지 않는다.
			대신에 border-width: 5px을 하면 작은 4각형이 생긴다. 
			그리고 border-color를 top right bottom left의 순으로 색상을 지정하는데 top의 색상을 black으로
			나머지 right bottom left의 색상은 transparent으로 지정한다는 뜻인데 이렇게 지정하면
			역삼각형 모양의 화살표가 생긴다. 개념 이해를 위해서 아래와 같이 해보면 알수 있다.
			border-color: black red green cyan;
        */
        .tooltip .tooltiptext::after {
            content: "";
            position: absolute;
            color: green; /* content의 색깔*/
            top: 100%;
            left: 50%;
            margin-left: -5px; 
            border-width: 5px;
            border-style: solid;
            /* border-color의 Top Right Bottom Left의 색상 지정 */
            border-color: black transparent transparent transparent;
            /*border-color: black red blue cyan;*/
        }

        /* 아래 코드가 의미하는 것은 height를 250px로 잡았던 영역이 tootip이라는 이름의 div 영역인데
        	이 영역 위에 마우스가 hover하면 클래스명 tooltip 엘리먼트 안에 있는 클래스명 
        	tooltiptext 엘리먼트를 보이라는 뜻. 즉 클래스명 tooltiptext가 툴팁 박스 자체인데 
        	tootip이라는 클래스명을 가진 엘리먼트(여기서는 div) 영역위에 마우스가 hover하면 
        	툴팁 박스를 보이라는 뜻임 */
        .tooltip:hover .tooltiptext {
            visibility: visible;
        }
        </style>
    </head>
    <body>
        <h2>Top tooltip과 mouse move event</h2>
        <hr/>
        <br/>

        <!--툴팁을 보여줄 영역. css를 이용해서 이 영역의 크기를 적당히 잡는다. 
        	클래스명 tooltip 영역은 마우스을 움직일 영역 클래스명 tooltiptext는 실제 툴팁 박스 자체-->
        <div class="tooltip">회색 영역 안에서 (1)마우스 움직이기, (2)마우스 클릭하기를 해 보세요. 
        	마우스 클릭시 마다 툴팁이 보였다 사라졌다 할거예요
            <span class="tooltiptext">ID : 365</span>
        </div>

        <script>
        	//마우스를 움직일 때 툴팁을 보여줄 영역
            var tooltip = document.getElementsByClassName("tooltip")[0];
            //툴팁 박스 
            var tooltipTxt = document.getElementsByClassName("tooltiptext")[0];

            // 아래 함수는 키보드 중 Esc 클릭시 툴팁이 사라지도록 하기
            document.onkeydown = function(e){
                var isEscape = false;

                if("key" in e){
                    console.log("e.key : " + e.key);
                    isEscape = (e.key === "Escape" || e.key === "Esc");
                } else {
                    isEscape = (e.keyCode === 27);
                }

                if(isEscape){
                	//툴팁 박스를 사라지게
                    tooltipTxt.style.display = "none";
                }
            };

            //마우스 move 이벤트가 발생하면 
            tooltip.addEventListener('mousemove', function(e){
                // console.log("e.clientX : "+e.clientX);
                // console.log("e.clientY : "+e.clientY);

                //e.clientX의 값이 현재 위치의 마우스 포인터의 x 좌표 값
                //마우스를 움직이면 tooltipTxt(툴팁 박스)의 왼쪽 좌표를 마우스 포인터의 현재 x좌표로 지정
                tooltipTxt.style.left = (e.clientX - 15) + 'px';
                tooltipTxt.style.top = (e.clientY - 135) + 'px';
                //툴팁 박스의 높이를 지정
                tooltipTxt.style.height = "20px";
                //툴팁 박스 안에 표시될 글자를 마우스의 현재 위치 x 좌표 값
                tooltipTxt.innerHTML = "ID : " + e.clientX;
            });

            //마우스 클릭시마다 툴팁 박스가 보였다 사라졌다 하도록
            tooltip.addEventListener('click', function(e){
                if (tooltipTxt.style.display === 'none'){
                    tooltipTxt.style.display = "block";
                    console.log('툴팁이 보이지 않는 상태');
                } else {
                    tooltipTxt.style.display = "none";
                    console.log('툴팁이 보이고 있음~');
                }
            });
        
        </script>
    </body>
</html>

 

 

 

CSS를 이용하여 테이블의 특정 column 보이지 않도록(hidden으로) 처리 하기


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

순번 | 이름 | 나이 | 성별 | 주소 | 전화번호 | 기타 |

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

  ...................... 중 략 ..................


위와 같은 테이블이 있다고 할때 코드는 아래와 같은 식이 될 것이다.


      <table>

        <thead>

          <th>순번</th>

          <th>이름</th>

          <th>나이</th>

          <th>성별</th>

          <th>주소</th>

          <th>전화번호</th>

          <th>기타</th>

        </thead>

        <tr>

          <td>순번 정보 표시...</td>

          <td>이름 정보 표시...</td>

          <td>나이 정보 표시...</td>

          <td>성별 정보 표시...</td>

          <td>주소 정보 표시...</td>

          <td>전화번호 정보 표시...</td>

          <td>기타 정보 표시...</td>

        </tr>

      </table>



이럴 경우 나이 항목(column), 나이 칼럼 전체가 보이지 않도록 즉 |순번|이름|성별|주소|... 와같이 보이도록 해야 할 경우 이를 CSS를 이용하면 아주 간단하게 처리가 된다.

즉 나이 칼럼이 hidden으로 처리되게 하는 것이다. 물론 이때 비록 보이지는 않지만 내부적으로는 나이 칼럼이 존재하고 이 값을 form 전송시 전송한다거나 하는 작업은 정상적으로 이뤄지게 된다.

이럴경우 다음과 같이 처리하면된다.


  <head>

      ... 중 략 ...

    <style type="text/css">

      ... 중 략 ...

      th:nth-of-type(3) { display: none; }   

      td:nth-of-type(3) { display: none; }

      ... 중 략 ...

    </style>

  </head>


nth-of-type()의 괄호안에 몇번째 칼럼을 보이지 않게 할지를 지정해 주면된다.





CSS div의 크기 조정에 대해(div의 width, height 속성에 대해)


웹 페이지를 구성함에 있어서 보이지 않는 box 형태로 다양한 레이아웃을 구성할수 있게 도와주는 div의 가로의 넓이를 지정하는 속성이 width, 세로의 높이를 지정하는 속성이 height이다.

이들 속성에 값을 지정할 때의 가장 대표적인 단위가 pixel이다.


만일 percentage로 지정하면 div의 크기는 브라우저의 창 크기에 상대적인 크기로 설정되고

em단위로 지정하면 div 안에 있는 글자(text)의 크기에 기반해서 dive의 크기를 설정한다.

요즘은 화면의 크기가 다양한 기기들에 대응하기 위해 percentage나 em 단위를 많이 사용하는 추세이다.

아래는 HTML 코드 조각이다.


<div>

   <p>'그들이 움직인다'…어나니머스, IS에 '선전포고'

         "전세계 회원들이 너희를 추적할 것이다. 당신들을 찾아내 도망가지 

         못하게 할 것이라는 걸 알아야만 한다."</p>

</div>



아래는 CSS 코드 조각이다.


div.box {

height: 300px;

width: 300px;

background-color: #99ccff;}


p {

height: 75%;

width: 75%;

background-color: #ccff66;}


위의 코드에서 div의 가로 길이가 300pixel, 세로 높이가 300pixel이고

div 안에 있는 paragraph가 75%인데 이는 paragraph가 속해 있는 div의 크기 300pixel에 대한 75%이다.

따라서 paragraph의 크기는 225pixel에 해당된다.




CSS line-height, letter-spacing, word-spacing 속성에 대해


line-height

⇒ 줄과 줄 사이의 간격을 조정하는 속성


letter-spacing

⇒ 글자와 글자간의 간격을 조정하는 속성


word-spacing

⇒ 단어와 단어 사이의 간격을 조정하는 속성


이들에 대한 값은 em단위를 채택해야 한다. 


다음은 코드 조각이다.


h1, h2 {

   text-transform: uppercase;

   letter-spacing: 0.2em;}


.author {

   font-weight: bold;

   word-spacing: 1em;}





CSS text-align에 대해


text-align

문장(글자)을 좌/우/가운데... 등으로 정렬되게 하는 속성


이 속성이 가질수 있는 값(value)

left : 문장을 좌로 정렬

right : 문장을 우로 정렬

center : 문장을 가운데로 정렬

justify : 해당 라인 좌우 전체를 꽉 채우도록 정렬


아래는 코드 조각이다.


h1 {

   text-align: left;}


p {

   text-align: justify;}


.author {

   text-align: right;}




CSS에서 가상 클래스(pseudo class)를 이용하여 링크에 마우스 동작 감지하는 법


웹 사이트의 링크에 마우스를 올리면 링크에 밑줄이 그어지면서 링크의 색상이 바뀌거나 혹은 이미 방문했던 링크는 다른 색상으로 변경되어 있어 사용자로 하여금 방문했던 곳인줄 인지하게 하는 기능이 있다. 이러한 기능은 아래의 가상 클래스(pseudo class)들을 이용해서 기능을 구현할 수 있다.

아래 가상 클래스들은 링크 뿐만아니라 버튼, input 컨트롤 등에도 적용이 가능하다.


:link

⇒ 아직 방문하지 않은 링크에 대해 스타일(색상, 글자 모양, 밑줄 등)을 지정하는 기능


:visited

⇒ 이미 방문했던 링크에 대해 스타일을 지정하는 기능


:hover

⇒ 사용자가 링크에 마우스를 올릴 때 다른 형태의 스타일을 갖도록 지정하는 기능


:activity

⇒ 링크가 현재 시점에서 활성화(activated)되고 있는 상태일때 스타일 지정하는 기능.

예를 들어서 버튼의 경우 눌려져 있는 시점, 링크의 경우는 마우스가 클릭되어 있는 시점을 의미한다. 짧은 순간 마우스를 눌렀다 떼기 때문에 스타일의 변화가 순간적으로 나타나지만 마우스를 롱 클릭해 보면 알수 있다.


:focus

⇒ element가 focus을 얻었을 때 스타일을 지정할수 있다.

focus란 입력 박스(input box)에 내용을 입력하기 위해 커서가 위치해 있을 때 입력 박스가 focus를 가진 상태이다. 혹은 키보드의 탭 키를 누를 때 focus가 이동하는데 이러한 방식으로도 element들이 focus를 가질수 있다. 

이렇게 focus를 가졌을 때 스타일을 지정할 수 있다.


가상 클래스를 사용할 때는 반드시 다음과 같은 순서로 CSS를 작성해야 한다.

:link → :visited → :hover → :focus → :active


아래는 CSS 코드 조각이다.


a:link {

color: deeppink;

text-decoration: none;}


a:visited {

color: black;}


a:hover {

color: deeppink;

text-decoration: underline;}


a:active {

color: darkcyan;}




CSS 텍스트에 밑줄, 가운데 줄, 윗 줄 표시하기


▶ text-decoration 속성 

  •   개념 : CSS에서 텍스트에 밑줄, 가운데줄, 윗줄 표시하기위한 속성
  •   none : 기존에 적용되었던 decoration을 제거
  •   underline : 밑줄 긋기
  •   overline : 텍스트의 윗쪽에 line 긋기
  •   line-through : 텍스트 가운데 line 긋기(취소 선)
  •   blink : 텍스트 깜빡이게(시각적으로 혼란스럽게 하는 면이 있어 잘 사용 안함)


예)


h2 {

   text-decoration: underline;

}


.info {

   text-decoration: line-through;

}





SERIF 글꼴

Georgia  : T

Times New Roman  : T



SANS-SERIF 글꼴

Arial  : T

Verdana : T



MONOSPACE 글꼴

Courier New : T 


Serif란 문자의 끝 부분에 장식되어 있는 부가적인 짧은 선을 Serif라고 한다. Geogia의 T와 Arial의 T에서 후자는 끝 부분에 부가 된 다른 선이 없다. 


Sans-Serif에서 sans는 without(...이 없는)의 의미이다. 따라서 serif가 '없는'(sans) 글꼴을 말한다. Arial과 Verdana의 경우와 같다. 반면에 Geogia나 Times New Roman의 경우들은 글자의 끝 부분들에 추가적인 짧은 선들로 장식되어 있다. 이렇게 장식된 부분을 serif라고 한다. 따라서 Sans-Serif는 이러한 것이 없는 것을 말한다.


Monospace는 모든 글자들의 폭(width)이 같은 글꼴을 의미한다. non-monospace 글꼴들은 각 글자들마다의 폭(width)이 각각 상이하다.




+ Recent posts