Stylování prvního a posledního potomka v CSS

Kapitoly:

 

Stylování prvního potomka (třeba v ul li seznamu) je velmi jednoduché:

ul li:first-child { styly... }

first-child je funkční již od verze CSS2. last-child je funkční až od verze CSS3:

ul li:last-child { styly... }

 

Použití třídy class (#class)

Mnohem jednodušší je ale přidat k položce li nějaký class už v HTML - př.:

<li class="treti">Třetí položka seznamu</a>

a pak ho nastylovat v CSS takto: 

.treti { styly... }

nebo takto:

ul li.treti { styly... }

případně takto:

li.treti { styly... }

 

Kombinování třídy s first-child a last-child (#kombinovani)

Výhodou řešení při použití class je možnost nastylovat nejenom první a poslední položku, ale klidně i nějkaou mezi nimi - třetí, prostřední, atd... První a poslední položku tedy můžeme stylovat pomocí child a ostatním nastavit třídy class:

<ul>
<li>První</li>
<li class="druhy">Druhý</li>
<li class="treti">Třetí</li>
<li>Čtvrtý</li>
</ul>

CSS by tedy vypadalo nějak takhle:

 

ul li:first-child { styly... }
ul li.druhy { styly... }
ul li.treti { styly... }
ul li:last-child { styly... }

 

Použití pouze tříd class (#jen-class)

Mnohem spolehlivější je však přidat třídy všem položkám a nespoléhat se na first-child a last-child. HTML tedy bude vypadat:


<ul>
<li class="prvni">První</li>
<li class="druhy">Druhý</li>
<li class="treti">Třetí</li>
<li class="ctvrty">Čtvrtý</li>
</ul>

Potom můžeme libovolně stylovat v CSS:

ul li.prvni { styly... }
ul li.druhy { styly... }
ul li.treti { styly... }
ul li.ctvrty { styly... }

Případně jednodušeji bez definice, že se stylování týká pouze seznamu UL LI:

.prvni { styly... }
.druhy { styly... }
.treti { styly... }
.ctvrty { styly... }

Závěrem chci říct, že tam, kde můžete zasahovat do HTML, raději používejte třídy class. Protože starší explorery neznají first-child, ani last-child. 

Webový server na Debianu 2. díl – FTP server

Instalace

Pro instalaci FTP serveru se připojíme k terminálu (třeba pomocí SSH) a zadáme tento příkaz:

sudo aptitude install vsftpd

Po instalaci je třeba FTP řádně nakonfigurovat, použijeme tento příkaz:

sudo nano /etc/vsftpd.conf

Tímto příkazem otevřeme konfigurační soubor našeho FTP. Cesta k tomuto souboru se může lišit dle používané distribuce a verze Linuxu. Doporučuji si ji zjistit ve Správci souborů.

V otevřeném souboru vyhledáme tento řádek a změníme na NO:

anonymous_enable=NO

 

Restartování FTP serveru

Nyní jsme zakázali přístup na FTP anonymním uživatelům – těm bez přihlašovacího jména a hesla. Následně FTP proces restartujeme, aby se mohly provést změny.

sudo service vsftpd restart

 

Domovské složky

Po tomto restartu již FTP server funguje. Jako přihlašovací údaje lze použít jakéhokoliv uživatele v systému. Bude mít přístup do rootu serveru. To ale určitě nechceme. Pokud chceme nastavit uživateli jinou domovskou složku a o úroveň výše už nebude moci, provedeme tento příkaz:

usermod -d /var/www user

 

Tvorba nového uživatele

Tímto jsem uživateli user (červeně zvýrazněno) nastavili domovský adresář /var/www. To znamená, že do složky /var, ani do vyššího adresáře se nedostane. To je správně, jinak by totiž měl přístup ke konfiguračním souborům, apod…

Pokud chceme vytvořit nového uživatele:

  • se jménem ahoj
  • s heslem tajneheslo
  • a s domovský adresářem /var/www/slozka

použijeme tento příkaz:

sudo useradd -d /var/www/ ahoj
sudo passwd ahoj tajneheslo
sudo chown ahoj /var/www/slozka

Vytvořili jsme tedy nového uživatele se jménem ahoj, heslem tajneheslo a domovský adresářem /var/www/slozka. Tímto způsobem můžeme klidně vytvořit i více uživatelů.

Pro připojení se k serveru přes FTP použijeme nějakého FTP klienta. Výchozí port pro FTP je 21 a pro SFTP 22. Ukázka připojení k serveru pomocí FTP s uživatelem ahoj příkazem do prohlížeče:

ftp://ahoj:tajneheslo@ipadresa

Upload obrázků na server v PHP

Zde je jednoduchý skript, který Vám přiložený obrázek uloží do složky obrazky. Název souboru se pojmenovává podle timestampu (aktuální čas, den, měsíc, rok…) – trošku nevýhoda při kolizi. Nejdříve si vytvoříme HTML formulář a následně PHP skript:

<form method="post" enctype="multipart/form-data">
    <input type="file" name="obrazky[]" />
    <input type="submit" value="Nahrát na server!" />
</form>
 
<?php
 
// konfigurace
$uploadDir = 'obrazky'; // adresar, kam se maji nahrat obrazky (bez lomitka na konci)
$allowedExt = array('jpg', 'jpeg', 'png', 'gif'); // pole s povolenymi priponami
 
// zpracovani uploadu
if(isset($_FILES['obrazky']) && is_array($_FILES['obrazky']['name'])) {
 
    $counter = 0;
    $allowedExt = array_flip($allowedExt);
    foreach($_FILES['obrazky']['name'] as $klic => $nazev) { // zde poslané obrázky proměníme na proměnnou $nazev
        
        $nazev = htmlspecialchars($nazev, ENT_QUOTES);
        $fileName = basename(time() . ".png");
        $fileName = sprintf(time() . ".png", pathinfo($nazev, PATHINFO_EXTENSION));
        $tmpName = $_FILES['obrazky']['tmp_name'][$klic];
        $fileName = htmlspecialchars($fileName, ENT_QUOTES);
        
 
        // kontrola souboru
        if(
            !is_uploaded_file($tmpName)
            || !isset($allowedExt[strtolower(pathinfo($fileName, PATHINFO_EXTENSION))])
        ) {
            // neplatny soubor nebo pripona
            continue;
        }
 
        // presun souboru
        if(move_uploaded_file($tmpName, "{$uploadDir}".DIRECTORY_SEPARATOR."{$fileName}")) {
            ++$counter;
        }
 
    }
 
    if ($counter > 0)
    echo "<hr><p>Úspěšně byl nahrán {$counter} z ".sizeof($_FILES['obrazky']['name'])." obrázků, děkujeme!<br>
    <br>
    <b>Odkazy na obrázek</b>:<br>
    Klikatelný odkaz na obrázek:<br> 
    <a href='http://web.cz/$uploadDir/$fileName'  target='_blank'>http://web.cz/$uploadDir/$fileName</a><br>
    
    Kopírovatelný odkaz na obrázek:<br> 
    <input type='text' name='f1' id='url' size='100%' value='http://web.cz/$uploadDir/$fileName' onclick='this.select(); PS.clickUrl();'><br>
    </p>"."<br>";
    else
    echo "<hr><b><font color='red'>CHYBA: Nenahráli jste žádný obrázek, nebo má obrázek špatnou příponu!</font></b><br>"; 
}
 
?>

 

A teď, co je v jednotlivých proměnných (tyto proměnné jsou znázorněny v kódu):

$uploadDir= relativně umístěná složka, do které se mají obrázky uložit (bez lomítka na konci)

$allowedExt = povolené přípony obrázku, ostatní nebudou nahrány

$nazev = nezpracovaný název souboru (tak jak jej má uživatel ve svém PC)

$fileName = koncový název souboru, se kterým můžeš dále pracovat

 

Proměnná $fileName se pro jistotu na řádku 23 ještě kontroluje pomocí htmlspecialchars, to aby se nemohl provést nebezpečný XSS útok (více zde). Proměnnou $nazev také radši kontroluji (ačkoliv to není nutné).

Živá ukázka

Velmi podobnou ukázku najdete na foto.mujskript.cz

Ke stažení zde 

 

V článku používáme materiály a funkce, které najdete také na MůjSkript.cz!

Webový server na Debianu 1. díl – Apache, PHP a MySQL

Předpoklady pro tento článek:

  • Nainstalovaný server s Debianem
  • Vytvořený alespoň jeden uživatelský účet s root oprávněním
  • Povolený SSH přístup
  • Minimálně lokální IP adresa (lepší je veřejná)

Na server se tedy připojíme pomocí SSH. Slouží k tomu třeba program Putty pro Windows. Poté, co jsme se úspěšně připojili na server zadáme své uživatelské jméno a heslo. 

Instalace Apache2

Základem pro dobrý a funkční server je potřeba webový server. Pro Linux Debian použijeme Apache. Pod Windows jsou známé také ISS. V otevřeném terminálu (nebo SSH) zadáme příkaz

sudo aptitude install apache2

Potvrdíme enterem. Nyní nám na obrazovku naskákají různé řádky, to je správně. Počkáme až se instalace dokončí. Pokud po dokončení instalace zadáme do prohlížeče IP adresu našeho serveru, mělo by na nás vykouknout:

Instalace podpory PHP5

Zadáme další příkaz:

sudo aptitude install libapache2-mod-php5 php5

Tímto jsme nainstalovali podporu PHP ve verzi 5 a na serveru se tedy budou moci zpracovávat PHP skripty.

Instalace databáze MySQL

Příkazem nainstalujeme databázi MySQL nejnovější verze pro PHP5:

sudo aptitude install mysql-server php5-mysql

V dalším článku nainstalujeme FTP server a správce databází phpmyadmin. Těšte se!

Spriehľadnenie prvku pomocou CSS

Ak chceme nejaký prvok sčasti alebo úplne spriehľadniť (stále však má svoje miesto v stránke, na úplne zmiznutie slúži deklarácia display: none;) môžme použiť vlastnosť opacity.

Nasledujúce príklady deklarujú rovnakú priehľadnosť:

opacity: 0.5;
opacity: .5;

Príklady využitia vlastnosti opacity:

Často narazíme aj na situácie, kedy potrebujeme spriehľadniť iba dané pozadie a text zachovať čitateľný. Práve na takéto situácie je tu pre nás formát zadávania farby v tvare RGBA, pričom „R“ (red) je červená, „G“ (green) zelená, „B“ (blue) modrá, a „A“ (alpha) deklaruje priehľadnosť.

Ako môžte vidieť na nasledujúcej živej ukážke, v niektorých prípadoch je formát RGBA užitočnejší ako opacity:

Opacity vs. RGBA

Je pravda, že aplikovanie priehľadnosti na prvky našej webovej stránky môže umocniť pôžitok užívateľa, ale nie je vhodné, používať ju všade. Staršie prehliadače vlastnosť opacity nepodporujú a RGBA je pre nich tiež nepoznaná novinka. Snažte sa preto túto vlastnosť a formát farby používať tak, aby ste užívateľovi bez podpory prehliadača nezamedzili prehliadať obsah vašej webovej stránky.

Ak by ste niečomu nerozumeli alebo v článku našli chybu, pokojne prispejte do komentárov.

Slovníček v JavaScriptu

Pokud chcete na své stránky vložit jednoduchý slovníček, je možné použít JavaScript.

Předem upozorňuji, že se to ani zdaleka nebude podobat třeba slovníku od Googlu. Vkládání slov je velice jednoduché, každé slovo a překlad vždy na jeden řádek odděleno dvojtečkou v uvozovkách. Př. „jedna“ : „one“, 

Živá ukázka kompletního a funkčního slovníčku. Zkuste si do pole „Text“ zadat třeba slovo jedna, dva, pět, nebo třeba dvanáct. Poté stisknout tlačítko „Přeložit“. Pokud slovíčko existuje a je uložené v JavaScriptu, vypíše se jeho překlad (druhé uvozovky), pokud neexistuje, vypíše se ho pole hláška „Chybí překlad!“. Zdrojový kód:

HTML:

<form action="" onsubmit="preloz(this); return false">
    <h3>Online slovníček:</h3>
    <input type="text" onfocus='if(this.value=="Text") this.value=""' value="Text" name="prelozit">
    <button>Přeložit</button>
<input type="text" value="Výsledek" name="prelozeno">
</form>

JS:

// JavaScript Document - CZ/AJ SLOVNICEK

function preloz(el) {
    var slova = {
        "jedna" : "one", 
        "dva" : "two",        
    };

    if (slova[el.prelozit.value]) {
        el.prelozeno.value = slova[el.prelozit.value];
    }
    else {
        el.prelozeno.value = "Chybí překlad!";
    }
}

V kódu JavaScriptu (JS) jsem čeveně vyznačil místa, kam se vkládají slova. Uvedu ještě jednou příklad:

"jedna" : "one", 

Slovo jedna zadává uživatel a slovo one se mu automaticky vygeneruje do vedlejšího políčka pomocí JavaScriptu. Pokud bychom třeba chtěli přeložit slovíčko papír, které zadá uživatel do angličtiny, tedy na slovíčko paper, kód by vypadal následovně:

"papír" : "paper", 
Snad jste to pochopili. Pokud ne, připravil jsem pro Vás oddělenou ukázku pouze se slovem papír. Živá ukázkaDále platí pravidlo, že co nový překlad (tedy dvě slovíčka), to nový řádek. Jednotlivé překlady ještě oddělujeme čárkou na konci ,.

Máte-li připomínky, či dotazy, nebo nápady, nebojte se využít komentářů níže pod tímto článkem.

Návrat na přechozí stránku pomocí history.back() v JS

Pokud se pomocí JS tlačítka chcete vrátit zpět na předchozí stránku, využijte možnosti historyback(). Plně funkční ukázka:

<input type=button onclick="history.back()" value="Vrátit se na předchozí stránku">

Samozřejmostí pro funkčnost je zapnutý a podporovaný JavaScript. Tlačítko nefunguje, pokud se stránka otevírá do nového tabu, nebo okna. Živá ukázka.

Zarovnání obsahu pomocí CSS vlastnosti float

Pomocí CSS vlastnosti float můžeme obsah zarovávat doprava, doleva, nahoru i dole na stránku. Hodí se to zejména u výpisu článků, kde chceme mít vlevo název článku a vpravo datum vydání. Živá ukázka.

<p style="float:left;width:50%">Název článku<br>Popis článku</p>
<p style="float:left;width:49%">Datum<br>Autor</p>
<br style=clear:left>

Kotvy a odkazování na ně

Občas se hodí používat kotvy (jak třeba u tohoto článku). Je to jednoduché.

U místa, na které chceme odkazovat kotvou uvedeme identifikátor id=““. Většinou se uvádí u nadpisů h1, h2, h3 a h4, nebo třeba u <p> či divů. Takže nějak takto:

<h3 id="kotva">Nadpis</h3>

Na tento text následně budeme odkazovat kotvou:

<a href="#kotva">Odkaz na kotvu</a>

Pokud odkazujeme na jiný soubor, ve kterém je definována kotva, uvedeme i název souboru:

<a href="soubor.html#kotva">Odkaz na kotvu</a>