How to use Server Side Includes

Server Side Includes (SSI) is a server-side scripting language which runs on Apache (with mod_ssi), some Java Application Servers (see Server Side Include in GlassFish) and also on Microsoft Internet Information Services (IIS). Here are a few examples of how to use SSI:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Server Side Includes</title>
    <style type="text/css">
      * { margin: 0; padding: 0; border: 0; }
    </style>
  </head>
  <body>  
    <!-- http://httpd.apache.org/docs/2.0/howto/ssi.html -->
 
    <!--#set var="name" value="Benny Neugebauer" --> 
    <!--#set var="text" value="My name is ${name}." --> 
    <!--#set var="accountBalance" value="\$72.72" --> 
 
    <p>
      <!--#echo var="name" --><br/>
      <!--#echo var="text" --><br/>
      My account balance is: <!--#echo var="accountBalance" -->
      <br/><br/>
      <!--#if expr="${name} == 'Benny Neugebauer'" -->
      <b>Hey Benny!</b>
      <!--#else -->
      <em>Who are you??</em>
      <!--#endif --> 
      <br/>
      <!--#if expr="{$name} = /[a-zA-Z]/" -->
      Your name contains just letters. Yay!
      <!--#endif -->
      <br/><br/>
    </p>
 
    <p>
      <!-- Print some CGI variables... -->
      <!--#echo var="HTTP_USER_AGENT" --><br/>
      <!--#echo var="SERVER_NAME" --><br/>
      <!--#echo var="REMOTE_ADDR" --><br/>
    </p>
  </body>
</html>

Div Element horizontal und vertikal zentrieren

Ein Code sagt mehr als tausend Worte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Centering a Div horizontally and vertically</title>
    <style type="text/css">
      html
      {
        background-color: black;
      }
 
      body
      {
        width: 100%;
        height: 100%;
        position: static; /* don't make it relative! */
      }
 
      #centered
      {
        position: absolute;
        height: 396px;
        width: 400px;
        margin: -198px 0px 0px -200px; /* 50% height, 0px, 0px, 50% width */
        top: 50%;
        left: 50%;
        background-color: violet;
        border: 1px solid white;
      }
    </style>
  </head>
  <body>  
    <div id="centered"></div>
  </body>
</html>

Internet Explorer Kompatibilitätsansicht verhindern

Mit dem Internet Explorer 8 hat Microsoft die Kompatibilitätsansicht eingeführt. Mit der Kompatibilitätsansicht wird die Rendering-Engine des Internet Explorers auf eine Vorversion gestellt, wodurch Webseiten, die für ältere IE-Versionen entworfen wurden, besser angezeigt werden können. Der „Compatibility Mode“ wird durch ein Icon in der Adresszeile eingeschaltet.


Kompatibilitätsansicht im IE9

Für Webdesigner ist das Icon der Kompatibilitätsansicht ein Dorn im Auge, da es aussieht wie ein zerrissenes Dokument und dadurch der Eindruck entsteht, dass etwas mit der eigenen Webseite nicht in Ordnung ist. Um das Icon zu entfernen, muss die eigene Webseite selbst den Kompatibilitätsmodus bestimmen. Dazu wird der kompatible User-Agent als Meta-Tag für den Internet Explorer im head-Bereich der Seite angegeben:

1
2
3
4
<head>
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <title>My Web Page</title>
</head>

Die gezeigte Variante stellt die Render-Engine des Internet Explorers auf die Version von Internet Explorer 7 um, was dazu führt dass beispielsweise ein Internet Explorer 9 die Webseite anzeigt wie der IE7.

Möchte man sich nicht auf eine spezielle IE-Version festlegen, sondern immer die Aktuellste benutzen, so muss folgender Eintrag gemacht werden:

<meta http-equiv="X-UA-Compatible" content="IE=edge"/>

Suckerfish CSS done right!

Vor ein paar Tagen wollte ich ein modernes HTML-Submenü bauen, welches aufklappt, wenn man mit der Maus über einen Menüpunkt fährt.

Auf diversen Seiten habe ich gesehen, dass viele diese Technik mit JavaScript realisieren. Ich finde das übertrieben, da sich dieser Effekt auch mit der CSS „hover“-Eigenschaft für Listenelemente lösen lässt (Stichwort: Suckerfish CSS). Das funktioniert aber nur in aktuellen Browsern.

Der Internet Explorer 6 unterstützt die „hover“-Eigenschaft nämlich nur für Anker. Wie ich leider feststellen musste, gibt es noch weitere Besonderheiten die man beachten muss. Nach 2 Stunden Arbeit habe ich dann aber einen Code entwickelt, der barrierefrei (ohne den Einsatz von display:none und visibility:hidden) ist und problemlos in Firefox und Internet Explorer 6-7 funktioniert (andere Browser wurden nicht getestet).

Screenshot:

Suckerfish CSS done right! weiterlesen

W3C valides JavaScript

Wer das Tag <script type="text/javascript"> direkt im <head> Teil seiner HTML-Seite verwendet, der kann Probleme bei der W3C-Validierung seines Dokumentes bekommen, wenn innerhalb des JavaScript-Tags nach dem HTML-Standard unerlaubte Elemente enthalten sind.

Typische Fehlermeldungen dafür sind:

  • character „&“ is the first character of a delimiter but occurred as data
  • cannot generate system identifier for general entity „document.getElementById“
  • general entity „document.getElementById“ not defined and no default entity
  • reference not terminated by REFC delimiter
  • reference to entity „document.getElementById“ for which no system identifier could be generated
  • character „;“ not allowed in attribute specification list
  • element „navRoot.childNodes.length“ undefined
  • end tag for „navRoot.childNodes.length“ omitted, but OMITTAG NO was specified

Man kann dieses Manko umgehen, wenn man diese Deklaration ändert:

1
2
3
<script type="text/javascript">
/* My Code */
</script>

Undzwar in:

1
2
3
<script type="text/javascript"><!--//--><![CDATA[//><!--
/* My Code */
//--><!]]></script>

HTML Inline und Block Elemente

HTML-Elemente werden grundsätzlich in zwei Arten unterschieden, undzwar in Inline und Block Elemente. Block-Elemente erzeugen einen Zeilenumbruch und können andere Inline-Elemente enthalten. Inline-Elemente hingegen erzeugen keinen Zeilenumbruch und dürfen auch keine Blöcke enthalten; nur weitere Inline-Tags sind gestattet.
HTML Inline und Block Elemente weiterlesen