워드프레스닷컴 인스타그램 컨텐츠 삽입 가로스크롤 문제 해결방법

워드프레스닷컴에 아무런 처리를 하지 않은 상태에서 인스타그램 컨텐츠를 넣으면 모바일에서 가로스크롤이 생긴답니다. 이 경우 사용자 경험에도 안 좋지만, 무엇보다 SEO 점수를 많이 깎아먹는답니다. 저는 실제로 이런 경우 때문에 구글 콘솔에서 경고 메시지를 받은 적이 있습니다. 이런 부분은 소스코드를 수정해서 해결해야 하는 부분입니다.

문제는 이 소스코드가 인스타그램의 iframe 기능으로 제공되는 것이고, 따라서 인스타그램에서 자체적으로 제공되는 기능이라 인라인 소스코드를 바꿔서 해결이 안 된다는 점입니다. 이 경우 워드프레스 스킨의 추가CSS 기능을 활용하여 CSS를 강제로 입혀서 문제를 해결해야 합니다.

워드프레스닷컴의 추가CSS를 삽입하는 기능이 프리미엄 요금제 이상에서 가능하기 때문에, 당연히 무료 요금제에서는 이런 기능을 활용할 수 없답니다. 따라서 워드프레스닷컴의 무료 요금제를 활용하는 경우 인스타그램의 소스코드를 삽입하면 이런 SEO 문제의 불리함을 안고 가야 한다는 이야기가 되겠습니다.

현재 제 블로그 (zoahaza.blog) 의 소스코드입니다. 이들 중 일부에 인스타그램 컨텐츠를 삽입할 때 가로스크롤 문제를 해결하는 소스코드가 들어 있습니다.

main p, main h1, main h2, main h3, main h4, main h5, main h6, main li {
word-break: break-all;
}

.entry-featured-image {
border-top: 1px solid #333;
border-bottom: 1px solid #333;
position: relative;
height: 20vh;
overflow: hidden;
}

.entry-featured-image img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

.entry-featured-image::after {
display: none;
}

.site-logo-link img {
width: 150px;
height: 150px;
}

.wp-block-embed-instagram .embed-instagram iframe[style] {
min-width: 100px !important;
}

@media (max-width: 599px) {
#main .wp-block-embed-flickr img {
max-width: 75vw;
height: fit-content;
}

.entry-featured-image {
    height: 10vh;
}

}

여기서 인스타그램의 인라인 소스코드를 수정하는 부분은 다음과 같습니다.

.wp-block-embed-instagram .embed-instagram iframe[style] {
min-width: 100px !important;
}

주의할 점이 있다면, 인라인 소스코드의 방식이 워드프레스닷컴의 테마(스킨)에 따라 조금씩 달라질 수 있으므로, 워드프레스닷컴이라고 무조건 이 소스코드를 복사 + 붙여넣기 해서 이 문제를 해결할 수 없을지도 모릅니다. 따라서 이런 경우 문제를 해결하기 위해 약간의 html, css 지식이 있어야 합니다.

문제를 해결하는 과정을 따로 유튜브로 보여 드리니 참고 바랍니다.

해당 동영상은 2024년 4월 25일 오후 5시에 공개 예정입니다.

미디어아트 소스코드 오류해결 과정

*

2011년 만든 미디어아트 소스코드의 오류를 고치는 과정입니다

해당 동영상은 2023년 5월 8일 오후 5시에 공개 예정입니다.

*

1. 수정 전 소스코드

