Lekcja 6: Manipulacja CSS w jQuery

jQuery znacznie upraszcza pracę ze stylami CSS elementów HTML. Pozwala na łatwe odczytywanie bieżących stylów, dodawanie, usuwanie i przełączanie klas CSS oraz bezpośrednie ustawianie konkretnych właściwości CSS dla wybranych elementów. To fundamentalne narzędzie do dynamicznego zmieniania wyglądu strony.

Praca z Klasami CSS

Manipulowanie klasami CSS jest zazwyczaj preferowanym sposobem zmiany wyglądu elementów, ponieważ oddziela style (CSS) od logiki (JavaScript).

Bezpośrednia Manipulacja Stylami CSS

jQuery pozwala również na bezpośrednie odczytywanie i ustawianie konkretnych właściwości CSS. Jest to przydatne do drobnych, dynamicznych zmian, ale dla większych zmian wyglądu zaleca się używanie klas.

Wymiary i Pozycja Elementów

jQuery dostarcza metod do łatwego pobierania i ustawiania wymiarów oraz pozycji elementów na stronie.

Zadanie praktyczne

Stwórz plik HTML z:

Używając jQuery:

  1. Po kliknięciu "zmien-kolor", zmień kolor tła diva "box" na jasnoniebieski (lightblue) używając .css().
  2. Po kliknięciu "przelacz-klase", przełączaj klasę "pogrubiony" na divie "box". Dodaj styl CSS dla klasy .pogrubiony { font-weight: bold; border: 2px solid red; }.
  3. Po kliknięciu "pokaz-wymiary", wyświetl w konsoli szerokość (width()), szerokość zewnętrzną (outerWidth()) i pozycję (offset()) diva "box".
  4. Dodaj kod, który po załadowaniu strony sprawdzi, czy div "box" ma klasę "startowa". Jeśli tak, wyświetli komunikat w konsoli.
Pokaż rozwiązanie

HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Test Manipulacji CSS</title>
    <style>
        #box {
            padding: 20px;
            border: 1px solid black;
            margin: 10px;
            background-color: lightgray;
        }
        .pogrubiony {
            font-weight: bold;
            border: 2px solid red;
        }
    </style>
</head>
<body>
    <button id="zmien-kolor">Zmień Kolor Tła</button>
    <button id="przelacz-klase">Przełącz Pogrubienie/Ramkę</button>
    <button id="pokaz-wymiary">Pokaż Wymiary/Pozycję</button>

    <div id="box" class="startowa">To jest testowy div.</div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(function() {
            // 4. Sprawdzenie klasy startowej
            if ($("#box").hasClass("startowa")) {
                console.log("Div #box ma klasę startową.");
            }

            // 1. Zmiana koloru tła
            $("#zmien-kolor").on("click", function() {
                $("#box").css("background-color", "lightblue");
                console.log("Zmieniono kolor tła.");
            });

            // 2. Przełączanie klasy
            $("#przelacz-klase").on("click", function() {
                $("#box").toggleClass("pogrubiony");
                console.log("Przełączono klasę \'pogrubiony\'.");
            });

            // 3. Pokazywanie wymiarów i pozycji
            $("#pokaz-wymiary").on("click", function() {
                let box = $("#box");
                let szerokosc = box.width();
                let szerokoscZew = box.outerWidth();
                let pozycja = box.offset();
                console.log("--- Wymiary i Pozycja #box ---");
                console.log("Szerokość (width):", szerokosc);
                console.log("Szerokość zewnętrzna (outerWidth):", szerokoscZew);
                console.log("Pozycja (offset): Top:", pozycja.top, "Left:", pozycja.left);
            });
        });
    </script>
</body>
</html>

Zadanie do samodzielnego wykonania

Dodaj do HTML kilka paragrafów (<p>). Stwórz przycisk "Zwiększ Czcionkę".

Używając jQuery:

  1. Po kliknięciu przycisku "Zwiększ Czcionkę", pobierz aktualny rozmiar czcionki pierwszego paragrafu, przekonwertuj go na liczbę (usuwając \'px\'), zwiększ o 2 i ustaw nowy rozmiar czcionki (dodając z powrotem \'px\') dla wszystkich paragrafów.
  2. Dodaj kod, który po najechaniu myszką na dowolny paragraf doda mu klasę "hover", a po zjechaniu myszką usunie tę klasę. Zdefiniuj styl dla p.hover { background-color: yellow; }. (Wskazówka: użyj zdarzeń mouseenter i mouseleave lub metody .hover() - zostaną one omówione później, ale możesz spróbować ich użyć).

FAQ - Manipulacja CSS w jQuery

Co jest lepsze: zmiana stylów przez .css() czy przez klasy (.addClass()/.removeClass())?

Generalnie preferuje się manipulację klasami. Pozwala to utrzymać style w plikach CSS, co ułatwia zarządzanie i modyfikację wyglądu. Metoda .css() jest dobra do ustawiania pojedynczych, dynamicznie obliczanych wartości lub do szybkich testów, ale nadużywanie jej może prowadzić do mieszania logiki i prezentacji.

Czy .css() odczytuje style zdefiniowane w zewnętrznych plikach CSS?

Tak, .css(nazwaWlasciwosci) zwraca obliczoną wartość stylu dla danego elementu, biorąc pod uwagę wszystkie zastosowane reguły CSS (inline, wewnętrzne, zewnętrzne) oraz dziedziczenie.

Jak ustawić wiele klas za pomocą .addClass()?

Po prostu podaj nazwy klas jako jeden string, rozdzielając je spacjami: $("#element").addClass("klasa1 klasa2 klasa3");.

Jaka jest różnica między .offset() a .position()?

.offset() zwraca pozycję elementu względem całego dokumentu (lewego górnego rogu okna przeglądarki). .position() zwraca pozycję względem najbliższego pozycjonowanego przodka (elementu z position innym niż static). .position() jest przydatne do pozycjonowania elementów wewnątrz konkretnego kontenera.

Czy mogę animować zmiany CSS za pomocą jQuery?

Tak, jQuery posiada wbudowane metody do animacji, takie jak .animate(), które pozwalają płynnie zmieniać wartości numeryczne właściwości CSS (np. szerokość, wysokość, marginesy, przezroczystość). Zostanie to omówione w lekcji poświęconej efektom i animacjom.