html과 css를 하나도 모르겠지만 테이블을 만들 수 있는 사이트가 있습니다.

이 사이트 외에도 많은 사이트들이 있지만, 제가 원하던 병합기능이 있는 사이트가 별로 없었고 그나마 있는것도 사용성이 좋지 않아서 이 사이트가 최종적으로 소개 대상이 되었습니다.

 

http://www.tablesgenerator.com/html_tables

 

HTML Table generator - TablesGenerator.com

↧ Expand ↧↥ Collapse ↥ Result (click "Generate" to refresh) Copy to clipboard Copy to clipboard   Preview Close [X] Select table theme Please, compose a theme for your table by selecting color, border and stripes themes shown below.

www.tablesgenerator.com

 

테이블 만드는 법 간략히 설명합니다.

 

1. 새 테이블 만들기

File > New table

 

2. 테이블의 열(Columns), 행(Rows) 숫자를 적어 새 테이블을 생성

행과 열 참고이미지

 

3. 머릿글(테이블 제목, th) 색상넣기

마우스로 해당영역 드래그 후에 색상 클릭

 

텍스트

 

배경

 

4. 셀 합치기 및 셀 나누기

마우스로 해당영역 드래그 후에 아이콘 클릭

 

합치기

나누기

 

5. 텍스트 입력

해당 영역에 더블 클릭 후 텍스트 입력

- 텍스트 가운데 정렬

해당 영역 드래그 후 마우스 우 클릭 > Text align > Center (수평 가운데 정렬), Middle (수직 가운데 정렬)

 

6. 코드 복사하기

(1) Do not generate CSS 체크 해제

(2) Compact mode 체크

(3) Generate 버튼 클릭

(4) Copy to Clipboard 클릭 (복사)

7. 원하는 영역에 붙여넣기 (티스토리 예시)

(1) 에디터 > HTML 모드로 전환 

 

(2) 코드 붙여넣기

(3) 다시 기본모드로 전환

삽입된 테이블 확인 가능

자 이렇게 해서 완성한 테이블을 확인할 수 있습니다.

 

 

그리고 별개로 임시 자동저장옵션입니다.

Edit > Autosave table locally 체크(기본은 체크되어있음)

이 기능을 사용하면 나중에 들어와도 이전에 작업한 테이블을 확인할 수 있습니다.

 

 

이슈

이메일 input에 왜 핸드폰 번호가 뜨나요?

<input type="email" name="email" autocomplete='on'>

 

기본 특성

  • autocomplete는 아무것도 설정하지 않았을 때 기본 값은 on입니다.

  • 적용 위치로는 form 전체에 할 수도 있고 input이나 textarea 등의 개별 위치가 될 수도 있습니다.

  • name="" 값에 영향을 받습니다.

    • 같은 name일 경우 동일한 값을 노출합니다.

name 값은 어떻게 정하는가?

  • 약속된 값이 있습니다.(브라우저 스펙 제한이 있을 수 있습니다)

 

name 

성명 

family-name

given-name

이름

email

이메일

postal-code

우편 번호

address-level1

주소(도, 시)

address-level2

주소(시, 군, 구)

address-line1

상세주소1

address-line2

상세주소2

organization

직장명

 

등... 많습니다. (하단 html5 standard 링크 참조)

 

  •  아무거나 사용가능합니다.

 

검토사항 결과

  • name 값이 동일하면 저장되는 특성 상 이슈가 생긴 이유는 다른 사이트에서 name 값이 동일한 input에 전화번호를 입력했다. 가 될 수 있겠습니다.

    • (그 사이트에서 name="email"이지만 label 값은 전화번호였을 가능성)

  • 브라우저가 저장하는 것이기 때문에 삭제도 가능합니다만, 유저들이 삭제..할리 없으므로... name 값을 애초에 잘 작성해둬야합니다.

 

(크롬 기준) 

