Plug-ins

여기서는 웹사이트 구축에 꼭 필요한 오픈소스 플러그인들 몇가지 간략히 소개합니다

Web 표준html로 웹사이트 틀을 만들고, css로 꾸며주고, Javascript로 동작시키는데.. 이것들은 각각 분리하여 작성되어야 나중에라도, 누구라도,, 알아보기 쉽고 유지 관리에도 도움이 된다!

특정 플러그인을 사용하려면; 해당 플러그인에서 요구하는 방식대로 CDN으로 링크해주거나, 또는 소스 파일을 다운받아 가칭 /plugins 폴더에 넣어주고 스크립트로 연결해주면; 이제 이 플러그인의 모든 기능을 html 문서에서 불러올 수 있다!

Anchor-JS

플러그인은 기존 페이지 컨텐츠에 깊은 앵커 링크를 추가한다!

깊은 앵커링크
Anchor-JS 플러그인을 사용하기 위해서는; 먼저, CDN 링크 및 초기화 작업이 필요한데, Anchor-JS 플러그인은 딥 링크하려는 요소를 타겟팅하기 위해 Css 선택자를 사용하는 복수의 메서드 또한 제공한다:
[ AnchorJS CDN 링크 및 초기화 ]
                                        
                                            <script src="https://cdn.jsdelivr.net/npm/anchor-js/anchor.min.js"></script>

                                            <script>
                                                /* 1. 달리 타겟팅을 설정하지 않는 기본 초기화 설정 */
                                                anchors.add(); // 'h2, h3, h4, h5, h6'의 기본 선택자로 대체된다

                                                /* 2. 혹은, 딥 링크하려는 요소를 타겟팅하기 위해 아래와 같은 방식으로 사용할 수도 있다 */
                                                anchors.add('h1'); // 페이지의 모든 h1 요소에 앵커 추가
                                                anchors.add('.anchored'); // .anchored 클래스가 할당된 요소에 앵커 추가
                                            </script>
                                        
                                    

기본 앵커 문자(§)는 언제든 아래와 같은 옵션을 추가하여 다른 유니코드 문자로 변경해줄 수 있다:

[ Anchor-JS 옵션 변경 ]
                                        
                                            
                                        
                                    
                                        
                                            var anchors= new AnchorJS() // 앵커의 인스턴스 생성
                                            anchors.options= {
                                                icon: '⇅', // AnchorJS 기본 앵커 문자 변경
                                            }
                                            anchors.add('[data-anchor]') // data-anchor 속성이 주어진 요소에 앵커를 추가한다
                                        
                                    
딥 앵커 옵션 설정
1. Deep Anchor는 각각의 옵션을 통해 앵커 표시 위치를 변경해주거나, 언제 앵커를 보일 것인지 등을 설정해줄 수 있다. 또는, anchors.options= { .. }로 한번에 설정해줄 수도 있다:
[ Anchor-JS 옵션 설정 ]
                                        
                                            anchors.options.placement= 'left' // 앵커를 앞쪽에 배치한다 ← 기본값: right
                                            anchors.options.visible= 'always' // 앵커를 항상 보인다 ← 기본값: hover 시
                                        
                                    
                                        
                                            var anchors= new AnchorJS()
                                            anchors.options= { /* 모든 옵션들을 한번에 지정한다 */
                                                icon: '⇅',
                                                titleText: '위로 이동..', /* 옵션을 추가할 때는 ,로 구분해주어야 한다! */
                                            };
                                            anchors.add('article > dl') // article 바로 아래 모든 dl 요소

                                            anchors.options= { // 앵커 추가
                                                visible: 'always', icon: '#'
                                            };
                                            anchors.add('article > dl > dt') // article 바로 아래 모든 dl의 바로 밑 단계 dt 요소
                                        
                                    

위 코드는 이 웹문서에 적용한 딥 앵커 설정입니다. 확인해보세요..

2. 고정 내비게이션바가 있는 페이지에서는 연결하려는 제목을 가릴 수 있는데, 이를 방지하기 위해 Css의 :: 선택자를 써서 약간의 사용자 지정 스타일을 지정하여 대상 제목에 여백을 추가해줄 수 있다:
                                    
                                        /* 1. 의사 요소를 만들어 고정 내비게이션 바의 높이로 만들어줌으로써 링크 위의 위치로 점프하도록해준다 */
                                        :target::before {
                                            content: "";
                                            display: block; height: 80px; width: 1px;
                                            margin-top: -80px;
                                        }

                                        /* 2. 또는, 아래처럼 새로운 scroll-margin-top 속성을 사용할 수도 있다
                                        - 단, 브라우저에 따라서는, 이 방식을 지원하지 않을 수도 있다! */
                                        :target { scroll-margin-top: 80px; }
                                    
                                
3. 블로그의 최근 게시물 페이지, 또는 지정된 태그가 있는 모든 게시물의 페이지와 같이 컨텐츠가 변경된 페이지가 있는 것이 일반적이고.. 그러한 페이지에 앵커를 추가하면 컨텐츠가 해당 페이지를 떠날 때 링크가 끊어질수 있으므로 문제가 될 수 있다. 이를 방지하려면; 해당 앵커가 항상 게시물의 영구 링크 URL을 가리키도록 하는 base 옵션을 사용할 수 있다:
                                    
                                        // Note: you can often get the permalink url from your site's backend
                                        anchors.options.base= "/2019/1/03/my-post";
                                        anchors.add();

                                        // Anchor url before: "#conclusion"
                                        // Anchor url after: "/2019/1/03/my-post#conclusion"
                                    
                                
4. AnchorJS에는 (점프 탐색 등)탐색을 동적으로 생성하는 메서드가 포함되어 있지 않다. 그럼에도, AnchorJS는 모든 앵커 요소목록(anchors.elements)을 노출하며, 이러한 방식으로 외부 코드는 요소를 조회하고 이를 사용하여 탐색을 생성할 수 있게 된다. 또한, 미리 정의된 ID를 가진 정적 내비게이션과 함께 AnchorJS를 사용할 수도 있다. 어떤 경우에는, heading 요소 대신 기존의 섹션 ID에 연결할 수도 있는데, AnchorJS에 data-anchor-id= 속성을 사용하여 이 작업을 수행하도록 지시할 수 있다:
                                    
                                        
                                    
                                
                                    
                                        <script>
                                            anchors.add('h3');
                                        </script>
                                    
                                
5. 한 페이지에 각각 고유한 디자인이 있는 여러 앵커 세트를 가질 수도 있는데, 단지 AnchorJS 객체의 고유한 인스턴스를 만들기만 하면 된다. 또는, 원하는 옵션으로 인스턴스를 사전 설정할 수도 있다:
                                    
                                        var sidebarAnchors= new AnchorJS();
                                        anchors.add('.main h2'); // The default instance.
                                        sidebarAnchors.add('.sidebar h2'); // The new instance.
                                    
                                
                                    
                                        var sidebarAnchors= new AnchorJS({
                                            placement: 'left', icon: '¶'
                                        });
                                        sidebarAnchors.add('.sidebar h2');
                                    
                                

