Artykuły:

  • data publikacji: 23.04.2010

    CSS Scaffold – czyli CSS po ludzku

    kategoria: Skrypty server-side, XHTML/CSS autor: palmiak

    scaffold

    Arkusze stylu pisuję dość często - taka praca. W sumie nawet to przyjemne. Kłopoty pojawiają się gdy zaglądam po dłużym okresie czasu i dochodzę do wniosku, że jestem zupełnie zagubiony i po prostu dopisuję jakiegoś ida na końcu. I tak się pojawia bałagan. Próbowałem pisać style wieloma metodami, niestety problem w pewnym momencie zawsze się pojawiał, aż do odkrycia CSS Scaffold.

    CSS Scaffold, jak opisuje autor, jest CSSowym frameworkiem napisanym w PHP. Tyle, że w przeciwieństwie do innych CSSowych frameworków (960, Blueprint) zmiast ograniczać rozszerza możliwości styli. Brzmi fajnie? Ba - jest fajne, jest po prostu bardzo fajne.

    Wymagania i instalacja

    Jedyne czego będziemy potrzebować to PHP 5+.

    Instalacja może być dla niektórych troszkę upierdliwa. W sumie jednak ogranicza się do pobrania najnowszej wersji ze strony, rozpakowania oraz przekopiowania z archiwum katalogu (katalogu, a nie zawartości) scaffold do katalogu w którym będziemy trzymać arkusze stylu. Czasem(zależne od serwera) trzeba katalogom cache i logs nadać prawa 777.

    W praktyce układ katalogów powinien wyglądać następująco:

    CSS Scaffold - czyli CSS po ludzku

    Osoby które chcą, żeby adresy do CSSów wyglądały normalnie muszą jeszcze w katalogu w którym trzymają CSS utworzyć plik .htaccess a w nim wkleić

     <IfModule mod_rewrite.c>
    RewriteEngine   on
    RewriteCond             %{REQUEST_FILENAME}             -f
    RewriteCond     %{REQUEST_URI}                  \.css$
    RewriteRule     ^(.+)$                                  scaffold/index.php?f=%{REQUEST_URI}&%{QUERY_STRING}
    </IfModule>

    Żeby zrobić próbę czy wszystko działa należy w naszym katalogu z CSSami (dla przykładu będzie to katalog css) utworzyć plik test.css a w nim napisać (zagnieżdzenie jest poprawne - dojdziemy do tego):

    body {
            color:red;

                    a {
                            color:blue;
                    }
    }

    i wywołać w przeglądarce albo adres_strony/css/scaffold/index.php?f=css/test.css albo, jeżeli użyliśmy regułki w .htaccess, adres_strony/css/test.css. Jeżeli przywita Was komunikat, że nie może znaleźć pliku pomajstrujcie przy ścieżce.

    Jeżeli jednak wszystko zadziałało ok to powinniście zobaczyć następujący styl:

    body
    {
            color: red;
    }

    body a
    {
            color: blue;
    }

    Bazując na naszym obrazku i zakładając, że nasz adres to test.pl ścieżką do stylu będzie albo http://test.pl/css/scaffold/index.php?f=css/style.css lub http://test.pl/css/style.css.

    Jeżeli wszystko działa na naszej stronie wklejamy:

    <link rel="stylesheet" href="css/scaffold/index.php?f=css/style.css" type="text/css" />
     

    lub

    <link rel="stylesheet" href="css/style.css" type="text/css" />
     

    Jeżeli wolicie możecie użyć ścieżek absolutnych.

    Na koniec drobne ale. Jeżeli nie używacie .htaccess i planujecie używać pierwszej wersji to w przypadku gdy nasza strona znajduje się na tym test.pl w katalogu moja_stronka to ścieżka do stylu będzie wyglądać następująco http://test.pl/moja_stronka/css/scaffold/index.php?f=moja_stronka/css/style.css

    Zagnieżdżenia

    Jak już zauważyliście w poprzednim przykładzie możemy zagnieżdżać kolejne regułki. Dla przykładu kod na listę nieuporządkowaną z linkami i bez kropek.

    ul {
            list-style:none;

            li {
                    padding: 5px;

                    a {
                            text-decoration:none;

                            &:hover {
                                    font-weight:bold;
                            }
                    }

            }
    }

    wypluje to nam oczywiście:

    ul
    {
            list-style: none;
    }

    ul li
    {
            padding: 5px;
    }

    ul li a
    {
            text-decoration: none;
    }

    ul li a:hover
    {
            font-weight: bold;
    }

    Stałe

    To jest jedna z tych funkcji za które bardzo polubiłem CSS Scaffold. Bardzo często się zdarza, że klient sobie wymyśli, że kolor czcionki, który to użyliśmy w wielu miejscach jest jednak do bani i chce inny. Znajdź/zastąp i jedziemy, ale tu mozna prościej. Jeżeli używamy jednego koloru to zdefinijmy go jako stałą i najwyżej poprawiajmy w jednym miejscu.

    Wystarczy w naszym CSS napisać:

    @constants{
    kolor_tekstu: #ccc;
    kolor_ramki: red;
    }

    a następnie gdy chcemy skorzystać:

    body {
    color:$kolor_tekstu;
    border:1px solid $kolor_ramki;
    }
     

    Mixins

    Czasem zamiast jednego koloru byśmy chcieli wstawiać pewne stałe fragmenty kodu. Nic trudnego:

    =test {
    color:red;
    font-weight:bold;
    }

    Żeby teraz ten kod wkleić wystarczy do jakiejś naszej regułki dopisać:

    body {
    +test;
    }
     

    W rezultacie otrzymamy:

    body
    {
            color: red;
            font-weight: bold;
    }

    Prawdziwa siła tkwi jednak w mozliwości parametryzacji. Jeżeli na stronie wszystkie nasze bordery są tego samego stylu i wielkości a tylko kolor się różni to wystarczy nam:

    =ramka($kolor) {
            border:1px solid $kolor;
    }

    A wywołamy to następująco:

    #test1 {
            +ramka(red);
    }
     
    #test2 {
            +ramka(blue);
    }

    W rezultacie otrzymamy:

    #test1
    {
            border: 1px solid red;
    }

    #test2
    {
            border: 1px solid blue;
    }

    Możlwe jest jeszcze ustalenie wartości domyślnej:

    =ramka($kolor=black) {
            border:1px solid $kolor;
    }

    Wtedy wywołanie bez parametru spowoduje automatycnze użycie czarnego.

    Liczenie

    Ta funkcjonalność jest może troszkę mniej szpanerska, ale czasem bardzo przydatna. Jeżeli mamy div o szerokości 100px i zaczynamy dodawać padding to musimy ciągle poprawiać szerokość (width+padding=100). Scaffold policzy to za nas:

    div {
    padding:0 5px;
    width:calc(100-2*5)px;
    }

    Nic nie szkodzi nam na przeszkodzie, żeby użyć w środku stałych, czy użyć parametru.

    Jeżeli...

    Na koniec jeszcze jedna ciekawa zabawka czyli instrukcja if. Piszemy mixin (jak ktoś ma pomysł na odpowiednik to bardzo zachęcam) o nazwie default_div który ma tam sobie jakieś właściwości oraz parametr round, który przyjmuje true lub false. W zależności od round doklejamy kilka regułek lub nie:

    =default_div($round=false) {
            padding:10px;
            margin:2px;
     
            @if($round === true) {
                    +border-radius(5px);
            }
    }

    border-radius to już taki gotowy mixin, który zajmuje się zaokrągleniami.

    Cache

    Kiedy już skończymy tworzenie naszego stylu pozostaje nam włączyć cache (bo po ciągle ma być generowany na nowo ten sam plik) - żeby to zrobić wystarczy otworzyć plik config.php i przestawić define('SCAFFOLD_PRODUCTION',false); na define('SCAFFOLD_PRODUCTION',true);.

    Czy to wszystko?

    Nie. Oczywiście, że nie. CSS Scaffold posiada także sporo ciekawych opcji a'propos gridów, wiele ciekawych mixinów, flagi, zastępowanie tekstu obrazkami (bardzo fajnie zrobiona funkcja) oraz wiele innych. Do tego mamy jeszcze możliwość dopisywania własnych rzeczy.

    Oczywiście trzeba sobie zdawać sprawę, że takie podejście do styli ma swoje wady - każdy nasz plik ze stylem jest obrabiany pzez PHP, wystarczy, że admin nam zrobi prezent w postaci niespodziewanego upgrade'u do wersji w której CSS Scaffold przestanie działać.

    Dodatkowo osoba, której przekażemy taką stronę może się zdziwić jak zobaczy co jest w arkuszu.

    Zawsze też istnieje możliwość olania projektu przez autora. W obecnej chwili wszystko zdaje się działać stabilnie jednak, jak już wspominałem, przy nowych wersjach PHP teoretycznie mogą się zacząć dziać cuda.

    Jest to też pewne dodatkowe obciążenie po stronie serwera, jednak sprawnie działający cache zapewnie rozwiązuje ten problem (przyznaję, iż nie testowałem na stronie o dużym ruchu).

    Mimo wszystko polecam spróbować - dla mnie jest to ogromne ułatwienia.

    Udostępnij ten artykuł:
    • Print
    • Digg
    • del.icio.us
    • Facebook
    • Mixx
    • Google Bookmarks
    • Gwar
    • RSS
    • Technorati
    • Twitter
    • Wykop

  • 12 Responses to “CSS Scaffold – czyli CSS po ludzku”

    1. [...] This post was mentioned on Twitter by vivee.info. vivee.info said: CSS Scaffold – czyli CSS po ludzku http://bit.ly/cmDgLW [...]

    2. Bardzo ciekawe podejście, swoją drogą miałem kiedyś pomysł, żeby samemu coś takiego stworzyć, ale martwi mnie ten akapit o "porzuceniu projektu" przez autora. Co masz na myśli mówiąc, że w różnych wersjach PHP to może działać inaczej?

      • palmiak pisze:

        Wystarczy popatrzeć ile rzeczy się zaczęło sypać przy php 5.3. Ta uwaga w sumie tyczy się każdego projektu, którego nie ma wokół siebie dużego community. Mam nadzieję jednak, że tutaj nie będzie takich problemów.

        Co do porzucenia projektu to stresuje mnie troszkę fakt, że ostatni update jest z lutego. Z drugiej strony może po prostu projekt osiągnął już wszystko co miał osiągnąć (a wg. mnie tak – moduły to dodatki, więc powinny być rozwijane osobno) i kolejne update zobaczymy przy np php 6.

        • Na moim hostingu cały czas stoi PHP 5.2.13, więc chyba nie będzie problemu, tyle, że twórcy PHP tyle naobiecywali w związku z przestrzeniami nazw a jak na razie to średnio działa i część projektów odcina się od wcześniejszych wersji tak jak wcześniej odcinała się przy PHP 4. W każdym razie powiem jeszcze raz że projekt jest bardzo ciekawy i na pewno wdrożę go w którymś z moich projektów. ;]

    3. [...] znajdziecie na blogu Vivee – to tam po raz pierwszy usłyszałem o tym. ;] | Strona projektu | Artykuł na blogu Vivee [...]

    4. piecuch pisze:

      czy na zrzucie ekranowym (katalogu) jest ubuntu? piszesz w nim strony?

    5. palmiak pisze:

      Fedora, ale skóra z ubuntu. I tak – piszę na Fedorce strony.

    6. piecuch pisze:

      bawiłem się linuxem (ubuntu) i ciągnie mnie do niego ale dobija mnie wygląd czcionek na stronach, wiem że nie tworzy się stron tylko pod windows ale męczy mnie że ustalam wygląd czcionki itp. otwieram pod ubuntu i jest ok, otwieram pod windows czcionka np. za mała. W jakim programie piszesz ew. jaki pod linuxa polecasz, jesli moge spytać (trochę odbiegłem od tematu postu)?

    7. palmiak pisze:

      Przyznam, że nigdy nie zauważyłem większych problemów z fontami. Czasem się troszkę różnią, ale nie było to nigdy nic strasznego.

      Co do edytorów to joe (do poprawek na szybko), gedit (do średnich rzeczy) i eclipse (do całych projektów).

    8. Szymon pisze:

      Świetny artykuł! Idę potestować narzędzie w praktyce.

    9. Mateusz Nowak pisze:

      Odnośnie sypania się, zawsze można robić 1 backup wygenerowanego css co miesiąc, przecież po co w ogóle to ma być generowane co chwilę :) ? Raz wystarczy i można zostawić jako zwykły .css.

    10. lukasz pisze:

      To samo mozna osiagnac korzystajac z less css i wcale nie trzeba do tego php, mozna kompilowac na komputerze pliki less do css i wgrywac na serwer albo za pomoca js kompilowac w locie po stronie klienta.

    Leave a Reply

