Dev Blog

스크립트 & 소스코드 공유

실무에서 유용하게 쓰는 스크립트와 코드 조각을 블로그 게시판으로 저장하고 공유합니다.

26건의 글

CSS로 웹폰트 글자 계단 현상(안티앨리어싱) 해결하기

낮은 버전 IE 등 일부 브라우저에서 웹폰트 글자가 계단처럼 보이는 안티앨리어싱 문제를 해결하는 CSS 팁이다. 육안으로 구분되지 않는 미세한 기울기 transform: skew(0.001deg)를 글자에 적용하면 렌더링이 부드러워지며, .font_sel 클래스에 적용하는 예제 코드를 함께 소개한다.

使用WEBFONT时,低版本的IE浏览器以及其他浏览器显示字体有锯齿现象解决方。

.font_sel {transform:skew(-0.001deg);}

给些肉眼看不出来的斜度

순수 CSS로 radio·checkbox 스타일 예쁘게 꾸미기

JavaScript 없이 순수 CSS만으로 라디오 버튼과 체크박스를 예쁘게 스타일링하는 방법이다. 기본 input을 숨기고 label과 가상 요소(::before, ::after)를 활용해 커스텀 UI를 구성하며, 체크 상태에 따라 색상과 모양이 바뀌도록 하는 CSS와 HTML 구조 예제를 제공한다.

css