Smooth Scroll

플러그인은 문서 내부에서 점프하는 앵커에 부드러운 애니메이션 효과를 준다!

부드러운 스크롤
스무드 스크롤 플러그인을 사용하기 위해서는; 먼저, CDN 링크 및 초기화 스크립트를 넣어주어야 한다:
[ Smooth Scroll CDN 링크 및 초기화 ]
                                        
                                            <!-- Smooth Scroll CDN 링크 -->
                                            <script src="https://cdn.jsdelivr.net/gh/cferdinandi/smooth-scroll@15/dist/smooth-scroll.polyfills.min.js"></script>
        
                                            <script> // Smooth Scroll 초기화
                                                var scroll= new SmoothScroll('a[href*="#"]', {
                                                    /* 추가 옵션 설정 */
                                                    speed: 300ms, // 스크롤 속도(= 1000px 이동에 걸리는 시간) ← 기본값: 300ms
                                                    easing: 'linear' // Eeasing 애니메이션 종류 ← 기본값: linear
                                                });
                                            </script>
                                        
                                    

위 CDN 링크 및 초기화 스크립트는 </body> 직전에 넣어주시고, 옵션 설정에 관한 상세 설명이 필요하시면; 공식 문서를 참조하십시오 ㅡㅡ;


사용법은 아주 간단한데, 그저 일반 앵커 링크에 data-scroll 속성을 추가해주는 것만으로 충분하다:

                                    
                                        
                                    
                                

Smooth 스크롤 예

AOS Animation

을 쓰면; 웹문서의 어느 곳에서든 스크롤 애니메이션을 적용할 수 있다!

AOS 시작하기
AOS Animation을 사용하기 위해서는; 먼저, Css 및 스크립트 CDN 링크와 초기화가 필요하다. 이어서, data-aos= "애니메이션 종류"로 원하는 애니메이션을 지정하고, data-aos-delay= "대기시간"(시작 전 대기 시간), data-aos-duration= "지속시간"(시작 이후 지속 시간: 0 ~ 3000 밀리초, 단계는 50) 등.. 여타 속성들을 추가해줄 수 있다:
[ A-os CDN 링크, 스크립트 소스 및 초기화 ]
                                        
                                            <!-- Aos Css CDN 링크 -->
                                            <link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">

                                            <!-- Aos 스크립트 링크 및 초기화 -->
                                            <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
                                            <script>
                                                AOS.init(); // Aos 초기화
                                            </script>
                                        
                                    

                                    
                                        
                                    
                                

data-aos-easing= "Easing 종류" // 기본값: ease

                                    
                                        
                                    
                                

data-aos-offset= "오프셋 거리" // 원래 트리거 지점으로부터의 거리(단위: px)

                                    
                                        
                                    
                                

data-aos= "flip-left/right"

                                    
                                        
                                    
                                

data-aos= "flip-up/down"

                                    
                                        
                                    
                                

data-aos= "zoom-in/out"

                                    
                                        
                                    
                                

data-aos= "slide-left/right"

                                    
                                        
                                    
                                

data-aos= "slide-up/down"

                                    
                                        
                                    
                                

Parallax 스크롤

플러그인은 배경 이미지, 비디오 및 인라인 요소에 대해 부드러운 시차 스크롤링 효과를 준다!

부드러운 시차 스크롤링
패럴랙스 스크롤을 사용하기 위해서는 먼저 CDN 링크 및 초기화를 필요로 한다:
[ Parallax Css 및 스크립트 CDN 링크 ]
                                        
                                            <head>
                                                <!-- Parallax Css 링크 -->
                                                <link href="https://cdn.jsdelivr.net/npm/jarallax@2.2.1/dist/jarallax.min.css" rel="stylesheet">
                                            </head>

                                            <body>
                                                ..

                                                <!-- Parallax 스크립트 및 초기화 -->
                                                <script src="vendors/rellax/rellax.min.js"></script>
                                                <script>
                                                    var rellaxInit= function rellaxInit() { // 패럴랙스 초기화
                                                        return window.Rellax && new window.Rellax('[data-parallax]', {})
                                                    }
                                                </script>
                                            </body>
                                        
                                    

스트립트 초기화는 스크립트 정의를 통한 방식과 html에서 data- 속성을 이용하는 방식이 있다:

