>  기사  >  웹 프론트엔드  >  Clip-Path를 사용하여 마우스를 올리면 텍스트 색상을 반전시키는 방법은 무엇입니까?

Clip-Path를 사용하여 마우스를 올리면 텍스트 색상을 반전시키는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 08:44:301009검색

How to Invert Text Color on Mouse Hover Using Clip-Path?

마우스를 올리면 텍스트 색상 반전

질문은 사용자가 마우스를 올리면 검은색 텍스트의 색상이 반전되기를 원하는 시나리오를 제시합니다. 제공된 GIF에 표시된 대로 사용자 정의 검은색 커서를 사용합니다. 사용자가 CSS와 JavaScript를 사용하여 이 효과를 만들려고 시도했지만 코드가 커서를 흰색으로 바꾸기만 하고 검은색 텍스트를 반전시키지 않아 실패했습니다.

해결책

여기서 제공되는 솔루션은 원하는 효과를 얻기 위해 클립 경로 개념을 사용합니다. 여기에는 텍스트를 복제하여 두 개의 레이어(하나는 검정색 텍스트, 다른 하나는 흰색 텍스트)를 만드는 작업이 포함됩니다. 클립 경로를 사용하고 커서의 움직임에 따라 위치를 조정하면 맨 위 레이어가 표시되고 그 아래에 있는 텍스트 색상이 반전됩니다.

다음 코드는 이 솔루션을 보여줍니다.

<code class="javascript">var h = document.querySelector('h1');
var p = h.getBoundingClientRect();
var c = document.querySelector('.cursor');

document.body.onmousemove = function(e) {
  /*Adjust the cursor position*/
  c.style.left = e.clientX + 'px';
  c.style.top = e.clientY + 'px';
  /*Adjust the clip-path*/
  h.style.setProperty('--x', (e.clientX - p.top) + 'px');
  h.style.setProperty('--y', (e.clientY - p.left) + 'px');
};</code>
<code class="css">body {
  cursor: none;
}
h1 {
  color: #000;
  display: inline-block;
  margin: 50px;
  text-align: center;
  position: relative;
}
h1:before {
  position: absolute;
  content: attr(data-text);
  color: #fff;
  background: #000;
  clip-path: circle(20px at var(--x, -100%) var(--y, -100%));
}
.cursor {
  position: fixed;
  width: 40px;
  height: 40px;
  background: #000;
  border-radius: 50%;
  top: 0;
  left: 0;
  transform: translate(-50%, -50%);
  z-index: -2;
}</code>
<code class="html"><h1 data-text="WORK">WORK</h1>

<span class="cursor"></span></code>

이 코드에서 h1 요소에는 검은색 텍스트와 그 아래에 흰색 텍스트가 있는 중복 레이어가 포함되어 있습니다. 상단 레이어의 클립 경로는 커서 위치에 따라 조정되어 아래의 흰색 텍스트가 드러나고 검정색 텍스트의 색상이 효과적으로 반전됩니다.

위 내용은 Clip-Path를 사용하여 마우스를 올리면 텍스트 색상을 반전시키는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.