<html>

    <head>

        http://jquery-3.6.0.min.js

        <style>

            #space{

                width: 100%;

                height: 100%;

                display:block;

                overflow:hidden;

                scroll:no;

            }

            div{

                position:absolute;

                display: block;

                animation-name:scale_box;

                animation-duration:10s;

                animation-iteration-count:1;

                border-radius:50%;

                transform: translate(-50%, -50%);

                background-color:#fff;

            }

            div.black{

                width:0px;

                height:0px;

                background-color:#000;

            }

            @keyframes scale_box{

                0%{

                    width:0px;

                    height:0px;

                    opacity:1;

                }

                100%{

                    width:2000px;

                    height:2000px;

                    opacity:0;

                }

            }

        </style>

    </head>

    <body id="space">

        <script>

            var spot=$('#space');

            var toggleColor = new Array(0,0,0,0,0);

            var spotNumber=0;

            var ponder = new Array();

            var colorR;

            var colorG;

            var colorB;

            var ToggleSN = 0;

            spot.click(function(event){

                // 색상 생성

                colorR=Math.floor(Math.random()*127);

                colorG=Math.floor(Math.random()*127);

                colorB=Math.floor(Math.random()*127);

                // spot 제어

                if (spotNumber >= 5){

                    clearInterval(ponder[spotNumber]);

                    spotNumber=0;

                }

                x = event.pageX;

                y = event.pageY;

                spotNumber++;

                ponderMaker(x, y, colorR, colorG, colorB);

            });

            function ponderMaker(x, y, colorR, colorG, colorB){

                ponder[spotNumber-1] = setInterval(function(){

                    var circle=$("<div>", {

                        css: {

                            top: y,

                            left: x,

                            backgroundColor: 'rgb('+colorR+','+colorG+','+colorB+')'

                        },

                    }).appendTo("#space");

                    if ((toggleColor[spotNumber-1])%2 == 0){

                        circle.css("background-color", "white");

                    }

                    toggleColor[spotNumber-1]++;

                    console.log(spotNumber, toggleColor[spotNumber-1], ToggleSN);

                }, 1000);

            }

        </script>

    </body>

</html>

*

2. 수정 후 소스코드

<html>

    <head>

        http://jquery-3.6.0.min.js

        <style>

            #space{

                width: 100%;

                height: 100%;

                display:block;

                overflow:hidden;

                scroll:no;

            }

            div{

                position:absolute;

                display: block;

                animation-name:scale_box;

                animation-duration:10s;

                animation-iteration-count:1;

                border-radius:50%;

                transform: translate(-50%, -50%);

                background-color:#fff;

            }

            div.black{

                width:0px;

                height:0px;

                background-color:#000;

            }

            @keyframes scale_box{

                0%{

                    width:0px;

                    height:0px;

                    opacity:1;

                }

                100%{

                    width:2000px;

                    height:2000px;

                    opacity:0;

                }

            }

        </style>

    </head>

    <body id="space">

        <script>

            var spot=$('#space');

            var toggleColor = new Array(0,0,0,0,0);

            var ponder = new Array();

            var colorR;

            var colorG;

            var colorB;

            var ToggleSN = 0;

            let spotNumber=0;

            spot.click(function(event){

                // 색상 생성

                colorR=Math.floor(Math.random()*127);

                colorG=Math.floor(Math.random()*127);

                colorB=Math.floor(Math.random()*127);

                x = event.pageX;

                y = event.pageY;

                spotNumber++;

                if (spotNumber >= 5){

                    clearInterval(toggleColor[spotNumber]);

                    spotNumber=0;

                }

                ponderMaker(x, y, colorR, colorG, colorB, spotNumber);

            });

            function ponderMaker(x, y, colorR, colorG, colorB, spotNumber2){

                toggleColor[spotNumber2-1] = setInterval(function(){

                    var circle=$("<div>", {

                        css: {

                            top: y,

                            left: x,

                            backgroundColor: 'rgb('+colorR+','+colorG+','+colorB+')'

                        },

                    }).appendTo("#space");

                    if ((toggleColor[spotNumber2-1])%2 == 0){

                        circle.css("background-color", "white");

                    }

                    toggleColor[spotNumber2-1]++;

                }, 1000);

            spotNumber2++;

            }

        </script>

    </body>

</html>

*

3. 결론

변수 선언을 let으로 선언해야 할 것으로 var로 선언해서 문제가 생겼다고 판단한 초반의 생각은 들어맞지 않았습니다. 그보단, 다른 영역의 함수에 넘겨줘서 다르게 처리해야 할 변수를 전역변수로 퉁쳐서 처리한 게 문제였다는 것을 발견했습니다.

결국 이 문제를 해결했고, 소스코드는 의도한 대로 정상 동작하게 만들었습니다. 다만, 컴퓨터 사양의 한계로 배열을 5개까지 만들 수밖에 없어서 그 이상의 변수가 들어가면 값이 꼬일 수 있다는 게 한가지 문제이긴 합니다만, 컴퓨터 사양의 한계이므로 어쩔 수 없어서 그냥 놔뒀습니다.

좀 더 좋은 사양의 컴퓨터에서 제대로 동작되길 바란다면, 배열 한계값을 늘려서 처리하시기 바랍니다. (자세한 사항은 해당 동영상 참고)