/* 체크박스 스타일시트 */
.ck_style{margin:0 10px 0 0;display:inline-block;}
.ck_style input[type="radio"] , .ck_style input[type="checkbox"]{display:none}
.ck_style i{background-color:#fff;border:1px solid rgba(0,0,0,0.15);border-radius:100%;display:inline-block;height:18px;margin-right:6px;margin-top:-1px;vertical-align:middle;width:18px;line-height:1}
.ck_style input[type="radio"]:checked + i:after{background-color:#2fa2dd;border-radius:100%;content:"";display:inline-block;height:12px;margin:2px;width:12px}
.ck_style input[type="checkbox"] + i{border-radius:0}
.ck_style input[type="checkbox"]:checked + i:after{background-color:#2fa2dd;border-radius:0;content:"";display:inline-block;height:12px;margin:2px;width:12px}

HTML

<label class="ck_style"><input type="radio" name="demo-radio"><i></i> 여</label>
<label class="ck_style"><input type="radio" name="demo-radio"><i></i>부</label>

<label class="ck_style"><input type="checkbox" name="demo-radio"><i></i> 기술이전</label>
<label class="ck_style"><input type="checkbox" name="demo-radio"><i></i> 공동연구</label>
<label class="ck_style"><input type="checkbox" name="demo-radio"><i></i> 위탁연구</label>
<label class="ck_style"><input type="checkbox" name="demo-radio"><i></i> 가족기업</label>

유튜브 영상을 웹페이지 배경으로 사용하는 CSS 기법

유튜브 동영상을 웹페이지 전체 배경으로 사용하는 HTML/CSS 기법이다. video-background 컨테이너와 video-foreground 안의 iframe을 화면에 꽉 차게 배치하고 z-index를 낮춰 콘텐츠 뒤에 깔리게 한다. 화면 비율에 따라 16:9, 9:16 미디어 쿼리로 확대 영역을 조정하는 전체 CSS와 HTML 예제 코드를 제공한다.

* {
  box-sizing: border-box;
}

.video-background {
  background: #000;
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: -99;
}

.video-foreground,
.video-background iframe {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}

#vidtop-content {
  top: 0;
  color: #fff;
}

.vid-info {
  position: absolute;
  top: 0;
  right: 0;
  width: 33%;
  background: rgba(0, 0, 0, 0.3);
  color: #fff;
  padding: 1rem;
  font-family: Avenir, Helvetica, sans-serif;
}

.vid-info h1 {
  font-size: 2rem;
  font-weight: 700;
  margin-top: 0;
  line-height: 1.2;
}

.vid-info a {
  display: block;
  color: #fff;
  text-decoration: none;
  background: rgba(0, 0, 0, 0.5);
  transition: .6s background;
  border-bottom: none;
  margin: 1rem auto;
  text-align: center;
}

@media (min-aspect-ratio: 16/9) {
  .video-foreground {
    height: 300%;
    top: -100%;
  }
}

@media (max-aspect-ratio: 16/9) {
  .video-foreground {
    width: 300%;
    left: -100%;
  }
}

@media all and (max-width: 600px) {
  .vid-info {
    width: 50%;
    padding: .5rem;
  }

  .vid-info h1 {
    margin-bottom: .2rem;
  }
}

@media all and (max-width: 500px) {
  .vid-info .acronym {
    display: none;
  }
}
<div class="video-background">
  <div class="video-foreground">
    <iframe class="ww" src="https://www.youtube-nocookie.com/embed/n0AY4ebPy4w?autoplay=1&loop=1&controls=0&vq=hd720"
      frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
      allowfullscreen></iframe>
  </div>
</div>
<div id="vidtop-content">
  <div class="vid-info">
    <h1>YouTube</h1>
    <p>Good!</p>
  </div>
</div>

CSS 선택자(Selector) 참조 매뉴얼

CSS 선택자를 정리한 참조 매뉴얼이다. 클래스·ID·요소 선택자, 속성 선택자([target], [attr^=], [attr$=], [attr*=] 등), 가상 클래스(:hover, :focus, :first-child, :before, :after 등)와 CSS 버전별 지원 범위, 그리고 조합 선택자(후손·자식·인접 형제)를 예시와 함께 표로 정리했다.

选择器 例子 例子描述 CSS
.class .intro 选择 class="intro" 的所有元素。 1
#id #firstname 选择 id="firstname" 的所有元素。 1
* * 选择所有元素。 2
element p 选择所有 <p> 元素。 1
element,element div,p 选择所有 <div> 元素和所有 <p> 元素。 1
element element div p 选择 <div> 元素内部的所有 <p> 元素。 1
element>element div>p 选择父元素为 <div> 元素的所有 <p> 元素。 2
element+element div+p 选择紧接在 <div> 元素之后的所有 <p> 元素。 2
[attribute] [target] 选择带有 target 属性所有元素。 2
[attribute=value] [target=_blank] 选择 target="_blank" 的所有元素。 2
[attribute~=value] [title~=flower] 选择 title 属性包含单词 "flower" 的所有元素。 2
[attribute|=value] [lang|=en] 选择 lang 属性值以 "en" 开头的所有元素。 2
:link a:link 选择所有未被访问的链接。 1
:visited a:visited 选择所有已被访问的链接。 1
:active a:active 选择活动链接。 1
:hover a:hover 选择鼠标指针位于其上的链接。 1
:focus input:focus 选择获得焦点的 input 元素。 2
:first-letter p:first-letter 选择每个 <p> 元素的首字母。 1
:first-line p:first-line 选择每个 <p> 元素的首行。 1
:first-child p:first-child 选择属于父元素的第一个子元素的每个 <p> 元素。 2
:before p:before 在每个 <p> 元素的内容之前插入内容。 2
:after p:after 在每个 <p> 元素的内容之后插入内容。 2
:lang(language) p:lang(it) 选择带有以 "it" 开头的 lang 属性值的每个 <p> 元素。 2
element1~element2 p~ul 选择前面有 <p> 元素的每个 <ul> 元素。 3
[attribute^=value] a[src^="https"] 选择其 src 属性值以 "https" 开头的每个 <a> 元素。 3
[attribute$=value] a[src$=".pdf"] 选择其 src 属性以 ".pdf" 结尾的所有 <a> 元素。 3
[*attribute*=value*] a[src*="abc"] 选择其 src 属性中包含 "abc" 子串的每个 <a> 元素。 3
:first-of-type p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。 3
:last-of-type p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素。 3
:only-of-type p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。 3
:only-child p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素。 3
:nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。 3
:nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数。 3
:nth-of-type(n) p:nth-of-type(2) 选择属于其父元素第二个 <p> 元素的每个 <p> 元素。 3
:nth-last-of-type(n) p:nth-last-of-type(2) 同上,但是从最后一个子元素开始计数。 3
:last-child p:last-child 选择属于其父元素最后一个子元素每个 <p> 元素。 3
:root :root 选择文档的根元素。 3
:empty p:empty 选择没有子元素的每个 <p> 元素(包括文本节点)。 3
:target #news:target 选择当前活动的 #news 元素。 3
:enabled input:enabled 选择每个启用的 <input> 元素。 3
:disabled input:disabled 选择每个禁用的 <input> 元素 3
:checked input:checked 选择每个被选中的 <input> 元素。 3
:not(selector) :not(p) 选择非 <p> 元素的每个元素。 3
::selection ::selection 选择被用户选取的元素部分。 3

다중 브라우저 호환 CSS 이미지 좌우 반전(미러) 효과

한 장의 이미지로 좌우가 대칭인 미러 이미지를 만드는 CSS 기법을 소개한다. 기존에 IE에서만 동작하던 필터 방식 대신, 파이어폭스·크롬 등 다중 브라우저에서 지원되는 transform: scaleX(-1) 스타일을 이용하며, 이미지에 적용하는 CSS 정의와 HTML에서 사용하는 예제 코드를 함께 보여준다.

今天接到一个需求,通过一张图片得到其镜像对称的图片。本来说是后台处理的,但这样除了技术上难实现之外,还带来了资源消耗的问题,相当于每张图都要存储一个副本了。

只记得以前用过css的滤镜可以实现这个,但只在IE下有效。后来找到一个兼容多浏览器的样式,大爱。

css样式定义:

.flip-horizontal {
-moz-transform: scaleX(-1);
-webkit-transform: scaleX(-1);
-o-transform: scaleX(-1);
transform: scaleX(-1);
filter: fliph; /*IE*/ }
.flip-vertical {
-moz-transform: scaleY(-1);
-webkit-transform: scaleY(-1);
-o-transform: scaleY(-1);
transform: scaleY(-1);
filter: flipv; /*IE*/ }

HTML引用示例:

<img src="/data/editor/2004/logo-zhidao_Znb6RGemhY4.gif" class="flip-horizontal" />
<img src="/data/editor/2004/logo-zhidao_Znb6RGemhY4.gif" class="flip-vertical" />


Let's create something great together.

프로젝트 문의 및 견적 요청은 언제든 환영합니다.