webkit 기반의 iPhone은 인풋박스를 자기 마음대로 표현하는 경향이 있습니다. 스타일시트로 보더와 색상을 조정해도 마음대로 되지 않는데요, 오늘은 아이폰에서 보여지는 인풋박스를 마음대로 요리하는 방법에 대해 이야기 하겠습니다. 일단 기본적으로 style을 width:200px; height:30px; border:1px solid #00f; 정도만 주었습니다. 일반 PC에서는 스타일을 준대로 잘 나올텐데요. 아이폰의 사파리로 같은 페이지를 보았을 경우에는 이렇게 보이게 됩니다.


흠,,,,, 일단 모서리가 동그랗게 되어있고, 상단에 그림자가 있는데요. 이래가지곤 원하는 디자인을 만들 수 없겠죠? 주면의 디자인과 어울리지 않을 수도 있고요. 그렇다면 이것을 반듯하게 만들어 보겠습니다. 스타일시트에 다음의 속성을 넣어주면 되는데요.

<style type="text/css">
input {-webkit-border-radius:1px;}
</style>


네, 이제 네모 반듯해졌네요. 그런데, 박스의 상단에 흐릿한 그림자가 있네요. 이게 웬 언밸런스입니까? 위에있는 그림자도 없애야지 더 마음에 들 것 같네요.

<style type="text/css">
input {-webkit-border-radius:1px; -webkit-apprearance:none;}
</style>

이렇게 해주면 그림자는 깔끔히 없어지게 됩니다. 볼까요?


이야~ 이제 제가 원하는 스타일이 되었습니다. 깔끔하게 반듯한 테두리만 남게 되었네요. 기분에 좋습니다. ^^ 여러분도 아이폰에서 인풋박스가 마음에 안들게 보일때는 이 방법을 써보세요.

 HTML5 input 의 속성 설명은 여기에서 보실 수 있습니다.

모바일에도 편안한 인터넷 세상이 올때까지!! 화이팅!

Posted by 나의시점
,
아이폰으로 인터넷을 하다보면은 여러가지 폼에다가 입력을 해야 할 경우도 많습니다. 아이폰을 사용해보신 분들은 아시겠지만 상황에 따라서 다른 키보드가 뜨는데요. 오늘은 input 박스의 type에 따라 다르게 뜨는 키보드의 모양의 분석해 보겠습니다.

우선 기본적으로 나오는 type=text 일 경우에는 다음과 같은 키보드가 나옵니다.


text일 경우에는 기본적인 키보트가 뜹니다. 인풋박스들이 <form> 태그에 쌓여있기 때문에 아래에는 "go" 라고 버튼이 뜹니다.

그렇다면 다음에 있는 땡땡땡 부분은 다들 아시다시피 password 부분입니다. 그 곳에 포커스가 가게 되면,


위와 같은 키보드가 돌출하게 되는데, 한가지 다른 점은 처음에 입력하는 값을 대문자로 입력하게 해주는, shift가 안눌려있습니다.


다음은 이메일인데, type을 email로 했을 경우에는 아주 친절하게도 @ 와 . 이 나오게 됩니다. 입력하기 참 쉽겠죠?


type=number 에 포커스 되었을 때는 특수문자를 눌렀을 경우와 같은 키보드가 나옵니다.


오늘의 하일라이트, type=tel 일경우에는 전화번호를 쉽게 입력할 수 있도록 전화번호 키패드가 뜨게 됩니다. 이거 정말 마음에 드네요. 주민등록번호나 전화번호를 입력할 때 사용하면 좋을 듯 합니다.


url의 경우도 email과 비슷합니다. url을 쉽게 입력할 수 있도록 /(슬래시)와 .com(닷컴)이 나오게 됩니다. 입력할 때 편하겠네요.


type=search 일 경우는 "Go" 부분이 "Search"로 변하고 나머지는 동일합니다. 다른 것들은 text와 동일하게 뜨므로 이미지는 생략하였습니다.

