2016-09-12 11 views
11

Praca nad projektem korzystającym z biblioteki komponentów Material-UI i otrzymałem żądanie niestandardowego koloru wskaźnika przycisku znajdującego się poza normalną konwencją motywu MUI.Czy jest możliwe dodanie niestandardowego koloru hover do podnoszonych przycisków?

Znalazłem odpowiedni blok kodu w źródle podniebionego przycisku, https://github.com/callemall/material-ui/blob/master/src/RaisedButton/RaisedButton.js#L98. Ustawienie niestandardowej etykiety Kolor zmienia stan wskaźnika myszy, ale nadal nie spełnia mojej aktualnej potrzeby, aby przycisk najechał na kolor inny niż kolor etykiety.

overlay: { 
    height: buttonHeight, 
    borderRadius: borderRadius, 
    backgroundColor: (state.keyboardFocused || state.hovered) && !disabled && 
    fade(labelColor, amount), 
    transition: transitions.easeOut(), 
    top: 0, 
}, 

Czy istnieje sposób na przesłonięcie koloru tła nakładki w inny sposób, aby można było użyć oddzielnego niestandardowego koloru?

Aby wyjaśnić, chcę to zrobić, korzystając z wbudowanej stylizacji lub poprzez pominięcie podpory na przycisku. Dołączanie klasy i używanie zewnętrznego CSS nie jest opcją.

+0

Kiedy mówisz „nie spełnia moje bieżące potrzeby” , czy możesz wyjaśnić, jakie są dokładnie twoje potrzeby? Czy chcesz, aby kolor etykiety i kolor kursora były różne? – lawls544

+1

Tak, kolor etykiety musi różnić się od koloru tła przycisku po najechaniu myszą. – embolden

Odpowiedz

0

udało mi się go rozwiązać dając className rekwizyt do RaisedButton komponentu i określając :hover atrybut CSS z dyrektywą !important.

W swojej części:

... 
<RaisedButton className="my-button" /> 
... 

W swojej CSS:

.my-button :hover { 
    background-color: blue !important; 
} 
+0

Doceniam, że poświęciłeś czas na odpowiedź. Dokonałem edycji oryginalnego pytania, aby wyjaśnić metodę, w której próbuję rozwiązać problem. Wierzę, że ta metoda technicznie działałaby, ale staram się to osiągnąć, stosując tę ​​samą konwencję, co reszta projektu, która ustawiałaby stylizację w linii lub przesłoniłaby podpórkę na komponencie. – embolden

+0

Ostatnio pracowałem z materiałem-ui i nie byliśmy w stanie zmienić stylów z jednego punktu. Czasami nadpisujemy je niestandardowym motywem, czasami używaliśmy wbudowanych stylów, a w ostatniej opcji użyliśmy tej metody. Materialny interfejs użytkownika nie jest elastyczny, jeśli chodzi o zmianę stylu. – kosker

-1

można użyć jQuery do klasy i po prostu usunąć addClass

jQuery(document).ready(function($){ 
    $('#test').hover(
    function(){ $(this).addClass('redclass') }, 
    function(){ $(this).removeClass('overlay') } 
    ) 
}); 

„# # # test reprezentują identyfikator i .test reprezentuje klasę elementu, którym próbujesz manipulować.

0

użyłem window.eventlistener do zdarzenia kliknij aby zastąpić moje nakładek

window.addEventListener("load",addClickHandlers,false); 
function addClickHandlers(event) { 
var someElement = document.getElementById("an_id"); 
someElement.addEventListener("click",myClickHandler,false); 
} 

function myClickHandler(event) { 
... do stuff ... 
} 
0

Na podniesionym Przycisk ten prop hoverColor więc to będzie coś

<RaisedButton 
    label="Default" 
    hoverColor={"#00ff00"} 
/> 
0

W funkcji render RaisedButton Obiekt stylu overlay jest zastępowany przez propor overlayStyle. (Odpowiedni fragment znajduje się poniżej).

<div 
    ref="overlay" 
    style={prepareStyles(Object.assign(styles.overlay, overlayStyle))} 
> 
    {enhancedButtonChildren} 
</div> 

Oznacza to, że można ustawić kolor tła, ustawiając backgroundColor z overlayStyle podpory. Myślę, że drugim elementem układanki jest ustawienie zdarzeń onMouseLeave i onMouseEnter i samodzielne zarządzanie bieżącym kolorem tła poprzez zmianę koloru za każdym razem, gdy mysz wchodzi lub opuszcza obszar przycisku.

Niestety, wygląda na to, że zdarzenia skupienia klawiatury nie mają widocznego haka w interfejsie API MaterialUI, więc nie będziesz w stanie obsłużyć tego przypadku bez modyfikowania biblioteki.

To może być coś, co warto przesłać do biblioteki MaterialUI, jeśli przejdziesz przez modyfikację biblioteki.

0

Dość proste rozwiązanie:

.yourButtonClass{ 
    color: aColor !important; 
    &>span{ 
    color: anotherColor; 
    } 
} 

zastosować kolor do przycisku, który zmienia etykietę i kolor nakładki, a następnie umieścić etykietę w rozpiętości, dla których można określić niezależnie od koloru chcesz tekst być. ten sposób swoją tło, etykieta i nakładki mogą być różne kolory :)

może być także napisany w atrybucie style odpowiednich tagów:

<md-button class="md-raised" style="color: aColor !important"> 
    <span style="color: anotherColor">yourLabel</span> 
</md-button> 
Powiązane problemy