반응형

보통 리스트를 만들 때, 많이 쓰는 태그는 뭐니뭐니해도 <ul> 이지만 숫자 리스트를 써야할 때는 간혹 <ol>을 쓰기도 하는데, 

앞단에 숫자만 나열하기에는 아쉬움이 남아 숫자를 이쁘게 꾸며볼 생각으로 이것저것 뒤적여보던 중에 <ol>이 아닌 <ul>로, 앞단에 자동으로 카운터가 붙는 리스트를 오직 css로만 써서 만들 수 있는 팁을 발견했습니다. 

먼저 예시로 아래 내용을 준비해주세요.

 

* HTML

<ul class="num">
	<li>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Nisl tincidunt eget nullam non.</li>	
	<li>Quis hendrerit dolor magna eget est lorem ipsum dolor sit. Volutpat odio facilisis mauris sit amet massa. </li>	
	<li>Commodo odio aenean sed adipiscing diam donec adipiscing tristique. Mi eget mauris pharetra et. </li>	
</ul>

 

* CSS

ul,li {
	list-style:none;
}
.num {
    counter-reset: list-number;
    margin-bottom: 49px;
}
.num > li {
    counter-increment: list-number;
    padding-bottom: 7px;
    font-size: 20px;
}
.num > li::before {
    content: counter(list-number);
    display: inline-block;
    text-align: center;
    line-height: 1.5;
    width: 25px;
    height: 25px;
    border-radius: 50%;
    color: #fff;
    margin-right: 10px;
    background: #00CE7A;
    font-size: 16px
}

 

* 적용화면

 

 

부모 요소인 counter-reset는 카운터를 할 환경을 만들어주는 css로 list-number; 또는 list-number 0; 으로 값을 초기화 해줍니다. (여기서 list-number는 임의로 적어둔 변수입니다.)

counter-increment는 증가량으로 counter-reset과 마찬가지로 list-number; 또는 list-number 1; 으로 값을 지정해줍니다.

마지막으로 li::before에 content: counter(list-number);를 적어주면 완성됩니다.


* 참고사이트
https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Counter_Styles/Using_CSS_counters
https://blog.logrocket.com/styling-numbered-lists-with-css-counters/
https://wellcode.tistory.com/12

반응형
반응형

탭이 4,5개 이상 넘어버릴 때 디자인을 하기가 참 난감한 상황이 간혹 생깁니다. 탭을 나열하는 디자인 방식이라더라도 웹에서는 자연스러워 보일 지 모르겠지만 모바일 상에서 볼 때는 화면을 너무 차지해 지저분해보일 수 있으니까요.

이럴 때 쓰면 좋을 플러그인이 바로 slick.js 플러그인과 swiper.js 플러그인을 쓰는 방식인데요. 두 플러그인 전부 실무에서 많이 쓰는 플러그인인 만큼 실용성이 좋습니다.

먼저 <head> 안에 아래 스크립트로 세팅해줍니다.

 

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" />
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css"/>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>

 

그 다음, <style>과 <body>, <script>에 각각 소스를 넣어주세요.

 

<style>

.slick-initialized .swipe-tab-content {
  position: relative;
  min-height: 365px;
}
@media screen and (min-width: 767px) {
  .slick-initialized .swipe-tab-content {
    min-height: 500px;
  }
}
.slick-initialized .swipe-tab {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 50px;
  background: none;
  border: 0;
  color: #757575;
  cursor: pointer;
  text-align: center;
  border-bottom: 2px solid rgba(0, 0, 0, 0);
  transition: all 0.5s;
}
.slick-initialized .swipe-tab:hover {
  color: #000;
}
.slick-initialized .swipe-tab.active-tab {
  border-bottom-color: #000;
  color: #000;
  font-weight: bold;
}

.main-container {
  padding: 25px;
  background: #f1f1f1;
}

 

<body>

<div class="sub-header ">
  <div class="swipe-tabs">
    <div class="swipe-tab">One</div>
    <div class="swipe-tab">Two</div>
    <div class="swipe-tab">Three</div>
    <div class="swipe-tab">Four</div>
    <div class="swipe-tab">Five</div>
  </div>
</div>
<div class="main-container">
  <div class="swipe-tabs-container ">
    <div class="swipe-tab-content">Tab 1</div>
    <div class="swipe-tab-content">Tab 2</div>
    <div class="swipe-tab-content">Tab 3</div>
    <div class="swipe-tab-content">Tab 4</div>
    <div class="swipe-tab-content">Tab 5</div>
  </div>
</div>

 

<script>

$(function () {
	'use strict';

	var $swipeTabsContainer = $('.swipe-tabs'),
		$swipeTabs = $('.swipe-tab'),
		$swipeTabsContentContainer = $('.swipe-tabs-container'),
		currentIndex = 0,
		activeTabClassName = 'active-tab';

	$swipeTabsContainer.on('init', function(event, slick) {
		$swipeTabsContentContainer.removeClass('invisible');
		$swipeTabsContainer.removeClass('invisible');

		currentIndex = slick.getCurrent();
		$swipeTabs.removeClass(activeTabClassName);
       	$('.swipe-tab[data-slick-index=' + currentIndex + ']').addClass(activeTabClassName);
	});

	$swipeTabsContainer.slick({
		//slidesToShow: 3.25,
		slidesToShow: 3,
		slidesToScroll: 1,
		arrows: false,
		infinite: false,
		swipeToSlide: true,
		touchThreshold: 10
	});

	$swipeTabsContentContainer.slick({
		asNavFor: $swipeTabsContainer,
		slidesToShow: 1,
		slidesToScroll: 1,
		arrows: false,
		infinite: false,
		swipeToSlide: true,
    draggable: false,
		touchThreshold: 10
	});


	$swipeTabs.on('click', function(event) {
        // gets index of clicked tab
        currentIndex = $(this).data('slick-index');
        $swipeTabs.removeClass(activeTabClassName);
        $('.swipe-tab[data-slick-index=' + currentIndex +']').addClass(activeTabClassName);
        $swipeTabsContainer.slick('slickGoTo', currentIndex);
        $swipeTabsContentContainer.slick('slickGoTo', currentIndex);
    });

    //initializes slick navigation tabs swipe handler
    $swipeTabsContentContainer.on('swipe', function(event, slick, direction) {
    	currentIndex = $(this).slick('slickCurrentSlide');
		$swipeTabs.removeClass(activeTabClassName);
		$('.swipe-tab[data-slick-index=' + currentIndex + ']').addClass(activeTabClassName);
	});
});

 