이런 것들을 잘 사용하면, 사용자들이 좀 더 편하게 사용할 수 있겠지요? 참, 그리고 한가지 팁은 url을 입력할 때, url을 입력하는 키보드가 나오지 않았을 경우에 닷컴을 입력하려면 특수문자 부분을 한번 갔다와야 하는데, 그렇지 않고 스페이스바를 두번 누르게 되면 점이 찍힙니다. 그런다음에 백스페이스를 한번 눌러주시고 입력해주시면 특수문자 키보드로 바꾸지 않고도 손쉽게 입력하실 수 있습니다.
Posted by 나의시점
,
요즘 아이폰의 보급으로 많은 사람들이 iPhone을 사용하고 있습니다. 그래서 iPhone의 Safari에 최적화된 웹페이지를 많이 제작하고 있는데요. 아이폰 사파리는 모바일 브라우저로 여러가지를 고려하여 개발해야 하는데요. 앞에서 포스팅한 전화번호 링크와 화면 확대되는 부분이외에 화면 확대는 막았어도 텍스트가 자동으로 확대가 되는 것을 볼 수 있습니다. 세로로 딱 맞게 작업했을 경우 가로로 보게 되면 폰트가 확대되어 있는 것을 볼 수 있는데요. 이렇게 되면 어느 환경에서나 잘 보이게 개발하기 힘들겠죠? 그래서 폰트가 확대되는 것을 막아야 합니다.

그림에서 볼 수 있듯이 세로로 잘 맞게 작업한 경우 가로로 봤을 때 두번째의 그림같이 확대가 되게 됩니다. 그래서 원래 생각했던 디자인과 다르게 나오게 될 수 있는데요.



이러한 경우에는 스타일 시트를 약간 수정하는 것으로 문제를 해결할 수 있습니다.

<style type="text/css">
* {-webkit-text-size-adjust:none;}
</style>

이렇게 해주면 아래의 그림과 같이 가로로 보았을 때도 세로로 보았을 때와 동일한 폰트 크기로 볼 수가 있습니다. 아이폰이 아직도 세력을 넓혀가고 있는 가운데, 모바일 개발에 없어서는 안되는 중요한 정보 같습니다. 저도 잘 기억하고 있어야겠네요.


Posted by 나의시점
,
아이폰 사파리에서 웹 서핑을 하다보면 자기도 나름 폰이라고 전화번호와 비슷하게 생긴것에는 자동으로 링크가 걸려 그것을 누르면 전화가 걸립니다. 어찌보면 똑똑하고 좋으나 웹사이트를 개발하는 입장에서 보면 좀 반갑지 않은 기능이기도 한데요.
이런 상황을 극복하기 위한 방법!!

<meta name="format-detection" content="telephone=no" />

위와 같은 매타값을 주게 된면, 아이폰의 사파리가 자기 마음대로 링크를 만들지 않습니다.
헌데, 혹시나 전화 바로거는 링크를 만들일이 있지 않을까요? 물론 그럴 때를 대비해서 요런 방법이 존재합니다.

<a href="tel:010-1234-5678">전화를 거는 링크</a>

위와 같이 <a>태그를 걸어주면 아이폰 사파리에서 바로 전화를 거는 링크를 만들 수 있다습니다. ^^
이 것을 사용하면 좀 더 사용하기 편리한 사이트를 만들 수 있겠죠?
쓰면 쓸수록 아이폰, 이건 참 물건인 것 같네요. 허허허
Posted by 나의시점
,
2009년 말 우리나라에도 아이폰이 출시하면서 우리나라의 인터넷 환경도 많이 바뀌게 되었는데요. 비단 아이폰 뿐만아니라 아이본과 더불어 삼성의 옴니아2, 그리고 구글의 새로운 모바일 OS 안드로이드를 탑재한 폰들이 다수 나오게 되면서 2010년 상반기는 인터넷 업계에도 많은 변화가 일어난 것 같습니다. 포털에는 모바일 웹페이지와 모바일폰용 어플리케이션 개발이 당연하게 되었구요. 앞으로는 더 다양한 분야에서, 그리고 다양한 사람들이 모바일 웹페이지를 만들고 사용하게 될것입니다. 그러기 위해선 "접근성"이라는 문제가 대두되게 되는데요. 이전에 이야기하던 장애인에 국한된 접근성이 아니라, 어떤 장애가 있든지 + 어떤 환경에 있든지 정보에 접근할 수 있고 그것을 이용할 수 있어야 할 것입니다.