[ 스트립트 초기화 ]
                                        
                                            /* 1. 스크립트 정의를 통한 초기화 */
                                            jarallax(document.querySelectorAll('.jarallax'), {
                                                speed: 0.2,
                                            }
                                        
                                    
                                        
                                            
                                        
                                    
[ html 코드 작성 예: Background Image Parallax ]
                                        
                                            
                                        
                                    
스크롤링 옵션 설정
1. data-rellax-speed(양수 및 음수 가능) 속성을 사용하여 .rellax 요소의 속도를 기본값(-2)이 아닌 다른 값으로 설정해줄 수 있다:
                                    
                                        
                                    
                                
2. 시차 요소를 중앙에 배치하는 센터링을 구현하는데는 전역 옵션이나 특정 요소에서 설정해줄 수 있다:
                                    
                                        
                                    
                                
3. 수평 패럴렉스는 기본적으로 비활성화되어 있지만, horizontal: true 값을 전달하여 활성화할 수 있다 이 기능은 파노라마 스타일의 웹사이트에서 사용하기 적당한데, 수직 스크롤링과 동시에 작동하므로 이를 원하지 않는다면; vertical: false 값도 함께 전달해주면 된다!
                                    
                                        var rellax= new Rellax('.rellax', {
                                            horizontal: true; vertical: false
                                        });
                                    
                                
4. 기본적으로 패럴랙스 요소의 위치는 <body>의 스크롤 지점을 통해 결정되는데, 래퍼에 설정 블록의 속성을 전달하여 Rellax가 대신 해당 요소를 감시하도록 할 수 있다:
                                    
                                        //Set wrapper to .custom-element instead of the body
                                        var rellax= new Rellax('.rellax', {
                                            wrapper: '.custom-element'
                                        });
                                    
                                
패럴랙스 백그라운드
패럴랙스 백그라운드는 부모(또는, 형제) 요소에서 data-parallax 속성과 .bg-holder 클래스를 사용하는데, html 5 비디오나 유튜브 비디오 배경 또한 같은 방식으로 사용할 수 있다:

패럴랙스 백그라운드 이미지

                                                    
                                                        
                                                    
                                                
                                                    
                                                        .bg-holder {
                                                            position: absolute; top: 0; left: 0; width: 100%; min-height: 100%;
                                                            background-size: cover; background-position: center; background-repeat: no-repeat;
                                                            overflow: hidden;
                                                            z-index: 0;
                                                        } .bg-holder .bg-video {
                                                            display: block;
                                                            position: absolute; top: 0; left: 0; height: 100%; min-width: 100%;
                                                            object-fit: cover;
                                                            z-index: -1;
                                                        } .bg-holder .bg-youtube {
                                                            position: absolute !important;
                                                            top: 0; left: 0; height: 100%; width: 100%;
                                                        }
                                                    
                                                

Parallax Video Background

                                                    
                                                        
                                                    
                                                

Plyr 플레이어

등을 재생해주는 인라인 미디어 플레이어이다!

Plyr 플레이어
Plyr 플레이어를 사용하기 위해서는, 먼저 Css 및 스크립트 소스를 필요로 한다:
[ Plyr Player 소스 및 스크립트 ]
                                        
                                            <!-- Css 링크 -->
                                            <link href="vendors/plyr/plyr.css" rel="stylesheet">
            
                                            <!-- 스크립트 -->
                                            <script src="vendors/plyr/plyr.polyfilled.min.js"></script>
                                        
                                    
Youtube Player
Vimeo Player
                                    
                                        
                                    
                                

Big Picture 갤러리

는 이미지, iframe, 인라인 컨텐츠 및 비디오를 YouTube, Vimeo 및 자체 호스팅 비디오로 선택적으로 자동 재생해준다!

Big Picture
빅 픽쳐 플러그인을 사용하기 위해서는; 먼저 Big Picture 플러그인을 위한 스크립트 소스 및 초기화를 필요로 한다:
[ BicPicture 소스 ]
                                        
                                            <script src="vendors/bigpicture/BigPicture.js"></script>
                                        
                                    
1. Big Picture 플러그인은 썸네일을 표시할 수 있으며 클릭하면 원본 이미지가 팝업되는데, 라이트 박스 이미지는 무엇이든 래핑하여 작동된다. <img> 요소는 data-bigpicture= 속성을 지닌 <a> 요소 내부에 위치한다:
                                    
                                        
                                    
                                
2. data-bigpicture=data-bp= 속성을 쓰면 쉽게 라이트박스 이미지 갤러리를 만들 수 있다. 부모요소에서 갤러리 id 를 설정하고, data-bigpicture= 속성을 써서 id 를, data-bp= 속성을 사용하여 이미지 원본을 전달한다:
                                                    
                                                        
                                                    
                                                
3. YouTube 및 Vimeo 동영상은 data-bigpicture= 속성을 통해 동영상 id 를 제공하기만 하면 Big Picture 플러그인과 함께 사용할 수 있다:
                                    
                                        
                                    
                                

그외, 순수 자바스크립트 라이트 박스인 또한 이미지, iframe, 인라인 컨텐츠 및 비디오를 YouTube, Vimeo 및 자체 호스팅 비디오에 대한 선택적 자동 재생으로 표시해주는, 많이 사용되는 유용한 라이브러리입니다!

Swiper 캐러셀

은 하드웨어 가속 전환과 놀라운 기본 동작을 갖춘 가장 현대적인 모바일 터치 슬라이더로서, 모바일 웹 사이트, 모바일 웹 앱 등에서 유용하게 쓸 수 있는데, 일반 PC 환경에서도 또한 잘 작동된다!

스위퍼 캐러셀
스위퍼 캐러셀 플러그인을 사용하기 위해서는; 먼저, 다음과 같이 Swiper 관련 Css 링크 및 Script 소스를 필요로 한다:
                                    
                                        <!-- Swiper Css 링크 -->
                                        <link href="vendors/swiper/swiper-bundle.min.css" rel="stylesheet">
        
                                        <!-- Swiper 스크립트 -->
                                        <script src="vendors/swiper/swiper-bundle.min.js"></script>
                                        
                                    
                                
                                    
                                        
                                    
                                

썸네일 Swiper는 html 코드에서 thumb 옵션을 사용하여 간단히 수행할 수 있다:

                                                    
                                                        
                                                    
                                                

썸네일은 기본적으로 .swiper-container 요소 뒤에 배치되는데, thumb 옵션에 thumbOptions: '#parentID' 값을 제공하여 특정 부모요소에 썸네일을 배치할 수도 있다!

Masonry Filter

는 필터링과 정렬을 위한 그리드 기반 레이아웃 라이브러리로서, 사용 가능한 수직 공간의 최적 위치에 요소를 배치해주는데, 이는 포트폴리오 페이지 및 이미지 갤러리 등에서 놀랍도록 잘 작동된다!

메이슨리 필터링
웹 문서에서 Masonry Filter를 사용하기 위해서는, 먼저 Isotope 스크립트 코드를 불러와야 한다. 이어서 data-isotope= 속성을 추가하여 컴포넌트를 초기화하고, layoutMode=, itemSelector= 등의 속성으로 다양한 설정을 해줄 수 있다. 한편, data-filter= 속성으로 모든 요소들을 필터링할 수 있다:
[ Masonry Filter 스크립트 소스 ]
                                        
                                            <script src="vendors/isotope-layout/isotope.pkgd.min.js"></script>
                                            <script src="vendors/isotope-packery/packery-mode.pkgd.min.js"></script>
                                        
                                    
                                                    
                                                        
                                                    
                                                

Isotope 필터링 예


부트스트랩에서 Masonry 필터를 사용하려면; 먼저, 아래 CDN 링크를 넣어주고, 그리드시스템 및 카드의 .row 래퍼에서 data-masonry= '{"percentPosition":true}' 속성을 더해주면 부트스트랩의 반응형 그리드시스템 및 카드 컴포넌트와 메이슨리의 포지셔닝이 결합된다:

[ 부트스트랩과 메이슨리의 결합을 위한 CDN 링크 ]
                                        
                                            <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
                                            <script src="https://cdn.jsdelivr.net/npm/masonry-layout@4.2.2/dist/masonry.pkgd.min.js" integrity="sha384-GNFwBvfVxBkLMJpYMOABq3c+d3KnQxudP/mGPkzpZSTYykLBNsZEnG2D9G/X/+7D" crossorigin="anonymous" async></script>
                                        
                                    
사용법 고급
1. Isotope는 유사한 자식 아이템들을 지닌 컨테이너 요소에서 작동하며, 각 항목들의 크기 조정은 Css로 설정한다:
                                    
                                        
                                    
                                
                                    
                                        .grid-item { width: 25%; }
                                        .grid-item--width2 { width: 50%; }
                                    
                                
2. Isotope(); 생성자는 컨테이너 요소Options 두 인수를 받는다:
                                    
                                        // The Isotope() constructor accepts two arguments: the container element and an options object.
                                        var elem = document.querySelector('.grid');
                                        var iso = new Isotope(elem, { // 컨테이너 요소 elem
                                            // options
                                            itemSelector: '.grid-item',
                                            layoutMode: 'fitRows'
                                        });

                                        // 혹은, element argument can be a selector string for an individual element
                                        var iso = new Isotope( '.grid', {
                                            // options
                                        });
                                    
                                
3. 자바스크립트 없이 html만으로 Isotope를 초기화 할 수도 있다 - 컨테이너 요소에 data-isotope= 속성을 추가하고, 옵션은 해당 값에서 설정해줄 수 있다:
                                    
                                        <div class="grid" data-isotope='{"itemSelector": ".grid-item", "layoutMode": "fitRows" }'></div>
                                    
                                

Html에 설정된 옵션은 유효한 JSON이어야 한다 - 예컨대, 키는 "itemSelector"와 같이 큰따옴표로 묶어야한다 Html 속성인 data-isotope=는 작은 따옴표를 쓰지만 JSON은 큰 따옴표를 사용한다!

➥ Css 3) Masonry 그리드 레이아웃