설정(chrome://settings/) > 고급 > 인터넷 사용기록 삭제 > 고급 > 양식 데이터 자동 완성 기록 삭제

 

의견

name값을 임의로 작성할 수 는 있으나 자동완성기능이 내 사이트에서만의 편리를 위해서가 아닙니다.

타 사이트에서 저장된 값이라도 자동완성기능을 제공할 수 있도록 약속된 name 값을 사용하는 게 사용자를 위하는 일이라고 생각합니다.

또한 임의로 작성한 잘못된 name 값의 해당 이슈와 같은 상황을 만들 수 있습니다.

MDN 스펙

https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete

 

 

html5 standard 사이트 참고하세요.

https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill

 

 

++ 추가 사항

<input type="range">태그로 제작한 부분이 모바일에서 터치 이동이 안되는 이슈가 있었습니다.

그래서 어쩔수 없이 <div> 태그를 사용하여 커스텀하는 형식으로 작업했습니다.

기록상 글을 작성합니다. 

 

글에 IE11이라고 작성된 모든 부분을 Edge로 수정합니다.

++

 

원본 코드 확인 바로가기   

 

요구조건

<input type="range"> 태그를 사용, CSS를 통해 아래와 같이 제작해주세요.

아래 이미지는 캡쳐본으로 저 형태로 제작하는 것이 최종 요구조건 이었습니다.

요구 조건

 

기존에 <div>태그를 사용해서 작업했던 결과물을 분석합니다.

부모 태그에 너비를 100% 준 다음 왼쪽(진행 후)과 오른쪽(진행 전)의 영역의 값을 JS로 삽입하는 방식이었습니다.

html

이렇게 된 코드를 <input type="range"> 방식으로 변경해보도록 하겠습니다.

 

 

지원 브라우저

들어가기전에 생각해야하는 부분은 <input type="range">는 IE10부터 지원합니다.

회사 정책에 IE가 포함되어 있지 않았기 때문에 진행할 수 있었습니다.

만약 하위브라우저를 지원해야한다면 type="range"를 다시 생각해보셔야합니다.

ie10 이상 지원, can i use 출처

 

 

벤더 프리픽스(Vendor Prefix)

-webkit- : 크롬

-moz- : 파이어폭스

-ms- : IE

 

 

브라우저 기본 스타일

 

Chrome

Chrome 기본 스타일

Edge

Edge 기본 스타일

Firefox

Firefox 기본 스타일

Chrome 브라우저같은 경우는 개발자도구 콘솔창에서 기본 스타일 확인이 가능합니다.

user agent style

 

 

CSS 코드 수정해보기

기본 스타일 리셋시키기

 

Chrome(-webkit-)

input[type=range] {
	width:100%;
	-webkit-appearance: none;
	background: transparent;
}

appearance는 사용자 운영체제 테마에 기반한 플랫폼 고유 스타일

background:transparent는 부모 배경 색상와 동일하게 하는 속성, 바에 영향을 받습니다.

 

 

스타일 적용 후

기본 모양에 있던 바가 감춰진 것이 확인됩니다.

appearance, background

 

이어서 마우스로 포인터를 이동하며 값을 조정할 때 (focus될 때) 보여지는 파란 라인(outline)값을 제거하도록 하겠습니다.

input[type=range]:focus {
  outline: none;
}

 


스타일 적용 후

outline:none

 

이건 css 포럼에 나와있길래 추가했는데, 차이를 잘 모르겠습니다.

input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
}

 

 

Edgd(-ms-)

ie는 개발자도구에서 기본 스타일을 확인하는 방법을 모르겠어서 눈으로 확인하면서 작업했습니다.

input[type=range]::-ms-track {
  width: 100%; 
  cursor: pointer; 
  background: transparent; 
  border-color: transparent;  
  color: transparent; 
}

width는 너비값이 지정되었고, cursor는 마우스를 바 위에 올릴 경우(hover) 커서가 손가락으로 바뀌는 것을 제어합니다.

 

 

스타일 적용 후

 

input[type=range]::-ms-track {
  background: transparent;
  border-color: transparent;
  color: transparent;
}

 

스타일 적용 후

background
background + color
background+color+border-color

마우스를 바 위에 올릴 경우(hover) 포인터 색상이 바뀌는게 확인됩니다.

hover 시

포인터를 잡고 왼쪽에서 오른쪽으로 드래그할 경우 아래와 같이 파란색 배경색상이 칠해지게 됩니다.

 

 

포인터 스타일

Chrome(-webkit-)

-webkit-appearance를 통해 user agent 값을 (기본테마 속성) none해준 다음에 background 흰색으로 적용하였습니다.

그리고 커서 모양을(cursor) 포인터로 적용하여 마우스 올렸을 때 손가락 모양으로 커서가 바뀌게 해줍니다.

input[type=range]::-webkit-slider-thumb { 
  -webkit-appearance: none;
  background: #ffffff;
  cursor: pointer;
  border: 1px solid #000000; 
  height: 36px; width: 16px;   
  margin-top: -14px; 
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border-radius: 3px;
}

이렇게 넣었는데, background 속성이 변하는 부분을 찾지는 못했습니다. 