모바일 웹을 개발하기 위해서는 일반 컴퓨터 환경과는 약간 다르기 때문에 고려해야 할 사항들이 몇가지 있습니다. 오늘은 처음으로 모바일 웹에 대해 이야기 하고자 하는데요. 모바일 웹이 일반 웹과 다른 것 중 가장 중요한 것은 접속하는 환경적인 차이가 너무 확연하게 크다는 것입니다. 이미 웹 표준이 대두되면서 크로스브라우징 문제가 많이 있었는데요. 우리나라의 인터넷 익스플로러 기반으로 개발된 많은 웹페이지가 다른 브라우져(파이어폭스, 사파리, 크롬, 오페라 등)에서 많이 깨지게 되는 현상입니다. 그래도 그나마 그것은 비슷한 컴퓨터 환경인데 모바일 환경은 그 차원이 달라집니다. 우선 OS부터에서 매우 다양하고, 마우스가 없으며 키보드가 제한적입니다. 그리고 무엇보다 디스플레이의 해상도가 천차만별입니다. 그러한 다양한 환경을 극복하기 위해서는 일단 심플하고 어떠한 화면 해상도도 커버할 수 있는 문서를 만들어야 합니다.

오늘은 처음으로 meta 값인 viewport 를 살표보도록 합시다. 우선 시원스럽게 사용방법부터 보지요. 메타값은 head 부분에 넣는 것은 다들 아시겠죠?

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />

viewport는 화면의 확대를 관리하는 것입니다. 모바일 웹브라우져는 대부분 기기의 화면이 작기 때문에 원래의 페이지를 축소해서 보여줍니다. 하지만 모바일에 최적화 된 페이지는 그럴 필요가 없겠죠? width 를 100%로 주어 어떤 해상도에서도 딱 맞춤형으로 나오는 것이 사용성이 훨씬 좋아집니다. 그러기 위해서는 화면을 확대하는 것을 방지해야 하는데요. 이것을 사용하면 가로보기로 전환시에 확대가 되는 것을 방지 합니다. 코드의 내용을 자세히 보면, initial-scale 은 처음 열렸을 때, maximum-scale 은 확대시의 최대로 확대되는 비율을 나타냅니다. 그리고 user-scalabe 을 통해서 확대를 사용할지 안할지를 결정할 수 있습니다.


보통의 아이폰 사파리의 화면입니다. viweport 를 사용하지 않을 시에는 가로보기로 전환시 화면이 확대되게 됩니다. 하지만 viewport meta 값을 적용해주게 되면 가로나 세로에서 아주 딱맞에 화면에 표현됩니다.


폰트의 크기 변화가 없고, 화면의 width 가 넓어졌기 때문에 상단에 보이는 2번째 메뉴가 한줄로 늘어서게 된것을 볼 수 있습니다. 이 것을 사용하면 좀 더 매력적인 모바일 사이트를 만들 수 있습니다.

제 생각에 지금 이슈화 되고 있는 모바일 웹은 앞으로 인터넷 환경이 나아가게 될 새로운 시작이라고 생각합니다. 지금의 스마트폰 정도에서 뿐만 아니라, 아이패드 같은 다른 차원의 모바일 기기, 그리고 TV 로 까지 많은 변화가 일어날 것입니다. PC에서만 보아왔던 인터넷은 이제 어떠한 환경에도 구애받지 않고 우리에게 다가오게 될 것입니다. 한동안 잠잠했던 인터넷 세상은 크게 변화하기 위해 꿈틀거리고 있는 것 같습니다. 아직은 하루 앞이 잘 보이지 않지만 더 좋은 세상이 올거라는 것을 믿어 의심치 않습니다. 그런 좋은 세상을 만들기 위해 바로 우리가 노력해야 하는 것이 아닐까요?