Css 은 한 축은 일반적인 엄격한 Grid 레이아웃(대부분 열)을 사용하고, 다른 축은 Masonry 레이아웃을 사용하는데, Masonry 축에서는 짧은 항목 뒤에 틈이 남는 엄격한 그리드를 고수하는 대신 다음 행의 항목이 위로 올라가 틈을 완전히 채우게 된다!

[ Masonry 그리드 레이아웃 설정 ]
                                        
                                            .Masonry-grid { /* 일반적인 Masonry 레이아웃 */
                                                display: grid;
                                                grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); /* 그리드 축 */
                                                grid-template-rows: masonry; /* 메이슨리 축 */
                                                gap: 10px;
                                            }
                                        
                                    

일반적인 Masonry 레이아웃에서.. 이 컨테이너의 자식요소들은 일반 그리드 레이아웃 자동배치와 마찬가지로 행을 따라 항목별로 배치되지만, 새 행으로 이동하면 항목이 Masonry 알고리즘에 따라 표시된다. 곧, 항목은 가장 많은 공간이 있는 열에 로드되어 엄격한 행 트랙 없이 빽빽하게 채워진 레이아웃을 만들게 되는 것이다!

프로그레스 바

플러그인을 사용하면 반응형의 스타일리시한 웹용 진행률 표시기를 쉽게 만들 수 있는데, 애니메이션은 모바일 장치에서도 잘 작동된다!

프로그레스 바
Progress Bar에서는 Line, CircleSemiCircle 등 몇 가지 모양을 기본 제공하는데, 먼저, 스크립트 소스를 불러들여야 한다:
[ Progress Bar 스크립트 소스 ]
                                        
                                            <script src="vendors/progressbar/progressbar.min.js"></script>
                                        
                                    
                                    
                                        
                                    
                                

그외에도, 강력한 대화형 차트 작성 및 시각화 라이브러리인 , 의존성 없는 순수 자바스크립트 별표 평가 위젯인 등도 있습니다. 필요해지면; 찾아가보세요..

Loaders.css

플러그인은 웹페이지 로딩 시, 움직이는 짧고 작은 애니메이션을 보여주는 순수 Css 로딩 애니메이션이다!

프리로더 애니메이션
먼저, loaders.css 소스 링크를 필요로 하며, 이어서 <body> 바로 다음에 컨테이너 요소를 만들어 애니메이션 종류를 지정해준다. 다음, 컨테이너 요소 안에 필요한만큼 적절한 수의 빈 <div> 블록을 만들어주면 된다:
[ loaders.css 사용하기 ]
                                        
                                            
                                        
                                    

빈 <div>는 필요한 만큼 적절한 개수로 넣어주면 된다 그 개수에 따라 모양 및 움직임이 미세하게 달라진다!

[ 사용자정의 옵션 설정하기 ]
                                        
                                            /* 로더 크기 변경하기: 트랜스폼 Scale 추가 */
                                            .loader-inner {
                                                transform: scale(0.5, 0.5);
                                            }

                                            /* 텍스트색 및 배경색 변경하기: 자식 div 요소에 스타일 추가 */
                                            .ball-pulse > div {
                                                color: #fff; background: #516643;
                                            }
                                        
                                    

loader.css


<body> 태그 바로 뒤에 프리로더 컴포넌트를 추가하여 프리로더를 활성화하는데, 애니메이션이나 카운트다운 등 다른 모든 구성요소는 프리로더가 멈춘 이후 작동을 시작하게 된다: 이 사용자정의 프리로더 는 페이지가 로딩될 때 작은 애니메이션 움직임을 보여준다..

쿠키 공지창

플러그인은 방문한 사용자에게 쿠키가 사용됨을 알려주는 가벼운 쿠키 동의 메시지이다!

쿠키 공지: Osano Cookie
Osano Cookie 플러그인은 Toast 팝업으로 알림 내용을 표시하는데, .notice 요소에 data-options 옵션을 전달하여 그 동작을 제어할 수 있고, 다음과 같은 옵션들을 추가해줄 수 있다:
  • autoShow:false // 페이지 로딩시 자동으로 알림을 표시할 것인가 여부? 기본값: true
  • autoShowDelay:0 // 알림 표시 전 대기 시간(밀리초)
  • ShowOnce:false // 알림을 처음 한번만 보여줄 것인가? 기본값: true
  • cookieExpireTime:7200000 // 쿠키 만료시간(밀리초) 사용자가 [닫기]나 [확인] 버튼을 누른 이후부터 카운트가 시작된다!
                                    
                                        
                                    
                                

이 페이지의 좌하단에 나타나는 쿠키 알림창입니다..

수학수식 입력기

은 수학 표기를 기술하고 그 구조와 내용을 담고 있는 XML 마크업 언어인데, 이를 써서 직접 수식을 작성하는 것은 만만치 않으므로, html 문서에 수학 관련 수식들을 넣으려면; 수식 입력기 라이브러리를 쓰는 것이 보다 쉽다!

수식 입력하기: Equation 에디터
Equation 에디터를 사용하려면; 먼저 관련 Css 및 스크립트를 CDN으로 링크하고 스크립트를 초기화해준 뒤, 에디터용 컨테이너를 만들어주어야 한다
[ Equation Editor 사용법 ]
                                        
                                            <!-- Css 및 스크립트 CDN 링크 -->
                                            <link rel="stylesheet" href="https://editor.codecogs.com/eqneditor.css"/>

                                            <script src="https://editor.codecogs.com/eqneditor.api.min.js"></script>
                                        
                                    
                                        
                                            /* 스크립트 초기화 코드 */
                                            window.onload= function() {
                                                text_area= EqEditor.TextArea.link('latexInput')
                                                .addOutput(new EqEditor.Output('output'))
                                                .addHistoryMenu(new EqEditor.History('history'));

                                                EqEditor.Toolbar.link('toolbar').addTextArea(text_area);
                                            }
                                        
                                    
                                    
                                        
                                    
                                