border 값을 추가하니까 포인터의 크기로 적용되었습니다.

width, heigth을 수정해도 커지지 않던 포인터가 border:30px을 줬더니 아래와 같이 커졌습니다.

 

 

스타일 적용 후

border-width:30px;

border-radius만 단독으로 사용했을때 변하는 부분을 못찾다가 border-radius + box-shadow 를 같이 적용하니

아래와 같이 그림자에 border-radius가 적용되는 것을 확인되었습니다.

 

 

스타일 적용 후

그림자에 border-radius가 적용됨

 

margin-top:-14px를 적용한 부분은 포인터의 위치를 -14px만큼 올려주었습니다.

 

 

스타일 적용 전과 후 차이

적용 전
적용 후 

 

단독으로 margin-top:-14px 사용했을 때와 다르게 user agent를 reset하는 소스들과 같이 사용 했을때에는

margin-top:-14px를 적용하면 전체 영역이 올라갑니다.

 

 

Firefox(-moz-)

input[type=range]::-moz-range-thumb {
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
  border: 1px solid #000000;
  height: 36px; width: 16px;
  border-radius: 3px;
  background: #ffffff;
  cursor: pointer;
}

 

 

스타일 적용 전과 후

기본
box-shadow

신기한 부분이었는데, border만 적용해도 border-radius가 적용된 모습입니다.

덤으로 바가 사라졌습니다.

border
border+box-shadow

width, height를 적용했을땐 변하지 않던 포인터의 크기가 border 나 background 를 적용하면 변하였습니다.

border or background

border-radius를 border나 background-color랑 같이 사용했을 때 변하는 모습을 아래와 같습니다.

border-radius는 기본 값이 컸었는지, 오히려 숫자를 작게 했더니 각졌습니다.

3px
1px
background-color
background-color

 

여기까지 봤을때, 여러 스타일을 같이 사용해야 적용되는 것들이 존재했습니다.

width, height를 적용할 때 border랑 background 같이 적용하면 되는 줄 알았는데, (한 세트인지 알았습니다.)

나중에 쓰다보니까 background만 적용하려 할때에는 border가 없어도 적용되는 것을 확인했습니다.

width, height를 적용할 때 border-radius를 적용할 경우 border나 background는 없이도 적용되는 부분도 있었습니다.

근데, 브라우저마다 다르게 표현되는 부분들이 있어서 이 정도 학습으로는 아리송합니다..

 

user agent를 리셋코드 + 추가 스타일을 적용 후

user agent를 리셋하는 것과 함께 스타일을 적용한 후

 

 

Edge(-ms-)

nput[type=range]::-ms-thumb { 
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; 
  border: 1px solid #000000; 
  height: 36px; width: 16px; border-radius: 3px; background: #ffffff; cursor: pointer;
}

 

 

스타일 적용 전과 후

기본 스타일

user agent 기본 브라우저 스타일

 

border를 적용했습니다. border값이 적용됩니다.

border 값이 적용된다.

 

width:50px; height:50px;를 적용했을때 width는 무시되나 height 값은 적용됩니다.

height만 적용된 것이 확인

 

box-shadow

적용 전
적용 후

 

background:#fff

background:#fff

 

user agent 리셋과 함께 위 예제를 사용했을때

 

 

바 스타일

Chrome(-webkit-)

:focus를 사용할 수 있습니다.

input[type=range]::-webkit-slider-runnable-track { 
  width: 100%; height: 8.4px; 
  cursor: pointer; 
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; 
  background: #3071a9; 
  border-radius: 1.3px; 
  border: 0.2px solid #010101; 
} 

input[type=range]:focus::-webkit-slider-runnable-track { 
  background: #367ebd; 
}

 

 

스타일 적용 후

width:100%;, height:8.4px;

부모 태그에 width값만큼 100%로 적용될 줄 알았는데, 아무런 크기 변화가 없습니다.

width 100%

다만 포이터가 쳐지는 것을 확인할 수 있었습니다.

영역을 보면 확인이 됩니다.

포인터가 쳐졌다

보이는 바의 크기가 작아서 height가 적용이 안되나?0 싶어서 테스트를 해보았는데, height 값이 영역에 적용되어 있었습니다.

 

background를 추가하여 확인해보겠습니다.

background:red;

다만 height:8.4px를 주었는데 8.39px로 되어있네요.

 

background-shadow

background-shadow

 

border-radius

border-radius

 

border

:focus 전과 후

 

 