Posted by 나의시점
,
1. 입력상자에서 자리수 차면 이동하기
 <SCRIPT-x language=JavaScript-x>
<!--
function Numberchk() {
 if ((event.keyCode<48)||(event.keyCode>57)){
  alert("숫자만 !!");
  event.returnValue=false;
 }
}
function Nextchk(arg,len,nextname) {
 if (arg.value.length==len) {
  nextname.focus() ;
  return;
 }
}
// -->
</SCRIPT-x>
<!-- 자릿수가 차면 다음 포커스로 이동하는 합니다 -->
<FORM method=post name=zipcode>
<font size="2">우편번호</font>
<INPUT maxLength=3 name=zip1 size=3 onkeypress='Numberchk()' onkeyup='Nextchk(this,3,document.zipcode.zip2)'>
-
<INPUT maxLength=3 name=zip2 size=3 onkeypress='Numberchk()'>
</FORM>

2.입력상자에서 정수만 입력가능
<SCRIPT-x language=JavaScript-x>
<!--
function Numberchk() {
 if ((event.keyCode<48)||(event.keyCode>57)) {
  alert("숫자만 !!");
  event.returnValue=false;
 }
}
// -->
</SCRIPT-x>
<FORM method=post name=zipcode>
<font size="2">우편번호</font>
<INPUT maxLength=3 name=zip1 size=3 onkeypress='Numberchk()'>
- <INPUT maxLength=3 name=zip2 size=3 onkeypress='Numberchk()'>
</FORM>



Posted by 알 수 없는 사용자
,
HTML과 CSS를 이용하여 늘어나는 박스를 만들어 보았습니다. 원리를 간단히 설명 드리자면, 최대로 늘어나고자 하는 크기의 큰 이미지를 만들고 div 앨리먼트를 여러겹으로 겹쳐서 늘어나는 부분의 둥근 모서리가 들어나게 하는 방식 입니다. 말로 아무리 설명해봐야 이해가 잘 안되지요. 그렇다면 직접 한번 볼까요?

<div class="box_v"><div class="box_v">여기에 내용이 들어갑니다.</div></div>

이렇게 두겹으로 마크업을 해주면 두 방향으로 늘어나는 것을 해결 할 수 있습니다. 예를 들어 "좌우" 나 "상하" 같은 두방향 말입니다. padding 을 이용하여 안에 있는 앨리먼트를 약간 밀어내어 모서리의 둥근 배경이 보이게 하는 방식입니다.

div.box_v {width:400px; background:url(box_v.gif) no-repeat left top; padding:20px 0 0 0;}
div.box_v div.box_v {width:360px; background:url(box_v.gif) no-repeat left bottom; padding:0 20px 20px;}

바깥쪽을 싸고 있는 div의 상단에 padding값을 주어 상단의 배경이 노출되게 하고 안쪽의 앨리먼트에 배경 이미지가 아래부터 시작하게 배치하면 위의 모서리와 아래의 모서리가 표현되게 됩니다. 그리 어렵지는 않죠?

좌우로 늘어나는 박스는 약간의 문제점이 있는데 display 속성이 inline 인 것은 컨턴츠에 따라 크기 조절이 가능하지만 height를 지정할 수가 없고, block 속성을 가지고 있는 것들은 기본적으로 100%를 차지하고 있어서 컨텐츠의 크기에 따라 width값을 조절할 수가 없습니다. 그래서 사용한 것이 float, 이 것을 사용하면 두가지 효과를 모두 낼 수 있지만 일반 앨리먼트처럼 사용하려면 조금은 까다롭겠죠?


이제 문제는 사방으로 늘어나는 박스 입니다. 좌우와 상하는 한쪽 고민하면 되지만 사방을 고려하면 머리가 아파집니다. 일단 사방의 모서리를 관리해야하기 때문에 앨리먼트를 4개를 사용하겠습니다. 사용할 수 있는 방법이 두가지가 있습니다.

