본문 바로가기
개발/CSS

특정 이미지 바깥 배경 흐리게 만들기

by 안뇽! 2021. 9. 15.
반응형

다음과 같이 특정 이미지 바깥의 배경을 흐리게 만드는 방법이 있다.

HTML

<body>

    <input type="checkbox" id="switch" /><label for="switch">Toggle</label>
    <!-- Toggle -->

    <div class ='box'>토글을 클릭하세요</div>
  <!-- 이 div 태그 바깥 화면을 흐리게 만들 것임 -->

    <script src='c.js'>

    </script>
</body>

 

CSS

아래 CSS코드의 가장 밑에 있는 .hiddenback 클래스가 box-shadow 효과를 준다.

 

<div class='box'></div>태그에 .hiddenback 클래스를 추가해주면 div태그 바깥의 화면이 흐려진다.

 

box의 주변에 그림자를 넣는 방식이다. 모니터가 9999px보다 크다면 더 큰 px을 입력해야 한다.


.box {
  /* border : 1px gray solid; */
  width : 100px;
  height:100px;
  position : fixed;
  top : 100px;
  background-color :transparent;
}
/* 바깥화면 흐리게하기 */
.hiddenback{ 
  position : fixed;
  box-shadow : rgba(0,0,0,0.5) 0 0 0 9999px, rgba(0,0,0,0.5) 2px 2px 3px 3px;

  z-index : 100;
}

 

JS

 

DOM을 이용해서 토글을 클릭할때마다 div태그에 hiddenback 클래스가 추가되거나 삭제되도록 했다.

const toggle = document.querySelector('label')//토글
const box = document.querySelector('.box')//div태그

//클릭할때마다 콜백실행
toggle.addEventListener('click',()=>{
    const cssList = box.classList.value;
    if(!cssList.includes('hiddenback')){//hiddenback클래스가 없으면
        box.classList.add('hiddenback')//hiddenback추가-> 주변 어두워짐
        box.textContent = 'switchOFF'//switchOFF 입력
    }
    else {//hiddenback 클래스가 있으면
        box.classList.remove('hiddenback')//hiddenback제거->주변밝아짐
        box.textContent = 'switchON'//switchON 입력
    }
})

 

전체 CSS

 


/* 토글 */

input[type=checkbox]{
    height: 0;
    width: 0;
    visibility: hidden;
}

label {
    cursor: pointer;
    text-indent: -9999px;
    width: 100px;
    height: 40px;
    background: rgb(247, 145, 86);
    display: block;
    border-radius: 100px;
    position: relative;
}

label:after {
    content: '';
    position: absolute;
    top: 5px;
    left: 5px;
    width: 30px;
    height: 30px;
    background: rgb(235, 202, 152);
    border-radius: 90px;
    transition: 0.3s;
}

input:checked + label {
    background: #dd8015;
}

input:checked + label:after {
    left: calc(100% - 5px);
    transform: translateX(-100%);
}

label:active:after {
    width: 130px;
}

/* 배경화면 */
body {
  background-image: url('./jjangkoo/a.jpg');
  background-repeat: no-repeat;
  background-size:100% 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

/* 바깥화면 흐리게하기 */
.box {
  /* border : 1px gray solid; */
  width : 100px;
  height:100px;
  position : fixed;
  top : 100px;
  background-color :transparent;
}

.hiddenback{ 
  position : fixed;
  box-shadow : rgba(0,0,0,0.5) 0 0 0 9999px, rgba(0,0,0,0.5) 2px 2px 3px 3px;

  z-index : 100;
}
반응형

'개발 > CSS' 카테고리의 다른 글

position : absolute  (0) 2021.11.06
position : relative와 absolute  (0) 2021.10.17
CSS flex box  (0) 2021.08.01
웹 폰트 사용법  (0) 2021.07.26
HTML요소의 block 특성과 inline 특성  (0) 2021.07.24