앵커 태그 내에서 title 속성의 스타일을 변경하는 방법은 무엇입니까?


답변:


133

방법은 다음과 같습니다.

a.tip {
    border-bottom: 1px dashed;
    text-decoration: none
}
a.tip:hover {
    cursor: help;
    position: relative
}
a.tip span {
    display: none
}
a.tip:hover span {
    border: #c0c0c0 1px dotted;
    padding: 5px 20px 5px 5px;
    display: block;
    z-index: 100;
    background: url(../images/status-info.png) #f0f0f0 no-repeat 100% 5%;
    left: 0px;
    margin: 10px;
    width: 250px;
    position: absolute;
    top: 10px;
    text-decoration: none
}
<a href="#" class="tip">Link<span>This is the CSS tooltip showing up when you mouse over the link</span></a>


태그 대신 태그 사용하는 경우 FF에서 제대로 작동하지 않습니다 ( 예 : td
dnim

6
자세한 설명과 함께 위 기술의 예는 sixrevisions.com/css/css-only-tooltips 를 참조하십시오 .
George

1
이렇게하면 이중 툴팁이 나타납니다. 스타일이 지정된 스타일이 적용된 후 스타일이 지정되지 않은 스타일이 표시됩니다. 이것은 당신의 바이올린에 있습니다. 크롬을 사용하고 있습니다. 이것이 이상입니까?

8
코드에 title 속성이없는 답변은 여기에 100 개가 넘는 투표를합니다.
Ben Racicot

1
실제 질문도 다루지 않습니다 ... 부!
Matt

126

실제로 CSS attr표현, 컨텐츠 및 속성 선택기 (IE8과는 거리가 멀다는 것을 암시) 만 요구하는 순수한 CSS 솔루션이있는 것 같습니다 .

a[title]:hover:after {
  content: attr(title);
  position: absolute;
}

출처 : https://jsfiddle.net/z42r2vv0/2/

@ViROscar의 입력으로 업데이트 : 위의 예제에서 "title"속성을 사용했지만 특정 속성을 사용할 필요는 없습니다. 실제로 CSS의 이점을 누릴 수없는 사용자가 내용에 액세스 할 가능성이 있으므로 "alt"속성을 사용하는 것이 좋습니다.

다시 업데이트 "title"속성은 기본적으로 "tooltip"속성을 의미하기 때문에 코드를 변경하지 않습니다. 호버에서만 액세스 할 수있는 필드 안에 중요한 텍스트를 숨기는 것은 좋지 않습니다. 이 텍스트에 액세스 할 수있게하려면 "aria-label"속성이 가장 적합한 위치 인 것 같습니다 : https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute


11
기본 툴팁이 표시되지 않게하려면 항상 "alt"태그를 사용할 수 있습니다.
Jon z

1
@ Jonz 나는 사용자 정의 속성 "data-alt = 'alt'"를 시도했지만 모든 것이 정상입니다. alt 또는 title 속성을 사용할 필요는 없습니다.
ViROscar

7
순수 CSS 툴팁은 심각한 재귀를 갖습니다 stacking context. 요소에 바인드되어 해당 요소에 바인드됩니다 . 새로운 스태킹 컨텍스트를 생성 하고 순수한 CSS 툴팁 position이외의 모든 요소는 외부에서 볼 수 없으며 그러한 스태킹 컨텍스트를 넘어 설 수 없습니다 . 따라서 위치가 좁은 요소가 있으면 CSS 툴팁이 표시되지 않습니다. 유일한 해결책은 JavaScript가 필요한 최상위 스태킹 컨텍스트 (예 :)에 툴팁을 첨부 하는 것입니다. staticrelative<body>
Vaclav Novotny

불행히도 클릭해도 사라지지 않습니다.
user2705463

71

실제 title속성을 스타일링 할 수 없습니다

title속성 의 텍스트 가 표시되는 방식은 브라우저에 의해 정의되며 브라우저마다 다릅니다. 웹 페이지가 title속성을 기반으로 브라우저가 표시하는 툴팁에 스타일을 적용하는 것은 불가능 합니다.

그러나 다른 속성을 사용하여 매우 유사한 것을 만들 수 있습니다.

당신은 (예를 CSS와 의사 툴팁 및 사용자 지정 특성을 만들 수 있습니다 data-title)

이를 위해 data-title속성을 사용 합니다. data-*속성 은 DOM 요소 / HTML에 사용자 정의 데이터를 저장하는 방법입니다. 있다 그들에 액세스하는 방법은 여러 가지 . 중요한 것은 CSS로 선택할 수 있다는 것입니다.

당신이 가진 요소를 선택하기 위해 CSS를 사용할 수있는 점을 감안 data-title하면 다음 생성하는 CSS를 사용하여 속성 :after(또는 :before) content속성의 값을 사용하여 포함 된attr() .

스타일 툴팁 예제

더 크고 다른 배경색으로 (질문의 요청에 따라) :

[data-title]:hover:after {
    opacity: 1;
    transition: all 0.1s ease 0.5s;
    visibility: visible;
}
[data-title]:after {
    content: attr(data-title);
    background-color: #00FF00;
    color: #111;
    font-size: 150%;
    position: absolute;
    padding: 1px 5px 2px 5px;
    bottom: -1.6em;
    left: 100%;
    white-space: nowrap;
    box-shadow: 1px 1px 3px #222222;
    opacity: 0;
    border: 1px solid #111111;
    z-index: 99999;
    visibility: hidden;
}
[data-title] {
    position: relative;
}
<a href="example.com" data-title="My site"> Link </a> with styled tooltip (bigger and with a different background color, as requested in the question)<br/>
<a href="example.com" title="My site"> Link </a> with normal tooltip

보다 정교한 스타일링 ( 이 블로그 게시물에서 수정 ) :

[data-title]:hover:after {
    opacity: 1;
    transition: all 0.1s ease 0.5s;
    visibility: visible;
}
[data-title]:after {
    content: attr(data-title);
    position: absolute;
    bottom: -1.6em;
    left: 100%;
    padding: 4px 4px 4px 8px;
    color: #222;
    white-space: nowrap; 
    -moz-border-radius: 5px; 
    -webkit-border-radius: 5px;  
    border-radius: 5px;  
    -moz-box-shadow: 0px 0px 4px #222;  
    -webkit-box-shadow: 0px 0px 4px #222;  
    box-shadow: 0px 0px 4px #222;  
    background-image: -moz-linear-gradient(top, #f8f8f8, #cccccc);  
    background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f8f8f8),color-stop(1, #cccccc));
    background-image: -webkit-linear-gradient(top, #f8f8f8, #cccccc);  
    background-image: -moz-linear-gradient(top, #f8f8f8, #cccccc);  
    background-image: -ms-linear-gradient(top, #f8f8f8, #cccccc);  
    background-image: -o-linear-gradient(top, #f8f8f8, #cccccc);
    opacity: 0;
    z-index: 99999;
    visibility: hidden;
}
[data-title] {
    position: relative;
}
<a href="example.com" data-title="My site"> Link </a> with styled tooltip<br/>
<a href="example.com" title="My site"> Link </a> with normal tooltip

알려진 문제

실제와 달리 title 툴팁 위 CSS에서 생성 된 툴팁은 반드시 페이지에서 볼 수있는 것은 아닙니다 (즉, 가시 영역 밖에있을 수 있음). 반면에 현재 창 내에있을 수 있지만 실제 툴팁에는 해당되지 않습니다.

또한 의사 툴팁은 마우스가 해당 요소에있는 위치보다 의사 툴팁이있는 요소에 상대적으로 배치됩니다. 의사 툴팁이 표시되는 위치를 미세 조정할 수 있습니다. 요소와 관련하여 알려진 위치에 표시되는 것은 상황에 따라 이점이 될 수도 있고 단점이 될 수도 있습니다.

당신은 사용할 수 없습니다 :before또는:after컨테이너가 아닌 요소 요소를

이 답변에는 "입력 필드에 : before 또는 : after pseudo-element를 사용할 수 있습니까?" 에 대한 좋은 설명 이 있습니다.

효과적으로, 당신은 같은 요소를 직접이 방법을 사용할 수 없다는이 수단 <input type="text"/>, <textarea/>, <img>, 등 쉬운 해결책은에 컨테이너 아니다 요소를 래핑하는 것입니다 <span>또는 <div>용기에 의사 툴팁이있다.

<span>컨테이너가 아닌 요소를 래핑 할 때 의사 툴팁을 사용하는 예 :

[data-title]:hover:after {
    opacity: 1;
    transition: all 0.1s ease 0.5s;
    visibility: visible;
}
[data-title]:after {
    content: attr(data-title);
    background-color: #00FF00;
    color: #111;
    font-size: 150%;
    position: absolute;
    padding: 1px 5px 2px 5px;
    bottom: -1.6em;
    left: 100%;
    white-space: nowrap;
    box-shadow: 1px 1px 3px #222222;
    opacity: 0;
    border: 1px solid #111111;
    z-index: 99999;
    visibility: hidden;
}
[data-title] {
    position: relative;
}

.pseudo-tooltip-wrapper {
    /*This causes the wrapping element to be the same size as what it contains.*/
    display: inline-block;
}
Text input with a pseudo-tooltip:<br/>
<span class="pseudo-tooltip-wrapper" data-title="input type=&quot;text&quot;"><input type='text'></span><br/><br/><br/>
Textarea with a pseudo-tooltip:<br/>
<span class="pseudo-tooltip-wrapper" data-title="this is a textarea"><textarea data-title="this is a textarea"></textarea></span><br/>


위에 링크 된 블로그 게시물의 코드 (여기서 처음으로 표절 한 답변을 보았습니다)에서 data-*속성 대신 속성 을 사용하는 것이 분명했습니다 title. 그렇게하는 것은 그 (지금 삭제 된) 답변에 대한 snostorm 의 의견에서도 제안되었습니다 .


1
이것은 질문에 대한 답이 아니지만 지금까지 가장 좋은 해결책입니다. 감사.
JJ Labajo

@JJLabajo 지금까지 최고의 솔루션이 된 것에 대한 보완에 감사드립니다. 그러나 이것이 어떻게 질문에 대답하지 못하는지 잘 모르겠습니다. 문제는 불가능한 것을 요구하는 것입니다. 이 답변은 불가능하지만 OP가 원하는 것과 비슷한 것을 달성하는 대안을 제공합니다.
Makyen

이 솔루션은 input[type='text']또는 과 같은 요소에는 적용되지 않는다고 생각 textarea하지만 이유를 모르겠습니다. 누구든지 설명 할 수 있습니까?
Cheeso

@Cheeso 맞습니다. :before:after의사 요소는 컨테이너가 아닌 요소에서는 작동하지 않습니다. 대답에는 좋은 설명이 있습니다 . 입력 필드에 : before 또는 : after 유사 요소를 사용할 수 있습니까? 이 방법을 사용하려면 컨테이너가 아닌 <span>또는 속성 <div>을 넣은 요소를 감싸는 것이 가장 쉽습니다 data-title. 당신은 아마도 그들에게주고 싶은 것 display: inline-block;즉 그들에게 같은 크기 것 같은, <input>또는 <textarea>. 이 답변을 예제로 업데이트했습니다.
Makyen

이 답변은 실제로 진행 상황을 알려주고 모든 종류의 잘 구성된 배경 정보를 제공합니다.
Ideogram

26

CSS는 툴팁 모양을 변경할 수 없습니다. 브라우저 / OS에 따라 다릅니다. 다른 것을 원한다면 기본 툴팁 대신 요소 위로 마우스를 가져갈 때 자바 스크립트를 사용하여 마크 업을 생성해야합니다.


22
JS를 사용 하지 않아도 됩니다.
ANeves

9
'당신이 할 수 없습니다'라는 대답의 위험은 그들이 구식이 될 수 있다는 것입니다. (다른 위험은 당신이 방법을 알 수 없다는 것입니다.)
Michael Scheper

12

20 줄 JavaScript 솔루션을 여기에 게시한다고 생각했습니다. 완벽하지는 않지만 툴팁에서 필요한 내용에 따라 일부에는 유용 ​​할 수 있습니다.

사용시기

  • TITLE속성이 정의 된 모든 HTML 요소에 대한 툴팁의 스타일을 자동 으로 지정합니다 (향후 문서에 동적으로 추가 된 요소 포함)
  • 모든 툴팁에 Javascript / HTML 변경 또는 해킹이 필요하지 않습니다 ( TITLE속성 만으로 의미가 명확함)
  • 매우 가벼움 (약 300 바이트 압축 및 축소)
  • 당신은 매우 기본적인 스타일 툴팁 만 원합니다

사용하지 않을 때

  • jQuery가 필요하므로 jQuery를 사용하지 않는 경우 사용하지 마십시오
  • 툴팁이있는 중첩 요소에 대한 잘못된 지원
  • 화면에 동시에 둘 이상의 툴팁이 필요합니다
  • 일정 시간이 지나면 툴팁이 사라져야합니다.

코드

// Use a closure to keep vars out of global scope
(function () {
    var ID = "tooltip", CLS_ON = "tooltip_ON", FOLLOW = true,
    DATA = "_tooltip", OFFSET_X = 20, OFFSET_Y = 10,
    showAt = function (e) {
        var ntop = e.pageY + OFFSET_Y, nleft = e.pageX + OFFSET_X;
        $("#" + ID).html($(e.target).data(DATA)).css({
            position: "absolute", top: ntop, left: nleft
        }).show();
    };
    $(document).on("mouseenter", "*[title]", function (e) {
        $(this).data(DATA, $(this).attr("title"));
        $(this).removeAttr("title").addClass(CLS_ON);
        $("<div id='" + ID + "' />").appendTo("body");
        showAt(e);
    });
    $(document).on("mouseleave", "." + CLS_ON, function (e) {
        $(this).attr("title", $(this).data(DATA)).removeClass(CLS_ON);
        $("#" + ID).remove();
    });
    if (FOLLOW) { $(document).on("mousemove", "." + CLS_ON, showAt); }
}());

DOM을 준비하기 전에이 코드를 실행하더라도 DOM을 준비 할 때까지 툴팁을 표시하지 않습니다.

커스터마이즈

var두 번째 줄 에서 선언을 변경하여 약간 사용자 지정할 수 있습니다.

var ID = "tooltip"; // The ID of the styleable tooltip
var CLS_ON = "tooltip_ON"; // Does not matter, make it somewhat unique
var FOLLOW = true; // TRUE to enable mouse following, FALSE to have static tooltips
var DATA = "_tooltip"; // Does not matter, make it somewhat unique
var OFFSET_X = 20, OFFSET_Y = 10; // Tooltip's distance to the cursor

스타일

다음 CSS를 사용하여 툴팁의 스타일을 지정할 수 있습니다.

#tooltip {
    background: #fff;
    border: 1px solid red;
    padding: 3px 10px;
}

2
잘 작동합니다! 사소한 버그 수정 (제목이 비어있는 경우) : stackoverflow.com/questions/26702472/…
Malasorte

요소 위로 빠르게 이동하면 위에서 언급 한 버그 수정으로도 빈 툴팁이 표시됩니다. 이것은 불규칙하고 $ (this) .removeAttr ( "title")을 벗으면 중단됩니다. 그러나 물론 나는 잠시 후에 표준 도움말을 얻습니다.
Allen 정복

10

나는 여기에 답을 찾았습니다 : http://www.webdesignerdepot.com/2012/11/how-to-create-a-simple-css3-tooltip/

내 코드는 다음과 같습니다. 속성 이름을 변경했습니다. 동일한 텍스트에 대해 두 개의 팝업이있는 속성의 제목 이름을 유지하면 다른 변경 사항은 호버링의 텍스트가 노출 된 텍스트 아래에 표시된다는 것입니다.

.tags {
  display: inline;
  position: relative;
}

.tags:hover:after {
  background: #333;
  background: rgba(0, 0, 0, .8);
  border-radius: 5px;
  bottom: -34px;
  color: #fff;
  content: attr(glose);
  left: 20%;
  padding: 5px 15px;
  position: absolute;
  z-index: 98;
  width: 350px;
}

.tags:hover:before {
  border: solid;
  border-color: #333 transparent;
  border-width: 0 6px 6px 6px;
  bottom: -4px;
  content: "";
  left: 50%;
  position: absolute;
  z-index: 99;
}
<a class="tags" glose="Text shown on hovering">Exposed text</a>


7

사용자 정의 툴팁 패턴을위한 jsfiddle은 다음과 같습니다.

CSS 포지셔닝 및 pseduo 클래스 선택기를 기반으로합니다.

의사 클래스의 브라우저 간 지원에 대한 MDN 문서 확인

    <!-- HTML -->
<p>
    <a href="http://www.google.com/" class="tooltip">
    I am a 
        <span> (This website rocks) </span></a>&nbsp; a developer.
</p>

    /*CSS*/
a.tooltip {
    position: relative;
}

a.tooltip span {
    display: none;    
}

a.tooltip:hover span, a.tooltip:focus span {
    display:block;
    position:absolute;
    top:1em;
    left:1.5em;
    padding: 0.2em 0.6em;
    border:1px solid #996633;
    background-color:#FFFF66;
    color:#000;
}

5

기본 툴팁은 스타일을 지정할 수 없습니다.

즉, 코드 수정이 거의 또는 전혀 필요하지 않은 요소를 기본 툴팁 대신 마우스로 가리킬 때 스타일을 표시하는 일부 라이브러리를 사용할 수 있습니다 ...


요소에 title속성 이있는 경우 기본 툴팁을 억제 할 수 있다고 생각하지 않습니다 . 따라서 자체 툴팁 구현을 설정하는 경우 data-tip대신 다른 속성 (예 :)을 사용하는 것이 좋습니다 title.
Jukka K. Korpela

1
당신이 할 수있는 경우에 당신은 이벤트에 지우 title 속성에 연결 후
poncha

1
나는 당신의 요점을 알지만, 기본 툴팁 스타일링에 관한 것이 아닙니다. DOM을 수정하여 피하는 것입니다.
Jukka K. Korpela 10

@ JukkaK.Korpela yep, 그리고 나는 첫 번째 문장에서 불가능하다고 말했다.)
poncha

title 속성을 사용하고 나중에 지우는 이점은 사용자가 JavaScript를 비활성화 한 경우에도 툴팁을 계속 사용할 수 있다는 것입니다.
JJJ

2

기본 브라우저 툴팁의 스타일을 지정할 수 없습니다. 그러나 자바 스크립트를 사용하여 나만의 맞춤 HTML 툴팁을 만들 수 있습니다.


-1
a[title="My site"] {
    color: red;
}

예를 들어 추가하려는 모든 속성에서도 작동합니다.

HTML

<div class="my_class" anything="whatever">My Stuff</div>

CSS

.my_class[anything="whatever"] {
    color: red;
}

http://jsfiddle.net/vpYWE/1/ 에서 작동하는지 확인하십시오.


14
지정된 제목으로 요소의 스타일을 지정합니다. 브라우저에서 표시하는 툴팁 제목이 아닌
Rowland Shaw

1
또한 anything유효한 HTML 속성이 아닙니다. 사용자 정의 속성의 경우 속성을 사용하십시오 data-.
user4642212 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.