최종코드

최종코드

 

 

Firefox(-moz)-

input[type=range]::-moz-range-track { 
  width: 100%; height: 8.4px; 
  cursor: pointer; 
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d; 
  background: #3071a9; 
  border-radius: 1.3px; 
  border: 0.2px solid #010101; 
}

 

 

스타일 적용 후

width, height를 적용했을때, 단독으로는 안되서 background를 같이 적용해야했습니다.

width, height, background

 

그 후에 width 값을 10px로 변경해보니 아래와 같이 이상한 모습이 되었습니다.

이래서 100%를 적용해야하는것인가? 생각했습니다.

width:10px 결과

 

height : 바의 높이 값입니다.

 

height:1px
height:8.4px

뭔가.... 8.4px보다 적용된 게 커보여서, 비교해봤는데, 딱 맞습니다. 머쓱

빨간색은 포토샵에서 만들어서 붙였습니다 ㅎ;

 

box-shadow

box-shadow

 

border + border-radius

border-radius는 border값과 함께 적용해야합니다.

border + border-radius

 

 

Edge(-ms-)

input[type=range]::-ms-track {
  width: 100%;
  height: 8.4px;
  cursor: pointer;
  background: transparent;
  border-color: transparent;
  border-width: 16px 0;
  color: transparent;
}

 

 

스타일 적용 후 

width, height를적용 했을 때 width 확인은 어려웠고 height는 바의 높이 값이 달라집니다.

1px
8.4px

 

background:transparent

background:transparent

 

border-color:transparent

border-color:transparent

 

color:transparent;

color:transparent;

 

 

border-width:16px 0;

border-width:16px 0;

위로 16px 너비의 border를 적용하는데 border-color:transparent와 같이 사용하기 때문에

최종적으로는 아래와 같이 보입니다.

border-width:16px 0; / border-color:transparent

 

 

스타일 추가

여태한 결과에 스타일을 추가해보도록 하겠습니다.