<div class="box_f"><div class="frame1"></div><div class="frame2"><div class="frame3">이곳에 컨텐츠를 입력하면 됩니다.</div></div></div>

<div class="box_f2"><div class="frame1"><div class="frame2"><div class="frame3">이곳에 컨텐츠를 입력하면 됩니다.</div></div></div></div>

자, 차이가 보이시나요? 두가이 마크업 방법이 있는데, 배경이미지를 다른곳에서도 함께 사용하여 온전한 큰 프레임 이미지 하나를 사용해야 한다면 첫번째 방법을 사용하면 되고, 그것이 아니고 이미지의 편집이 가능하다면 두번째 방법을 사용하여도 무방합니다. 직관적으로 보았을때 두번째 것이 덜 햇갈릴것으로 보입니다. 4개의 div가 순차적으로 싸고 있으니 조금은 이해가 편할듯 싶네요. 이렇게 마크업을 한다음에 CSS를 이용하여 늘어나는 박스를 만들어보면

div.box_f {float:left; background:url(box_f.gif) no-repeat right top;}
div.box_f div.frame1 {background:url(box_f.gif) no-repeat left top; padding:24px 0 0 0; margin:0 24px 0 0;}
div.box_f div.frame2 {background:url(box_f.gif) no-repeat right bottom; padding:0 24px 0 0;}
div.box_f div.frame3 {background:url(box_f.gif) no-repeat left bottom; padding:0 0 24px 24px;}

div.box_f2 {float:left; background:url(box_f2.gif) no-repeat right -24px;}
div.box_f2 div.frame1 {background:url(box_f2.gif) no-repeat left top; padding:24px 0 0 0;}
div.box_f2 div.frame2 {background:url(box_f2.gif) no-repeat right bottom; padding:0 24px 0 0;}
div.box_f2 div.frame3 {background:url(box_f2.gif) no-repeat -24px bottom; padding:0 0 24px 24px;}

코드를 보면 쉽게 이해가 될 것입니다. 두번째 방법에서 -24px를 사용한 이유는


이미지를 이렇게 넣었기 때문입니다. 모서리 한부분을 빼놓아 CSS sprite를 사용하여 배경이미지를 적용하였습니다. 여기 그림에서는 잘 보이지 않지만 상단과 좌측 부분은 투명하게 되어있습니다.




새 새창으로 열어서 창의 크기를 조절해보면 사방으로 늘어나는 박스를 체험해 보실 수 있습니다.

샘플페이 지 새창으로 열기
Posted by 나의시점
,
인터넷에서 서식을 작성하다 보면 인풋박스( <input type="text" /> )에 글을 쓸때, 한글을 쓰려고 하면 영문이 나오고, 영문을 쓰려고 하면 한글이 나오고 해서 좀 답답할 때가 있을것이라 생각합니다. (저만 그런건가?) 아무튼, 그럴때 사용자를 조금만 더 생각한다면 답답하지 않고 사용하게 편할 수 있을 것 같습니다. 사용자를 배려하는 웹사이트 ㄱㄱ 출발!!

아주 간단합니다. 인풋박스를 가리키는 스타일에 "ime-mode"라는 속성을 주면 되는데요. 아래의 표를 참고하면 되겠네요.

 inactive default 로 영문모드
 active  default 로 한글모드
 auto  한/영 중 선택된 모드
 disable  영문만을 사용할 수 있는 모드

구체적인 사용방법은 이렇습니다.

<input type="text" style="ime-mode:inactive;" />

이런식으로 주면 되는데요. 뭐 어차피 스타일이기 때문에 이왕이면 스타일 시트에 주는게 낫겠지요?

<style type="text/css">
input.han {ime-mode:active;}
</style>

<input type="text" class="han" />

이렇게 사용하면 됩니다. "참~ 쉽죠잉~?" 그런데 매우 안타까운 점은 인터넷익스플로러에서만 되는 사실! 으악... 매우 서글프네요. 그래도 익스플로러를 대부분 사용하니 나름 다수의 사용자를 배려할 수 있겠지요? 아무튼 더 좋은 방법이 있다면 댓글이나 알려주시면 감사하겠습니다. ^^

