2014-12-09 7 views
5

Moim celem jest: sprawdzenie, czy atrybut title nie jest pusty; jeśli tak nie jest, należy dodać wartość tego atrybutu tytułu plus myślnik. Z drugiej strony, jeśli atrybut title jest pusty, "-" nie powinno być w ogóle dodawane.Sprawdzanie atrybutu tytułu CSS, jeśli nie jest on pusty i dodaj treść

Tu jest mój bieżący kod CSS:

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

ale to nie działa zgodnie z oczekiwaniami.

Na przykład:

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

powinien być wyświetlany następujący przy aktywowaniu:

moja nazwa użytkownika - niektóre tekstu

Ale jeżeli:

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

lub (Bez tytułu na div):

<div>some text</div> 

następnie wyświetlacz przy aktywowaniu powinno być:

jakiś tekst

Czy można to naprawić?

Odpowiedz

5

Do tego celu można użyć selektorów atrybutu w połączeniu z funkcją attr(). Funkcja attr() po prostu chwyta wartość danego atrybutu - nie obsługuje żadnych instrukcji warunkowych.

Należy zauważyć, że używam [title=""] i :not([title]), aby uwzględnić zarówno puste atrybuty tytułu, jak i brak atrybutu title. Możesz pominąć część :not(), dodając do swojej pierwszej reguły [title], ale to nie działa w Internecie E-przepraszam, miałem na myśli, że nie działa w Chrome.

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

To jest bardzo fajne zastosowanie CSS, ale myślę, że JavaScript jest bardziej odpowiednie rozwiązanie; ponieważ wykracza to poza zakres stylizacji i myślę, że najlepiej będzie trzymać je oddzielnie. –

+0

@deraad: Nie widzę, jak to wykracza poza zakres stylizacji. ': hover' istnieje od zarania CSS, selektory atrybutów są prawie tak samo długie, a wygenerowana treść została zaprojektowana specjalnie dla takich sytuacji, między innymi. Nie ma powodu, dla którego autorzy powinni unikać używania ich razem. Może gdyby atrybut "title" został zmieniony na 'data-username' lub coś bardziej odpowiedniego dla znaczników ... – BoltClock

+1

Prawda, masz rację, że możesz go używać w ten sposób. Mój komentarz odnosi się bardziej do utrzymywania rzeczy w odpowiednich miejscach, na przykład gdy projekt rośnie i masz wiele zdarzeń, takich jak kliknięcia, zawijanie, mouseout itp., Których nie możesz zadowolić samym CSS. może się zdezorganizować i dezorientować, aby stwierdzić, czy zachowanie zdarzenia jest zapisane w javascript lub CSS, szczególnie jeśli pracujesz w zespole. Jest to coś, na co natknąłem się w przeszłości, więc tylko moja opinia naprawdę, oczywiście, że tak naprawdę nadal jest ważna. –