*

4. 향후 계획

chatGPT에 해당 소스코드의 분석을 의뢰하였고, 제대로 분석하는 것을 확인했습니다. 나중에 chatGPT를 활용해서 좀 더 나은 코딩 방향을 찾아볼 예정입니다.

*

– 블로그 썸네일은 flaticon에서 제공받았습니다. –

워드프레스 테마 커스터마이징: 썸네일 이미지 크기 줄이기

1. 서론

이미 다른 글에서 워드프레스 테마 커스터마이징을 해서 썸네일 이미지를 줄였다. 왜냐하면 워드프레스닷컴 기본 세팅으로는 썸네일 이미지가 너무 크게 출력되어 본문의 가독성을 심각하게 해치고 있었기 때문이었다.

이 부분을 조금 더 다듬으려고 한다. 왜냐하면 모바일에서도 보기 좋게 출력하기 위해서다.

height:300px 로는 PC에서는 적당하게 보이지만, 모바일에서 이 수치는 과하다.

그래서 화면 비율에 맞게 줄여주려는 것이다.

*

2. 기존 소스코드(수정 전)

(생략)

.zoahaza_custom_C1 {
	border-top: 1px solid #333;
	border-bottom: 1px solid #333;
	position: relative;
	height: 300px;
	overflow: hidden;
}