작은 배려로 사용하기 더 편하게!
Posted by 나의시점
,
작업을 하다보면 텍스트가 정해진 width를 넘어가는 경우 어떻게 처리해야 하나 고민이 될 때가 있습니다. 그럴 때는 상황에 따라서 이 것들을 사용해서 해결해주면 좋을 듯 합니다.

word-break


word-break 는 말 그대로 단어를 자르는 겁니다. 기복적으로 줄이 넘어갈 때는 단어단위로 잘려서 넘어가게 되어 있습니다. 그래서 띄어 쓰기를 하지 않고 글을 쓴다면 한 단어로 인식하여서 width 를 넘어가도 줄바꿈이 되지 않습니다. 그럴 때 word-break 를 사용해주면 줄바꿈이 가능하게 됩니다.


.selector {word-break:break-all;}

위와 같은 속성을 주게되면 위의 그림의 아래 부분과 같이 단어 중간에서도 줄바꿈이 가능하게 됩니다. 위의 그림이 잘 이해가 가지 않는다면 이 그림을 보시면 단번에 이해가 가실 것 입니다.


단어의 중간에서 줄바꿈이 되는 효과입니다. 이 것의 반대 속성은 nowrap, keep-all 등을 주면 된다는데 제가 실험해본 결과 잘 안되는 것 같습니다. 그래서 이번에 같이 소개할 white-space 를 사용하시면 됩니다.

white-space


white-space는 여러가지 값이 있는데, 정리를 해보자면 이렇습니다.

inherit  말그대로 상속 받는 것
normal  일반적인 것, default
nowrap  줄바꿈을 하지 않는다
pre  <pre>태그와 같은 기능, 마크업에서 앤터로 줄바꿈 한것 만 적용이 되고 넘어가는 것에는 줄바꿈 하지 않는다
pre-line  마크업에서 줄바꿈 한 것이 적용 되면서 width를 넘어가는 텍스트도 자동으로 줄바꿈이 된다
pre-wrap  pre-line 과 비슷

말로 길게 설명해 무엇합니까? 그렇다면 눈으로 확인해 봅시다.

HTML 마크업은 다음과 같이 했습니다. 줄바꿈은 왼쪽에 보이는 라인넘버에서 알 수 있듯이 2번 하였습니다. 다시말해 단락이 3개라는 뜻 입니다. 스타일은  넓이를 400px 을 주고 사방으로 padding 을 10px 씩 주었습니다.


일반적으로 랜더링하면 단어 단위로 줄바꿈이 된 형태로 나오게 되는데 여기에서 속서을 하나씩 주면 기능을 한 눈에 알 수 있습니다.

우선 inherit 은 상속되는 것이므로 넘어가고 (IE8에는 인식을 못한다고 합니다.) normal 은 기본인데 Original 과 동일하다고 보시면 됩니다. nowrap 속성을 주게되면 줄바꿈이 되지 않습니다.


그리고 pre 속성은 <pre> 태그와 동일한 역할을 합니다. 마크업에서 줄바꿈 (앤터) 해준 것을 적용해주는 것인데요, 여기서는 두번 줄바꿈을 하였기 때문에 3 단락으로 나뉘어져 있습니다. 그리고 width 를 넘어가는 텍스틑는 줄바꿈이 되지 않습니다.


다음으로 pre-line 속성을 주게되면 pre를 준 것과 같이 마크업에서 줄바꿈 한 부분에서도 줄바꿈이 되고, width 값을 넘어가는 부분에 대하여 줄바꿈이 됩니다.


per-wrap 속성을 주면 pre-line 을 적용해준 것과 동일한 결과가 나오는데 구체적인 차이는 잘 모르겠습니다. 자세한 내용은 w3cschool 을 참조해 보시는 것이 더 좋을 듯 합니다.


Posted by 나의시점
,