(Edge같은 경우 기본 기능제공을 합니다. https://developer.mozilla.org/en-US/docs/Web/CSS/::-ms-fill-lower

진행 된 부분과 진행되어야하는 부분을 구분할 때 사용합니다.

input[type=range]::-ms-fill-lower {
  background: #2a6495;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}

 

 

스타일 적용 후 

background 마우스로 왼쪽에서 오른쪽으로 드래그하면 지나온 자리에 바 배경 색상이 적용됩니다.

background

 

border

border

 

border-radius

border-radius

fill-lower에 대해 좀 더 확인 할 수 있을 듯해서 잠시 -ms-track의 background:transparent, border-color:transparent를 지운 상태입니다. 드래그한 포인터의 값보다 작은 값(진행된 부분)에만 파란색 배경이 적용되고 있습니다.

 

box-shadow

box-shadow

 

지나온 영역말고 앞으로 가야할 영역에 대한 스타일도 적용할 수 있는지 찾아봤는데, 있습니다.

지나온 부분은 fill-lower이고 지나가야할 영역은 fill-upper입니다.

input[type=range]::-ms-fill-upper {
  background: #3071a9;
  border: 0.2px solid #010101;
  border-radius: 2.6px;
  box-shadow: 1px 1px 1px #000000, 0px 0px 1px #0d0d0d;
}

 

 

스타일 적용 후

fill-lower와 똑같은 값을 적용한 후 구분이 될 수 있도록 background 색상을 다르게 적용해줍니다.

b ackground

 

그리고 포커스 이벤트를 아래와 같이 적용합니다.

input[type=range]:focus::-ms-fill-lower {
  background: red;
}

input[type=range]:focus::-ms-fill-upper {
  background: pink;
}

 

 

스타일 적용 후 

focus

 

IE를 제외한 다른 브라우저는 lower, upper를 제공하고 있지 않습니다.

그래서 어떻게 할까 하다가 구글링한 정보입니다.

Firefox는 -moz-range-progress, -moz-range-track 셀렉터가 업데이트되었다고 합니다만....

mdn 문서를 보면 비표준이라고 뜨므로 업무에 사용하기에는 무리가 있어보입니다.

mdn 출처

 

그래서 더 찾아보다가 코드펜(codepen.io)에서 background-shadow를 사용해서 lower, upper 처럼 스타일을 지정한 사람을 찾았습니다.

(코드 출처  https://codepen.io/noahblon/pen/OyajvN)

저는 IE 배제하여 작업하여서 -ms-는 사용하지 않았습니다.

 

HTML

 <input type="range" value="0">

 

CSS

input[type=range] {
  -webkit-appearance: none;
  overflow: hidden;
  width: 100%;
  height: 10px;
  background: transparent;
  cursor: pointer;
  background: #e5e4e3;
  border-radius: 0; /* iOS */
}

input[type=range]:focus {
	outline: none;
}

input[type=range]::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 10px;
  height: 10px;
  background: #fff;
  box-shadow: -100vw 0 0 100vw dodgerblue;
  border: 0.1px solid dodgerblue;
  cursor: pointer;
}

 

 

스타일 적용 후

 

See the Pen PMpmjp by leeyoonseo (@okayoon) on CodePen.

 

 

 

 

그런데, 문제가 생겼습니다.

제 처음의 요구조건을 보면 포인터가 바의 크기보다 커야했습니다.

이 방법은 box-shadow로 크게 색칠한 후 overflow:hidden해서 영역을 감추는 방식입니다. 

그렇다보니 포인터가 바의 크기보다 커질수가 없습니다.

 

overflow:hidden을 제거한 모습
overflow:hidden

요구조건이 불가능했기 때문에 다른 방식으로 작업해봤습니다.

 

HTML

<input type="range" value="0">

 

CSS

input[type=range] {
  -webkit-appearance: none;
  width: 100%;
  height: 6px;
  background: #d5d4d3;
  cursor: pointer;
  border-radius: 0; /* iOS */
  transition: background 450ms ease-in;
}

input[type=range]:focus {
	outline: none;
}

input[type=range]::-webkit-slider-thumb{
  -webkit-appearance: none;
  width: 12px;
  height: 12px;
  background: #fff;
  border: 1px solid dodgerblue;
  border-radius:50%;
  cursor: pointer;
}

input[type=range]::-moz-range-thumb{
  -webkit-appearance: none;
  width:10px;
  height:10px;
  background: #fff;
  border: 1px solid dodgerblue;
  border-radius:50%;
  cursor: pointer;
}

 

JS

$('input[type=range]').on('input', function(){
  var val = $(this).val();
  $(this).css('background', 'linear-gradient(to right, dodgerblue 0%, dodgerblue '+ val +'%, #d5d4d3 ' + val + '%, #d5d4d3 100%)');
});

range의 value 값이 증가할 때 (1~100%) 그라디언트로 값을 삽입하는 방식입니다.

 

See the Pen jquery_range_css by leeyoonseo (@okayoon) on CodePen.

 

 

 

 

 

결론으로는..

크로스브라우징 이슈로 <input type="range">에서 <div> 태그로 변경하였습니다만,

CSS에 대해 많은 공부가 된 시간이었습니다.

 

 

 


 

소스 출처
https://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/ 
참고
mdn, can i use, codepen.io 등

 

리다이렉션이란 사용자 지정 위치로 우회시키는 방법입니다.(출력의 방향을 바꾸는)

 

예를 들어서 내가 만약 네이버로 접속했는데, 네이버에서 다음으로 리다이렉션 시킨다면

나는 네이버를 들어갔어도 결론적으로 다음 사이트에 들어가지게 됩니다.^^

 

보통 리다이렉션을 js로 작업하는데, 

접근한 사용자에 따라 분기를 해서 리다이렉트를 시키는 경우라면 아래와 같이 작업을 합니다.

if( user == '유저이름' ) { 
  window.location.href = '이 유저에게만 보여줄 주소';
}

 

근데 이번에 관련 검색을 하던 중에

<meta> 태그에도 리다이렉트 기능이 있다는 것을 알게되었습니다.

물론, <meta> 태그니까 강제로 태그를 수정하는 작업은 하지 말고, 심플하게 사용할 때 쓰도록 하면 좋을 것 같습니다.

 

비공개 페이지로 사용자가 접근헀을 경우에 비공개.html 파일의 <head> 부분에 아래와 같이 <meta>태그를 삽입해주면 됩니다.

예시 이미지1

*동적으로 작업해보고자 한다면,,  php나 jsp를 사용하여 분기 처리를 할 수도 있을 것 같습니다.

 

 

 

예시 이미지2

몇 초 뒤에 리다이렉션할지를 적어줍니다.

 

예시 이미지 3

어느 주소로 리다이렉션할지를 적어줍니다.

 

같은 페이지에서 이동시킬 때에는 http, https 프로토콜을 안 써도 되지만 같은 도메인이 아닐경우에는 프로토콜을 써주면 됩니다.

 

 

+ Recent posts