1. 위 컨테이너에서 작성된 수식 기호는 웹문서에 직접 이미지로 복사해 넣으면 되지만, html에 삽입하기 위한 latex 플러그인도 함께 설치해주는 것이 보다 유익하다:
                                    
                                        <!-- 작성된 기호를 html에 삽입하기 위한 latex 플러그인 -->
                                        <script src="http://latex.codecogs.com/latexit.js"></script>
                                    
                                
2. 이제, 수식을 삽입할 html 문서에서.. 아래와 같이 <div> 및 <span> 등의 html 요소를 작성해주고, 위 컨테이너에서 작성된 수식 코드를 이 안에 복사해주면 된다:
                                    
                                        <div lang="latex">2^{3}</div>
                                    
                                

Equation 에디터 예

Quill Editor

는 최신 웹용으로 제작된 무료 오픈 소스 WYSIWYG 텍스트 편집기로서, 모듈식 아키텍처와 표현력 있는 API를 통해 모든 요구 사항에 맞게 완벽하게 사용자 지정할 수 있다!

위지위그 에디터 Quill
Quill.js를 사용하려면; 먼저 Quill Css 및 스크립트를 CDN으로 링크하고 스크립트를 초기화한다. 다음, 에디터용 컨테이너만 만들어주면 된다:
[ Quill Editor 사용하기 ]
                                        
                                            <link href="https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.snow.css" rel="stylesheet" />

                                            ..
                                            <script src="https://cdn.jsdelivr.net/npm/quill@2.0.3/dist/quill.js"></script>
                                            <script>
                                                const quille= new Quill('#editor', {
                                                    theme: 'snow' // 'snow' 테마로 초기화 ← 부동 도구모음 테마인 'bubble'도 있음
                                                });
                                            </script>
                                        
                                    
마음껏 적어보세요..
                                    
                                        <div id="editor">
                                            마음껏 적어보세요..
                                        </div>
                                    
                                

끝입니다, 간단하지요?


실제로는, Quill 에디터는 이보다 훨씬 더 풍부하고 방대하니.. 관련 상세 내용들은 Quill-js 공식사이트로 가서 살펴보시길 권합니다..

Full Calendar

는 모듈식으로 구성된, 풀사이즈의 드래그 & 드롭 순수 자바스크립트 이벤트 달력이다!

풀 카렌다
Full Calendar 플러그인을 사용하기 위해서는; 먼저, 스크립트 소스 및 초기화가 필요하고, 다음에는 그저 간단한 코드 한 줄이면 달력을 삽입할 수 있다: <div id= "calendar"></div> 더 필요하면; 풀카렌다 매뉴얼을 참조하여 폼나게 꾸며보십시오..
[ 풀 카렌다 사용하기 ]
                                        
                                            <body>
                                                <div id="calendar" class="mb-5"></div>

                                                <script src='https://cdn.jsdelivr.net/npm/fullcalendar@6.1.15/index.global.min.js'></script>
                                                <script>
                                                    document.addEventListener('DOMContentLoaded', function() {
                                                        var calendarEl= document.getElementById('calendar')
                                                        var calendar= new FullCalendar.Calendar(calendarEl, {
                                                            initialView: 'dayGridMonth'
                                                        });
                                                        calendar.render()
                                                    });
                                                </script>
                                            </body>
                                        
                                    

Flatpickr

는 가볍고 강력한 순수 자바스크립트 날짜/시간 피커이다!

Flatpickr 날짜/시간 피커
Flatpickr를 사용하기 위해서는; 먼저, Css 링크 및 스크립트 소스를 불러와야 한다. 이어서, 스크립트 초기화 작업 또한 필요하다:
[ Flatpickr CDN 링크 및 스크립트 소스 ]
                                        
                                            <link href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css" rel="stylesheet">

                                            <script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>
                                        
                                    
                                    
                                        
                                    
                                
                                    
                                        /* 기본 플랫피커 초기화 */
                                        const fp= flatpickr("#FlatpickrInput", {}); // flatpickr
                                    
                                
                                    
                                        
                                    
                                
                                    
                                        /* 시간 피커 옵션 설정 */
                                        const fp1= flatpickr("#FlatpickrInput1", {
                                            enableTime: true, noCalendar: true, dateFormat: "H:i"
                                        });
                                    
                                
                                    
                                        
                                    
                                
                                    
                                        /* 날짜 & 시간 피커 옵션 설정 */
                                        const fp2= document.querySelector(".myFlatpickrs");
                                        const fp3= flatpickr(fp2, {
                                            enableTime: true, dateFormat: "Y-m-d H:i"
                                        });
                                    
                                

여기서는 간단한 기본 예만 들었지만.. 그밖에 다양한 고급 사용법들은 공식 사이트로 가서 살펴보십시오.. 다만, 플러그인들을 제대로 사용하려면; 자바스크립트의 기본은 좀 알아야합니다 ㅡㅡ;

List-JS 테이블

는 작고 보이지 않으며 단순하지만 일반 HTML 목록, 표 또는 기타 항목에 검색, 정렬, 필터 및 유연성을 추가하는 강력하고 빠른 순수 자바스크립트 라이브러리이다!

