2013-02-21 10 views
10

Celem jest utworzenie elementu autouzupełniania JQuery, którego elementy listy mają niebieskie tło, gdy są one przesuwane lub ustawiane za pomocą klawiatury. Pole wyszukiwania na Facebooku ładnie to ładuje.Zmienianie koloru tła elementu autouzupełniania jQuery na podstawie stanu (przy użyciu CSS)

Każdy element <li> zawiera niestandardowy kod HTML zawinięty w <a>. Każdy z tych tagów <a> należy do klasy sbiAnchor. Generowanie niebieskim tle przy aktywowaniu można zrobić z powodzeniem stosując następujący CSS:

.ui-autocomplete a.ui-corner-all.sbiAnchor:hover{ 
    background: blue; 
} 

Ale w jaki sposób można zastosować ten sam niebieskie tło gdy klawisze użytkowników w górę/w dół listy autouzupełniania. Zmiana kodu CSS na NIE DZIAŁA:

.ui-autocomplete a.ui-corner-all.sbiAnchor:hover, .ui-autocomplete .ui-state-focus a.ui-corner-all.sbiAnchor{ 
    background: blue; 
} 

Jakie jest właściwe podejście? Pamiętaj, że ten niebieski efekt tła powinien dotyczyć tylko jednego autouzupełniania na mojej stronie (kilka z nich istnieje). Właśnie dlatego używam sbiAnchor do rozróżniania jego elementów od elementów innych autouzupełniania. Pozostałe autouzupełniania powinny zachować domyślne zachowanie, więc selektory CSS nie powinny być zbyt szerokie.

Odpowiedz

1

Pola wprowadzania zamiast znaczników zakotwiczeń utrzymują ostrość. To powinno działać.

.ui-autocomplete-input:focus, .ui-autocomplete a.ui-corner-all.sbiAnchor:hover { 
    background: blue; 
} 
0

Zajęło to trochę czasu, aby zrozumieć to, ale prawidłowy kod CSS:

.ui-menu .ui-menu-item a.sbiAnchor.ui-state-hover{ 
    background: blue; 
} 

To zabija dwie pieczenie na jednym ogniu, zapewniając niebieskim tłem dla obu najechaniu i wybór poprzez górę/naciśnięcia klawiszy. Element autouzupełniania jQuery najwyraźniej traktuje klawisze strzałek w górę/w dół jako akcję "najeżdżania", a nie selekcję czy fokus.

11

css hover stać utworzenia tej klasy CSS enter image description here

można go override. na przykład:

.ui-state-focus { 
background: none !important; 
background-color: blue !important; 
border: none !important;} 
+0

1+ dzięki' .ui-state-focus 'działa –

+0

Heads up: przesłonięcie tej klasy nie działa z t! ważna flaga dla mnie – ABabin

6

ten zmienił kolor aktywowania dla mnie.

.ui-menu-item .ui-menu-item-wrapper:hover 
{ 
    border: none !important; 
    background-color: #your-color; 
} 
3

Zmieniłem kolor przez:

.ui-state-active, 
.ui-widget-content .ui-state-active, 
.ui-widget-header .ui-state-active, 
a.ui-button:active, 
.ui-button:active, 
.ui-button.ui-state-active:hover { 
} 
+2

To jest odpowiedni styl w jquery-ui.css iz tą jedyną właściwą odpowiedzią. Wszystkie pozostałe odpowiedzi mają skutki uboczne. – Anja

+1

To powinna być właściwa odpowiedź! Dzięki @Mehdi – Cody

+0

Tak! to jest właściwa odpowiedź, dzięki – matQ

0

taki stary temat, ale rozwiązania powyżej nie pracowali dla mnie. Jeśli bym poszedł prosto do przodu, byłbym o wiele szybciej w znalezieniu rozwiązania:

nadpisywania w niestandardowych stylów dodaje styl jQuery ui.css

.ui-autocomplete { 
      border-radius: 0.25rem; 
      background-color: #eceff1; 
      padding: 0 0.6rem; 
      font-family: 'ptmono'; 
     .ui-menu-item { 
      border: 1px solid #eceff1; 
      border-radius: 0.25rem; 
      .ui-state-active, 
    .ui-widget-content .ui-state-active, 
    .ui-widget-header .ui-state-active, 
    a.ui-button:active, 
    .ui-button:active, 
    .ui-button.ui-state-active:hover { 
      background-color: #eceff1; 
      border-color: #eceff1; 
      color: #0d47a1; 
      } 
     } 
    } 

Zamiast tła: none! ważne, możesz ustawić tło w .ui-menu-item oraz w aktywnej klasie. Dodatkowo zamiast zapisywania obramowania: none! Important nadpisujesz w obu klasach kolor obramowania z kolorem tła, co zapobiega zmianie wysokości i efektowi chybotania.

+0

cholera, ta wtyczka jest najgorsza na świecie, aby dostosować. Nie zapomnij usunąć marginesu: -1px na ui-state-active, jest bezużyteczny i wywołuje dziwne zachowania – Ben

-2

tutaj jest prawidłowa odpowiedź: wystarczy zmienić "szary" przez kolor chcesz

.ui-state-active, 
 
.ui-widget-content .ui-state-active, 
 
.ui-widget-header .ui-state-active, 
 
a.ui-button:active, 
 
.ui-button:active, 
 
.ui-button.ui-state-active:hover { 
 
\t border: none!important; 
 
\t background: grey; 
 
\t font-weight: normal; 
 
\t color: #ffffff; 
 
}

+0

Nie sądzisz * "tu jest poprawna odpowiedź" * Czy odrobina arogancji? Z pewnością, gdy to pytanie ma już bardzo przeczącą odpowiedź, podczas gdy twoja niepotrzebnie powtarza '.ui-state-active' i' ui-button: active', również potencjalnie wpływające na więcej niż tylko elementy autouzupełniania wymienione w pytaniu ... – trincot

+0

Cóż Przepraszam, jeśli brałeś to w ten sposób, nie chciałem być arogancki ... w rzeczywistości próbowałem odpowiedzi, ale nie zadziałały one dla mnie, więc napisałem szybko kod, który zadziałał dla mnie bez myślenie o komentarzu. – Wail

Powiązane problemy