이렇게 완성! 

 


하면 좋겠지만 탭 자체가 좌우 화살표가 없어 조금 불편합니다. 

화살표까지 넣어보도록 하겠습니다.

<body> .sub-header 안에 내용을 추가합니다.

 

<div class="arrowSlider">
		<span class="prev" id="aro1_prev">◀</span>
		<span class="next" id="aro1_next">▶</span>
	</div>

 

swiper 슬라이더에 slick 탭이 있는 상황이기 때문에 slick 탭에 화살표를 넣어주어야 합니다. <script>에 적어둔 내용에 아래 내용으로 수정해주세요.

 

$swipeTabsContainer.slick({
		//slidesToShow: 3.25,  // 추가 수정된 내용!
		slidesToShow: 8,
		slidesToScroll: 1,
		arrows: true, // 추가 수정된 내용!
		prevArrow: $('#aro1_prev'),  // 추가 수정된 내용!
		nextArrow: $('#aro1_next'),  // 추가 수정된 내용!
		infinite: false,
		swipeToSlide: true,
		touchThreshold: 10,
		responsive: [
		{
		  breakpoint: 934,
		  settings: {
			slidesToShow: 3,
		  }
		}
		]
	});

 

마지막으로 <style>에 아래 내용을 넣어주면 완성입니다.

 

.arrowSlider {position:relative;}
#aro1_prev {position:absolute;left:0px;cursor:pointer;}
#aro1_next {position:absolute;right:0px;cursor:pointer;}
.slick-slider {margin:0 30px;}

 

 

이렇게 되면 화살표가 있는 형태로 완성됩니다.
반응형이기 때문에 모바일에서도 깔끔하게 보여집니다. 

 

 


* 참고 : https://codepen.io/gbhasha/pen/gaggRR

반응형
반응형

[Tip] 웹폰트 적용 방식


웹폰트를 적용하는 방법에는 여러 가지가 있지만 제가 실무에서 웹폰트를 주로 쓰는 방식은 

보통 css 파일에서 @import url로 다른 사이트에 있는 css를 불러와 사용하는 방식입니다. 

 

이밖에도 상황에 따라 웹폰트를 다르게 적용하고는 하는데, 

그중 개인적으로 제가 자주 쓰는 방식들로 정리해보았습니다. 

 

1. @import url

 

@import url("//fonts.googleapis.com/earlyaccess/notosanskr.css"); //노토산스체
@import url("//cdn.rawgit.com/moonspam/NanumSquare/master/nanumsquare.css"); //나눔스퀘어체

 

자주 쓰는 @import url 방식으로 css 파일에 해당 웹폰트를 올려주고 font-family에 폰트를 넣어주면 적용이 끝납니다.

노토산스체는 구글 폰트에서, 나눔스퀘어체는 눈누에서 가져왔습니다.

 

* 구글폰트 : https://fonts.google.com/specimen/Noto+Sans+KR?subset=korean

* 눈누 : https://noonnu.cc/font_page/37

 

 

2. link href

 

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100&display=swap" rel="stylesheet">

 

html 안에 link를 넣는 방식으로 관련 소스는 @import url과 마찬가지로 구글 폰트에서 가져옵니다.

 

 

3. webfont loader

 

<script src="//ajax.googleapis.com/ajax/libs/webfont/1.4.7/webfont.js"></script>
<script>
WebFont.load({
google: {
families: ['Lato', 'Noto Sans', 'Noto Sans KR']
}
});
</script>

 

구글 웹폰트를 좀 더 빠르게 로드해야 한다면 위 소스를 추천합니다.

로드할 글꼴을 지정하기만 하면 되서 훨씬 간편하죠.

 

* webfont loader : https://github.com/typekit/webfontloader

 

 

4. 폰트파일이 있을 때

 

@font-face {
    font-family: 's-core-dream-thin';
    src: url('scdream1-webfont.woff2') format('woff2'),
        url('scdream1-webfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
}

 

가지고 있는 폰트 파일이 있다면 css파일에 직접 해당 소스를 넣는 방법도 있습니다.

format 파일은 local (사용자 환경) > eot > woff2/woff > ttf > svg 순서대로 기술하는 것이 좋습니다.

 

 

* 참고사이트 :

https://www.daleseo.com/css-web-fonts/

https://nolboo.kim/blog/2013/10/22/google-web-font-faster-tip/

https://kimdabin.tistory.com/entry/Font-format%EA%B3%BC-font-face-%EC%84%A0%EC%96%B8-%EB%B0%8F-%EC%A0%81%EC%9A%A9%EB%B2%95

반응형