.zoahaza_custom_C1 img {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

(생략)

@media (max-width: 599px) {
	main .wp-block-embed-flickr img {
		max-width: 85vw;
		height: fit-content;
	}
}

*

3. 수정 방향

가장 좋은 방법은 height: 값을 px이 아닌 vh 값으로 조정한 후, 미디어쿼리에서 orientation:portrait 를 걸어서 모바일 세로화면에서 vh값을 더 작게 조정하는 것이다.

모바일 화면은 대개 16:9 이므로, 2:1 정도의 비율이다. 따라서, orientation:portrait일 때에는 vh값을 50%로 짤라주면 된다.

하지만 문제가 있다. 워드프레스닷컴의 CSS에서는 orientation:portrait 미디어쿼리를 지원하지 않는다.

여기에 대한 해결책은 어느정도는 예상할 수 있다.

왜냐하면 브라우저 가로길이가 일정 px 이하의 화면 크기는 거의 무조건 orientation:portrait (모바일 세로화면) 라고 예상할 수 있기 때문이다.

그렇다면 기존의 미디어쿼리 값인 @media (max-width: 599px) 를 재활용해서 넣을 수 있다.

*

4. 변경한 소스코드(수정 후)

(생략)

.zoahaza_custom_C1 {
	border-top: 1px solid #333;
	border-bottom: 1px solid #333;
	position: relative;
	height: 20vh;
	overflow: hidden;
}

.zoahaza_custom_C1 img {
	position: absolute;
	top: 50%;
	left: 50%;
	transform: translate(-50%, -50%);
}

(생략)

@media (max-width: 599px) {
	main .wp-block-embed-flickr img {
		max-width: 85vw;
		height: fit-content;
	}
	.zoahaza_custom_C1{
		height:10vh;
	}
}

*

– 블로그 썸네일은 flaticon에서 제공받았습니다. –

2022년 12월 10일 작성.

화면 가로로 스크롤해서 넘기는 자바스크립트 소스코드

<scroll001.html>
<scroll002.html>

사실 PC의 마우스는 화면을 가로로 스크롤하는 기능을 대부분 지원하지 않는다.

그래서 scroll002.html에서는 PC에서는 화면 세로 스크롤에 따라 화면이 옆으로 움직이고, 모바일에서만 화면 가로 스크롤에 따라 화면이 옆으로 움직이게 만들어져 있다.

일단 scroll002.html의 소스코드를 공개하겠다.

*


window.onload = function(){
    function zoom1(event) {
      event.preventDefault();
        var winWidth = window.innerWidth;
      if(event.deltaY > 0){
          document.getElementById('nav').querySelector('ul').scrollBy({top: 0, left: -winWidth-11, behavior: "smooth"});
      }else if(event.deltaY < 0){
          document.getElementById('nav').querySelector('ul').scrollBy({top: 0, left: winWidth+11, behavior: "smooth"});
      }
    }
    
    var startPoint = 0;
    function zoomsave2(event){
        startPoint = event.touches[0].pageX;
        //console.log("startpoint:"+startPoint);
    }

    function zoom2(event) {
      event.preventDefault();
        var winWidth = window.innerWidth;
        //console.log("movepoint:"+event.touches[0].pageX);
      if(event.touches[0].pageX > startPoint){
          document.getElementById('nav').querySelector('ul').scrollBy({top: 0, left: -winWidth-11, behavior: "smooth"});
      }else if(event.touches[0].pageX < startPoint){
          document.getElementById('nav').querySelector('ul').scrollBy({top: 0, left: winWidth+11, behavior: "smooth"});
      }
    }

    
var el = document.getElementById('nav');
el.onwheel = zoom1; // PC
el.ontouchstart = zoomsave2; // Mobile
el.ontouchmove = zoom2; // Mobile

}

*

여기서 zoom1 함수가 PC에서 동작하는 함수이고, zoomsave2와 zoom2 함수가 모바일에서 동작하는 함수다.

유감스럽게도 ontouchend를 지원하는 자바스크립트 함수는 현재 없다. 있더라도 비표준일 것이다.

그래서 ontouchstart, ontouchmove로 이벤트를 받아서 처리해야 한다.

touches[]가 배열로, 0인 이유는, 사용자들이 대체로 화면을 스크롤할 때 한 개의 손가락을 사용하기 때문이다. 혹여나 두 손가락 이상을 사용하더라도, touches[0]은 항상 첫번째 손가락이기 때문에 동작에 무리가 없다.

해당 소스코드는 화면을 가로로 넘기는 것 중 가장 기본적인 부분만을 구현한 것이고, 안의 글자 등까지 애니메이션을 넣으려면 추가로 소스코드가 더 필요할 것이다.

*

소스코드 다운로드: https://zoahaza.shop/?product=%ea%b0%80%eb%a1%9c-%ec%8a%a4%ed%81%ac%eb%a1%a4-javascript-%ec%86%8c%ec%8a%a4%ec%bd%94%eb%93%9c

*

사실 이 소스코드는 [일반인 P선생]의 동업 제안으로 만들어졌다. 뜻이 맞지 않아 동업 제안은 성공적으로 전행되지 못했지만, 그 대신 이 소스코드는 남았다.

어쩌면 [일반인 P선생]이 이 소스코드를 발견하고 가져가서 쓸지도 모른다. 그래도 된다. 해당 소스코드를 받아서 쓰는 데에는 아무런 제한이 없다.

[일반인 P선생]과 있었던 이야기는 되도록이면 코멘트를 하지 않겠다. 안좋은 일을 떠벌려 봤자 나에게 좋을 게 없다.

*

– 블로그 썸네일은 flaticon에서 제공받았습니다. –

2022년 12월 10일 작성.

코딩: 나만의 동기부여 홈화면 만들기

스파르타코딩클럽의 강의 <나만의 동기부여 홈화면 만들기>를 수강하고 나서, 나 나름대로 응용해서 내가 생각하는 방향의 나만의 동기부여 홈화면을 제작하였다.

<나만의 동기부여 홈화면 만들기: 조아아이텍 버전>

*

아직 정식으로 사업자를 낸 건 아니지만, 사업체 이름을 홈화면에 활용하면 동기부여가 많이 될 것 같아서 그렇게 만들어 봤다.

디자인은 최대한 심플하게 가져가려고, 배경화면은 원래 있던 것을 아예 지워버리고 흰 화면에 제작하게 되었다.

실질적으로 만드는 시간은 40분도 안 되지만, 깃허브를 안들어가본 지 오래되어 깃허브에 대한 설정이 필요한 상황이라서

깃허브 설정에 시간이 소요되어 생각보다는 시간이 조금 더 걸렸다.

*

만드는 방법에 대해서는 이 블로그에 자세히 이야기하지 않을 예정이다.

저작권이 있는 유료강의를 토대로 응용해서 만든 것이기 때문이다.

만일 정 궁금하다면 유료강의를 듣고 만드는 것을 추천한다.

강의가 잘 만들어져 있어 내가 블로그로 백날 설명하는 것보다 더 효과적일 것이다.

*

스파르타코딩클럽 <나만의 동기부여 홈화면 만들기> 온라인 강의:
https://online.spartacodingclub.kr/enrolleds/6370d21b4cd67d01815c0766/rounds/6358e2f6d5e61148f86b3269/roadmap

2022년 12월 3일 작성.