Komentarze

Kategorie

Top 10

  • CMSy Artykuły dotyczące różnego rodzaju systemów zarządzania treścią CMS.
  • Flash Podstawowe informacje pomocne przy tworzeniu animacji w Adobe Flash.
  • Fotografia Samouczki dotyczące nie tylko robienia zdjęć ale też ich cyfrowej obróbki.
  • Grafika Ogólnie pojęta grafika komputerowa, od inspiracji, po tworzenie layoutów oraz mniejszych form graficznych.
  • Inne tutoriale wordpressowe Wszystkie inne zagadnienia dotyczące WordPressa.
  • Inspiracje Inspirujące materiały graficzne z dziedziny projektowania stron www, projektów DTP, digital painting, itp.
  • Obróbka zdjęć Techniki retuszu fotografii cyfrowych.
  • Rysunek Tworzenie rysowanych ilustracji w Adobe Photoshop.
  • Skóry do Wordpressa Darmowe oraz płatne – najlepsze skóry do WordPressa.
  • Skrypty client-side
  • Skrypty server-side
  • Tutoriale
  • Webdesign Tutoriale z zakresu projektowania stron www i grafiki użytkowej na rzecz internetu.
  • Wieczór z Open Source
  • Wordpress Ulubieniec naszej publiczności CMS WordPress: nowości, tricki, wtyczki, skóry i wszystko to co może przydać się przy korzystaniu z tego systemu.
  • Wtyczki do Wordpressa Recenzje oraz instrukcje najbardziej popularnych i najbardziej niezbędnych pluginów do WordPressa.
  • XHTML/CSS Ciekawostki z dziedziny kodowania stron www: XHTML, CSS, jQuery.

Najnowsze newsy

Wieczór z Open Source 2010

Jak co roku WSINF organizuje konferencję Wieczór z Open Source.
Chciałbym zaprosić was na tegoroczna konferencję Wieczór z Open Source 2010! Czytaj dalej

Grafart.org i WACOM zapraszają na konkursy!

Witam!

Myślę, że czas najwyższy nadmienić, że za niedługi czas zostanie zorganizowany pierwszy z trzech konkursów, w których główną nagrodą będą tablety firmy WACOM!
Za miejsca drugie oraz trzecie nagrodami będą kubki i koszulki firmy WACOM oraz magazyny graficzne PSD PHOTOSHOP oraz COMPUTERARTS.
Czytaj dalej

Zapraszamy na forum graficzne Graffika.pl

Każda osoba interesująca się grafiką komputerową ma czasami ochotę porozmawiać o swoich pracach, posłuchać rad, krytyki i pochwał innych osób. Idealnym miejscem na realizowanie takich potrzeb jest forum graficzne Graffika.pl.
Czytaj dalej

Polecane strony

  • No bookmarks avaliable.