List.js 테이블
List.js를 사용하기 위해서는; 먼저, 스크립트 소스를 불러온 뒤, 매우 간단한 템플릿으로 리스트 목록을 만들어줄 수 있다:
[ List.js 스크립트 소스 ]
                                        
                                            <script src="vendors/listjs.js"></script>
                                        
                                    
                                        
                                            
                                        
                                    
                                        
                                            
                                        
                                    
    • Kim

      경주

                                        
                                            
                                        
                                    
                                        
                                            var options2= {
                                                valueNames: ['name', 'city']
                                            };
                                            var hackerList2= new List('hacker-list2', options2);
    
                                            hackerList2.add({ name:'Lee', city:'울산' });
                                        
                                    

    여기서는 간단한 기본 예만 들었지만.. 그밖에 검색, 정렬, 필터 등의 다양한 고급 사용법들은 공식 사이트로 가서 살펴보십시오..

    DropZone Uploader

    는 웹사이트에서 드롭된 파일을 쉽게 처리할 수 있도록 해주는 라이브러리이다!

    드롭죤 업로더
    드롭죤 업로더 플러그인을 사용하려면; 먼저 Dropzone Css 및 스크립트를 CDN으로 링크하고 스크립트를 초기화하고, 이어서 사용할 form 요소를 만들어주면; Dropzone은 .dropzone 클래스가 있는 모든 양식요소를 찾아 자동으로 첨부하고 드롭한 파일을 지정된 속성에 업로드한다:
    [ Dropzone Css 및 스크립트 CDN 링크 ]
                                            
                                                <link href="https://unpkg.com/dropzone@6.0.0-beta.1/dist/dropzone.css" rel="stylesheet" type="text/css" />
    
                                                <script src="https://unpkg.com/dropzone@6.0.0-beta.1/dist/dropzone-min.js"></script>
                                            
                                        
                                        
                                            
                                        
                                    

    다음과 같이, Dropzone에 옵션을 추가해줄 수도 있다:

                                        
                                            <form action="/target" class="dropzone" id="my-dropzone"></form>
    
                                            <script>
                                                Dropzone.options.myDropzone= { // id명은 camelCase 방식으로 작성해주어야 한다!
                                                    // 설정하려는 옵션들..
                                                }
                                            </script>
                                        
                                    

    스크립트에서 id명(id= "my-dropzone")은 (-이 있다면; 제거하고)camelCase 방식으로 변경해주어야 한다!

    Sticky-JS

    는 순수 자바스크립트로 작성된 반응형 Sticky 요소 라이브러리로서, 이를 이용하면 웹사이트에서 (추가적인 Css 없이도)Sticky 요소를 쉽게 고정시킬 수 있다!

    스티키 고정 사이드바
    Sticky-JS 플러그인을 사용하려면; 먼저, 스크립트 소스를 불러온 뒤 초기화하면서 스티키 요소를 지정해주어야 한다. 다음, Sticky 요소.sticky 클래스를 추가하여 컴포넌트를 초기화하고, 가장 가까운 부모요소(보통, <body>)에서 data-sticky-container 속성을 준다:
    [ Sticky-JS 사용하기 ]
                                            
                                                <script src="vendors/sticky-js/sticky.min.js"></script>
    
                                                <!-- 스티키 요소 초기화 -->
                                                <script>
                                                    var sticky= new Sticky('.sticky') // 스티키 요소: .sticky
                                                </script>
                                            
                                        
                                            
                                                
                                            
                                        

    특정 뷰포트 크기에서부터 스티키를 활성화하기 위해 data-sticky-for= '값' 속성으로 브레이크 포인트를 설정해줄 수 있다(곧, 스티키는 설정된 브레이크포인트 너비보다 작을 때 해제된다). 또한, 스크롤 시 페이지와 스티키 요소 사이에 마진을 주기위해 data-margin-top= '값' 속성을 추가해줄 수도 있다. 나아가, data-sticky-wrap= "true" 속성을 사용하면; 그것은 스티키 요소를 가진 <span> .. </span>으로 래핑되는 진정한 스티키 요소이다 - 이는 컨텐츠가 점핑하는 것을 방지한다!

    Sticky 고정 예

    Counter

    순수 Javascript 라이브러인 는 카운트 다운/업 애니메이션을 신속히 만들 수 있도록 해준다!

    카운트 Down
    1. 아래 Count Down 스크립트는 data-countdown= 속성을 가진 요소가 뷰포트에 보여진 이후, 현재로부터 남은 시간을 카운팅한다:

                                        
                                            
                                        
                                    
                                        
                                            
                                        
                                    
    2. Count Up 플러그인을 사용하기 위해서는 먼저, 스크립트 소스를 필요로 하며, data-countup= 속성을 가진 요소가 뷰포트에 보여진 이후 카운팅을 시작한다:
    [ CountUp.js 스크립트 소스 ]
                                            
                                                <script src="vendors/countup/countUp.umd.js"></script>                                    
                                            
                                        

    0

                                        
                                            
                                        
                                    
                                        
                                            var countupInit = function countupInit() {
                                                if (window.countUp) {
                                                    var countups = document.querySelectorAll('[data-countup]');
                                                    countups.forEach(function (node) {
                                                        var _utils$getData = utils.getData(node, 'countup'),
                                                            endValue = _utils$getData.endValue,
                                                            options = _objectWithoutProperties(_utils$getData, _excluded);
                                                
                                                        var playCountUpTriggerd = false;
                                                
                                                        var countUP = function countUP() {
                                                            if (utils.isElementIntoView(node) && !playCountUpTriggerd) {
                                                                var countUp = new window.countUp.CountUp(node, endValue, _objectSpread({
                                                                    duration: 3,
                                                                    useEasing: false
                                                                }, options));
                                                    
                                                                if (!countUp.error) {
                                                                    countUp.start();
                                                                } else {
                                                                    console.error(countUp.error);
                                                                }
                                                    
                                                                playCountUpTriggerd = true;
                                                            }
                                                        };
                                                
                                                        countUP();
                                                            window.addEventListener('scroll', function () {
                                                            return countUP();
                                                        });
                                                    });
                                                }
                                            };                                                          
                                        
                                    

    타이핑 텍스트

    타이핑 텍스트
    Typed.js를 사용하려면; 먼저, CDN 링크가 필요하고, 타이핑칠 내용은 <span data-typed-text= "['내용 1', '내용 2', ..]"></span> 식으로 넣어주면 된다:
                                        
                                            <!-- Typed.js 스크립트 CDN 링크 -->
                                            <script src="https://unpkg.com/typed.js@2.1.0/dist/typed.umd.js">
                                        
                                    
                                        
                                            
                                        
                                    
    1. 웹페이지 안에 직접 내용을 배치하는 방식과는 달리, 곧바로 스크립트에서 문자열 형태로 넣어줄 수도 있다:

    남산은 서라벌의 진산(鎭山)이다: 북의 금오봉(金鰲峰, 468m)과 남의 고위봉(高位峰, 494m)을 중심으로 동서 너비 4km, 남북 길이 10km의 타원형으로, 한 마리의 거북이 서라벌 깊숙이 들어와 엎드린 형상이다. 골은 깊고 능선은 변화무쌍하여 기암괴석이 만물상을 이루었으니 작으면서도 큰 산이다..

                                        
                                            
                                        
                                    
                                        
                                            <script>
                                                var typed= new Typed('#namsan_typing', {
                                                    stringsElement: '#typed-strings', typeSpeed: 150,
                                                });
                                            </script>
                                        
                                    
    2. 문자열의 배열 형태로 넣어줄 수도 있다:

                                        
                                            <span id="array_element"></span>
                                        
                                    
                                        
                                            var typed2= new Typed('#array_element', {
                                                strings: ['첫번째 문장입니다.. ^10000', '두번째 문장입니다..', '세번째 문장입니다..'], typeSpeed: 150,
                                            });
                                        
                                    

    위 코드에서 '첫번째 문장 ^10000'10000ms(= 10초)간 일시 중지한 뒤 다음으로 지나가도록 설정해준 것이다!


    data-typed로 컴포넌트를 초기화하고, data-options=".."로 문자열을 정의하여 기본 설정값을 사용하거나 재정의할 수도 있다:

                                        
                                            
                                        
                                    

    기본 설정된 초기값은 다음과 같다: "startDelay":1000, "typeSpeed":100, "backSpeed":50, "backDelay":1000, "loop":true


    Css 애니메이션은 Javascript에서 초기화할 때 빌드된다. 그러나 다음과 같이 사용자 정의해줄 수도 있다:

                                        
                                            /* Cursor */
                                            .typed-cursor { .. }
    
                                            /* If fade out option is set */
                                            .typed-fade-out { .. }
                                        
                                    

    Prism.js

    는 웹 문서에 html, Css, Script 코드를 삽입하기 위한 플러그인 라이브러리이다!

    프리즘
    Prism.js 라이브러리를 사용하기 위해서는 먼저, Css 링크 및 스크립트 소스를 필요로 하는데, 아래 기본 방식 외에도 다양한 사용법들이 있으니 필요해지면; 찾아가서 살펴보십시오..
    [ Prism Css 링크 및 스크립트 소스 ]
                                            
                                                <link href="vendors/prism.css" rel="stylesheet" />
                                                ..
                                                <script src="vendors/prism/prism.js"></script>
                                            
                                        

    이 html 코드를 담은 박스가 바로 프리즘 Css 및 Script 소스에다 약간의 사용자정의 Css를 추가하여 작성한 것입니다!

    Plugin Etc

    여타 플러그인 유틸리티들
    웹사이트를 꾸며주는 각종 플러그인 라이브러리들:
    서식 있는 텍스트 편집을 위한 가장 인기 있는 JavaScript 라이브러리
    이미지가 로드된 시점 감지
    마이크로 체크 플러그인. types, regexps, presence, time 등 확인
    모듈성, 성능 및 추가 기능을 제공하는 최신 JavaScript 라이브러리
    JavaScript를 위한 풍부하고 강력한 템플릿 언어
    워크플로우를 자동화하고 향상시키는 JavaScript 툴킷

    커스텀 유틸리티 모음

    ..

    ➥ 호버 효과

    사용자정의 클래스 .lifthoverfocus 시, 해당 요소를 들썩이는데, 이는 카드, 버튼 및 링크만 아니라 여타 html 요소들에서도 또한 사용할 수 있다:

    안뇽~

    * 이 호버 효과는 카드, 버튼만 아니라 <a>, <p>, <div> 등 다른 요소들에도 역시 적용할 수 있다!

                                        
                                            
                                        
                                    

    css 스타일 정의: 필요하다면; 적당히 수정하여 쓰시면 됩니다..

                                        
                                            .lift {
                                                transition: box-shadow 0.3s ease, transform 0.3s ease;
                                            } .lift:hover, .lift:focus {
                                                box-shadow: 0 0.8125rem 1rem rgba(35, 35, 35, 0.15);
                                                transform: translate3d(0, -3px, 0);
                                            }
                                        
                                    
    ➥ Css 3) 플로팅 오브젝트

    플로팅 오브젝트는 미묘하게 떠다니는 물체를 페이지에 추가하는데, 컨테이너와 개체 수를 정의하고 내부에 적절한 개수의 빈 <span> 태그만 추가하면 그 이후는 자동으로 작동한다 - 크기와 불투명도, 방향 및 스피드 등은 랜덤이다:

    [ 플로팅 오브젝트 ]
                                            
                                                
                                            
                                        
                                            
                                                .floating-objects {
                                                    position: absolute; top: 0; left: -20px; right: 0;
                                                    width: calc(100% + 20px); height: 100%;
                                                    overflow: hidden;
                                                } .floating-objects span {
                                                    position: absolute;
                                                    display: block; width: 20px; height: 20px;
                                                    background-color: #232323;
                                                }
                                            
                                        

    이 페이지의 맨 위 헤더에서 떠다니고 있는 넘들입니다.. 기본 형태는 사각형이지만 클래스나 사용자 정의 스타일을 써서 쉽게 변경할 수 있습니다!

    ➥ 이미지 쉬프트

    많은 경우, 이미지를 좌/우 사이드 방면으로 이동시켜야할 때가 있는데, 이미지의 부모 요소에서 .img-shifted shift-left/right 클래스를 추가해주면; 이미지가 컨테이너 바깥으로 나가게 된다:

                                        
                                            
                                        
                                    
                                        
                                            .bg-image { position: absolute; left: 0; bottom: 0; right: 0; top: 0; }
                                            
                                            .bg-cover {
                                                background-repeat: no-repeat; background-position: center center; background-size: cover;
                                                backface-visibility: hidden;
                                            }
                                            
                                            .bg-contain {
                                                background-repeat: no-repeat; background-position: center center; background-size: contain;
                                                backface-visibility: hidden;
                                            }
                                            
                                            .img-shifted { position: relative; overflow: hidden; }
                                            .img-shifted.shift-left { width: 100%; float: right; }
                                            .img-shifted.shift-right { width: 100%; }
                                        
                                    
    ➥ 컨텐츠 비틀기

    .content-skewed 사용자정의 Css를 사용하여 구성 요소 내에서 컨텐츠를 왜곡할 수 있다. 먼저 .content-skewed 클래스를 구성 요소에 추가한 뒤, .content-skewed-right/left를 사용한다. 그런 다음, .content-skewed 클래스를 쓴 부모요소의 자식요소에서 .content-skewed-item 클래스를 사용한다:

    컨텐츠 기울이기 유틸리티를 사용하여 구성 요소 내에서 컨텐츠를 왜곡할 수 있다. 먼저 .content-skewed 클래스를 구성 요소에 추가한 뒤, .content-skewed-right/left를 사용한다. 그런 다음 .content-skewed 클래스를 쓴 부모 요소의 자식 요소에서 .content-skewed-item 클래스를 사용한다:
                                                        
                                                            
                                                        
                                                    
                                                        
                                                            /* --- 컨턴츠 기울이기 --- */
                                                            .content-skewed {
                                                                perspective: 1500px;
                                                                transform-style: preserve-3d;
                                                            }
                    
                                                            .content-skewed-right {
                                                                perspective-origin: right center;
                                                            } .content-skewed-right .content-skewed-item {
                                                                transform: rotateY(30deg) rotateX(15deg);
                                                                backface-visibility: hidden;
                                                            }
                    
                                                            .content-skewed-left {
                                                                perspective-origin: left center;
                                                            } .content-skewed-left .content-skewed-item {
                                                                transform: rotateY(-30deg) rotateX(15deg);
                                                                backface-visibility: hidden;
                                                            }
                                                        
                                                    

    Css backface-visibility 속성은 3차원으로 움직이는 요소의 뒷면이 사용자를 향할 때 이를 보여줄 지 여부를 지정한다

    ➥ 그라디언트 오버레이

    Overlay는 배경이 되는 요소에 반투명 오버레이 색을 덧씌운다. 오버레이 색을 바꾸려면; .overlay overlay-색상 클래스를 더해주고, 위나 아래에서만 오버레이가 필요한 경우라면; overlay-색상-gradient-top/bottom-[0-100 in 10 steps] 클래스를 더해준다:

    overlay overlay-50

    천동탑

    overlay overlay-50 overlay-primary

    천동탑

    overlay overlay-90 overlay-primary-gradient-bottom-90

    천동탑

                                                        
                                                            
                                                        
                                                    
                                                        
                                                            /* 커스텀 이미지 오버레이 설정 */
                                                            .overlay::before {
                                                                content: "";
                                                                position: absolute; top: 0; right: 0; bottom: 0; left: 0;
                                                            }
                                                            
                                                            .overlay-0::before { opacity: 0 !important; }
                                                            .overlay-10::before { opacity: 0.1 !important; }
                                                            .overlay-20::before { opacity: 0.2 !important; }
                                                            .overlay-30::before { opacity: 0.3 !important; }
                                                            .overlay-40::before { opacity: 0.4 !important; }
                                                            .overlay-50::before { opacity: 0.5 !important; }
                                                            .overlay-60::before { opacity: 0.6 !important; }
                                                            .overlay-70::before { opacity: 0.7 !important; }
                                                            .overlay-80::before { opacity: 0.8 !important; }
                                                            .overlay-90::before { opacity: 0.9 !important; }
                                                            .overlay-100::before { opacity: 1 !important; }
                
                                                            /* Primary 색상 설정 */
                                                            .overlay-primary::before { background-color: #232323 !important; }
                
                                                            /* Primary 색상 그라디언트 */
                                                            .overlay-primary-gradient-top-0::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 0%) !important; }
                                                            .overlay-primary-gradient-bottom-0::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 0%) !important; }
                                                            .overlay-primary-gradient-top-10::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 10%) !important; }
                                                            .overlay-primary-gradient-bottom-10::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 10%) !important; }
                                                            .overlay-primary-gradient-top-20::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 20%) !important; }
                                                            .overlay-primary-gradient-bottom-20::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 20%) !important; }
                                                            .overlay-primary-gradient-top-30::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 30%) !important; }
                                                            .overlay-primary-gradient-bottom-30::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 30%) !important; }
                                                            .overlay-primary-gradient-top-40::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 40%) !important; }
                                                            .overlay-primary-gradient-bottom-40::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 40%) !important; }
                                                            .overlay-primary-gradient-top-50::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 50%) !important; }
                                                            .overlay-primary-gradient-bottom-50::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 50%) !important; }
                                                            .overlay-primary-gradient-top-60::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 60%) !important; }
                                                            .overlay-primary-gradient-bottom-60::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 60%) !important; }
                                                            .overlay-primary-gradient-top-70::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 70%) !important; }
                                                            .overlay-primary-gradient-bottom-70::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 70%) !important; }
                                                            .overlay-primary-gradient-top-80::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 80%) !important; }
                                                            .overlay-primary-gradient-bottom-80::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 80%) !important; }
                                                            .overlay-primary-gradient-top-90::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 90%) !important; }
                                                            .overlay-primary-gradient-bottom-90::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 90%) !important; }
                                                            .overlay-primary-gradient-top-100::before { background: linear-gradient(0deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 100%) !important; }
                                                            .overlay-primary-gradient-bottom-100::before { background: linear-gradient(180deg, rgba(35,35,35,0) 0, rgba(35,35,35,1) 100%) !important; }    
                                                        
                                                    

    더 필요하면; 나머지 색상 및 그라디언트 오버레이는 알아서들 만들어 쓰십시오 ㅡㅡ;

    ➥ 스크린 프레임

    프레임 안에는 모든 크기, 모든 종류의 이미지를 넣을 수 있지만.. 태블릿에는 572px x 375px, 폰에는 228px x 495px(및 같은 종횡비)가 권장된다:

    photo-19 laptop-frame
    photo-19 photo-frame
                                                        
                                                            
                                                        
                                                    
                                                        
                                                            .device-laptop {
                                                                position: relative;
                                                            } .device-laptop img {
                                                                position: relative; object-fit: cover; overflow: hidden;
                                                            } .device-laptop img.screen {
                                                                position: absolute; top: 0.5%; left: 14.5%;
                                                                width: 70.5%; height: 87%; border-radius: 4.5% 4.5% 0 0;
                                                            }
                                                            
                                                            .device-iphone {
                                                                position: relative;
                                                            } .device-iphone img {
                                                                position: relative; object-fit: cover; overflow: hidden;
                                                            } .device-iphone img.screen {
                                                                position: absolute; top: 2.5%; left: 8%;
                                                                width: 84.2%; height: 92.8%; border-radius: 5%;
                                                            }
                                                        
                                                    
    ➥ Avata 만들기

    이 아바타는 정사각형 이미지에서 가장 잘 작동하며, 아바타 크기보다 2배 큰 이미지를 사용할 때 가장 좋은 품질이 나온다:

                                                        
                                                            
                                                        
                                                    
                                                        
                                                            .avata {
                                                                position: relative; height: 2rem; width: 2rem;
                                                                display: inline-flex; align-items: center; justify-content: center;
                                                                border-radius: 50%;
                                                            } .avata .avata-img {
                                                                height: 2rem; width: auto;
                                                                border-radius: 100%;
                                                                object-fit: cover;
                                                            }
    
                                                            .avata-xs { height: 1.25rem; width: 1.25rem; }
                                                            .avata-xs .avata-img { height: 1rem; }
                                                            .avata-sm { height: 1.75rem; width: 1.75rem; }
                                                            .avata-sm .avata-img { height: 1.5rem; }
                                                            .avata-lg { height: 2.5rem; width: 2.5rem; }
                                                            .avata-lg .avata-img { height: 2.5rem; }
                                                            .avata-xl { height: 3rem; width: 3rem; }
                                                            .avata-xl .avata-img { height: 3rem; }
                                                            .avata-xxl { height: 3.75rem; width: 3.75rem; }
                                                            .avata-xxl .avata-img { height: 3.75rem; }
    
                                                            .avata-busy::before, .avata-idle::before, .avata-offline::before, .avata-online::before {
                                                                content: ""; position: absolute; bottom: 5%; right: 5%; width: 20%; height: 20%;
                                                                border-radius: 50%; background-color: #d7dce3; border: 0.0625rem solid #fff;
                                                            }
                                                            .avata-busy::before { background-color: #e81500; }
                                                            .avata-idle::before { background-color: #f4a100; }
                                                            .avata-offline::before { background-color: #d7dce3; }
                                                            .avata-online::before { background-color: #00ac69; }
                                                        
                                                    
    wave