2014-12-09 3 views
5

목표는 다음과 같습니다. title 속성이 비어 있지 않은지 확인하십시오. 그것이 없으면이 제목 속성의 값과 하이픈을 더해야합니다. 반면 title 속성이 비어 있으면 "-"을 전혀 추가하지 않아야합니다.CSS 제목 속성이 비어 있지 않고 내용이 추가되어 있는지 확인하십시오.

여기에 내 현재 CSS 코드 :

div:hover::before{content:attr(title):not(attr(title)="") " - ";} 

하지만 예상대로 작동하지 않습니다.

<div title="My username">some text</div> 

이 호버에 다음과 같은 표시됩니다 : 예를 들어

내 이름 - 텍스트

그러나 경우가 :

<div title="">some text</div> 

또는 (DIV에는 제목) :

<div>some text</div> 

는 호버에 표시가 없어야한다 :

텍스트

그것을 해결할 수 있습니까?

답변

5

attr() 함수와 함께 속성 선택기를 사용하여이를 수행 할 수 있습니다. attr() 함수는 단순히 주어진 속성의 값을 가져옵니다 - 모든 조건문 자체를 지원하지는 않습니다.

제목 속성이 모두 부족하고 빈 제목 속성을 모두 설명하기 위해 [title=""]:not([title])을 사용합니다. 첫 번째 규칙에 [title]을 포함하여 :not() 부분을 생략 할 수는 있지만 인터넷에서 작동하지 않습니다. 죄송합니다. 크롬에서 작동하지 않습니다.

div:hover::before { 
 
    content: attr(title) " - "; 
 
} 
 

 
div[title=""]:hover::before, div:not([title]):hover::before { 
 
    content: none; 
 
}
<div title="My username">some text</div> 
 
<div title="">some text</div> 
 
<div>some text</div>

+1

이 CSS의 아주 멋진 사용,하지만 난 자바 스크립트가 더 적합한 솔루션이라고 생각; 이것은 스타일링의 범위를 넘어서기 때문에 & 나는 그것들을 분리하여 유지하는 것이 최선이라고 생각합니다. –

+0

@ deraad : 나는 이것이 스타일의 범위를 벗어나는 방법을 모르겠습니다. ': hover'는 CSS의 등장으로 속성 선택자가 거의 오랫동안 존재했으며, 생성 된 내용은 이와 같은 상황을 위해 특별히 설계되었습니다. 제작자가 함께 사용하지 않아야하는 이유는 없습니다. 어쩌면'title' 속성이'data-username'이나 마크 업에 더 적합한 것으로 바뀐 것일 수도 있습니다 ... – BoltClock

+1

사실,이 방법으로 사용할 수 있다는 것이 맞습니다. 내 의견은 올바른 장소에 물건을 보관하는 것과 관련이 있습니다. 예를 들어 프로젝트가 성장하고 클릭, 마우스 오버, 마우스 아웃 등과 같은 많은 이벤트가있을 때 CSS만으로는 만족할 수 없습니다. 이벤트 동작이 javascript 또는 CSS로 작성되었는지, 특히 팀에서 작업하는 경우 혼동을 일으킬 수 있습니다. 내가 과거에 실행 한 그 무언가, 그래서 내 의견은 정말로, 분명히 그럼에도 불구하고 실제로 여전히 유효합니다. –

관련 문제