HTML-Tutorium: SVG: Hello World 02: Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Kowa (Diskussion | Beiträge)
Kowa (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(25 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{HTML-Tutorium:SVG:HelloWorld:Menü}}
{{HTML-Tutorium:SVG:HelloWorld:Menü}}
'''Ergebnis''': [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04/WebContent/hallo.html <code>hallo.html</code>]
'''Musterlösung''': [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04/WebContent/hallo.html <code>hallo.html</code>]


(SVN-Repositories: [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_02 Pendant zu Teil 2 des Canvas-Tutoriums],
(SVN-Repositories: [http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_02 Pendant zu Teil 2 des Canvas-Tutoriums],
Zeile 6: Zeile 6:
[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04 Pendant zu Teil 4])
[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04 Pendant zu Teil 4])


=HTML5: Hello-&lt;name&gt;-Anwendung mit Raphaël (SVG)=
==Voraussetzung==
 
Sie sollten die Inhalte der Tutorien [[HTML5-Tutorium: Canvas: Hello World 02]],  [[HTML5-Tutorium: Canvas: Hello World 03|Hello World 03]] und [[HTML5-Tutorium: Canvas: Hello World 04|Hello World 04]]
sowie des Tutoriums [[HTML-Tutorium: SVG: Hello World 01]] kennen.
 
==Ziel: Ausgabe von „Hallo &lt;Benutzername&gt;!“ als SVG-Grafik==
 
Die in [[HTML-Tutorium: SVG: Hello World 01]] erstellte Hello-World-Anwendung wird so umgeschrieben,
Die in [[HTML-Tutorium: SVG: Hello World 01]] erstellte Hello-World-Anwendung wird so umgeschrieben,
dass ein Benutzer seinen Namen eingeben kann und er nach Klick auf den <code>OK</code>-Button mit seinem Namen
dass ein Benutzer seinen Namen eingeben kann und er nach Klick auf den <code>OK</code>-Button mit seinem Namen
begrüßt wird.
begrüßt wird.
==Anwendungen „<code>HelloWorldSVG02</code>“, „<code>HelloWorldSVG03</code>“ und „<code>HelloWorldSVG04</code>“===


Gehen Sie bei der Erweiterung der SVG-Hello-World-Anwendung genauso vor, wie bei der
Gehen Sie bei der Erweiterung der SVG-Hello-World-Anwendung genauso vor, wie bei der
Zeile 26: Zeile 34:
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04 Pendant zu Teil 4 des Canvas-Tutoriums]
*[http://glossar.hs-augsburg.de/beispiel/tutorium/html_svg/hello_world/html_svg_hello_world_04 Pendant zu Teil 4 des Canvas-Tutoriums]


=Ein kleiner Optimierungstipp=
==HTML 4 vs. HTML5 ==
 
Beachten Sie, dass Teil 1 des SVG-Hello-World-Tutoriums in HTML 4 geschrieben wurde, während
das Canvas-Hello-World-Tutorium in HTML5 realisiert wurde.
 
Wenn Sie den Code der Canvas-Tutorien 2, 3 und 4 für das SVG-Tutorium wiederverwenden wollen,
sollten Sie die Datei hallo.html jeweils ebenfalls von HTML5 auf HTML 4 umstellen.
Hierbei ergeben sich ein paar kleine, aber subtile Veränderungen.
 
Für Formulare gibt es das <code>label</code>-Element noch nicht.
Dafür müssen Formularelemente in <code>p</code>-Elemente (oder Änhliches)
„gepackt“ werden.
 
<source lang="html4strict">
<form action="">
  <p class="form">
    Ihr Name:
    <input id="d_name" type="text"  value=""                            >
    <input            type="button" value="OK" onmousedown="sayHello()" >
  </p>
</form>
</source>
 
Von diesen <code>p</code>-Elementen sollten per CSS der Rand (<code>margin</code>)
entfernt werden, damit das Layout erhalten bleibt:
 
<source lang="css">
/* In HTML 4 müssen Formularelemente in p-Elemente (oder Ähnliches)
* eingebettet werden. Damit diese Elemente optisch nicht auffallen,
* wird ihr Rand eliminiert.
*/
.form
{ margin: 0px;
}
</source>
 
Etc. pp.
 
Um zu überprüfen, ob man validen HTML-Code erzeugt hat, kann man
sich des [http://validator.w3.org/#validate_by_upload W3C-HTML-Validators] bedienen.
Das sollten man bei allen HTML-Dateien machen, die man erstellt.
 
Die Musterlösungen dieses Tutoriums sind valide:
 
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_01%2FWebContent%2Fhallo.html&charset=%28detect+automatically%29&doctype=Inline&group=0 Validierung des SVG-Beispiels, Teil 1]
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_02%2FWebContent%2Fhallo.html&charset=%28detect+automatically%29&doctype=Inline&group=0 Validierung des SVG-Beispiels, Teil 2]
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_03%2FWebContent%2Fhallo.html&charset=%28detect+automatically%29&doctype=Inline&group=0 Validierung des SVG-Beispiels, Teil 3]
*  [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml_svg%2Fhello_world%2Fhtml_svg_hello_world_04%2FWebContent%2Fhallo.html&charset=%28detect+automatically%29&doctype=Inline&group=0 Validierung des SVG-Beispiels, Teil 4]
 
===Anmerkung===
 
Für HTML5 funktioniert der W3C-Validator auch:
 
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_01%2FWebContent%2Fhallo.html&charset=%28detect+automatically%29&doctype=Inline&group=0  Validierung des Canvas-Beispiels, Teil 1]
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_02%2FWebContent%2Fhallo.html&charset=%28detect+automatically%29&doctype=Inline&group=0 Validierung des Canvas-Beispiels, Teil 2]
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_03%2FWebContent%2Fhallo.html&charset=%28detect+automatically%29&doctype=Inline&group=0 Validierung des Canvas-Beispiels, Teil 3]
* [http://validator.w3.org/check?uri=http%3A%2F%2Fglossar.hs-augsburg.de%2Fbeispiel%2Ftutorium%2Fhtml5_canvas%2Fhello_world%2Fhtml5_canvas_hello_world_04%2FWebContent%2Fhallo.html&charset=%28detect+automatically%29&doctype=Inline&group=0 Validierung des Canvas-Beispiels, Teil 4]
 
==Ein kleiner Optimierungstipp==


Die Größe des Canvas muss nur an einer Stelle festgelegt werden, bei der Erzeugung des Canvas-Objektes:
Die Größe des Canvas muss nur an einer Stelle festgelegt werden, bei der Erzeugung des Canvas-Objektes:


<source lang="javascript">
<source lang="javascript">
  v_canvas       = document.getElementById("d_canvas");
g_canvas       = document.getElementById("d_canvas");
  v_canvas.width  = 300;
g_canvas.width  = 300;
  v_canvas.height =  27;
g_canvas.height =  27;
</source>
</source>


Zeile 40: Zeile 106:


<source lang="javascript">
<source lang="javascript">
  v_canvas = new Raphael("d_canvas", 300, 27);  
g_canvas = new Raphael("d_canvas", 300, 27);  
</source>
</source>
   
   
sowie bei der Definition der Umrandung in eine CSS-Datei:
sowie in einer CSS-Datei (z.B. bei der Festlegung des Layouts der Umrandung ):


<source lang="css">
<source lang="css">
Zeile 56: Zeile 122:


Der Grund dafür ist, dass in HTML5 zwar ein spezielles <code>canvas</code>-Element existiert,  
Der Grund dafür ist, dass in HTML5 zwar ein spezielles <code>canvas</code>-Element existiert,  
aber kein spezielle <code>svg</code>-Element. Ersatzweise wird in Raphaël daher ein
aber kein spezielles <code>svg</code>-Element. Ersatzweise wird in Raphaël daher ein
<code>div</code>-Element verwendet, dessen Größe dann allerdings via CSS explizit festgelegt werden
<code>div</code>-Element verwendet, dessen Größe dann allerdings via CSS explizit festgelegt werden
muss.
muss.
Zeile 63: Zeile 129:
sollte vermieden werden, da es bei Änderung der Bühnengröße zu Inkonsitenzen kommen kann
sollte vermieden werden, da es bei Änderung der Bühnengröße zu Inkonsitenzen kommen kann
(wenn die Größe versehentlich nur an einer Stelle geändert wird). Code-Verdopplung sollte
(wenn die Größe versehentlich nur an einer Stelle geändert wird). Code-Verdopplung sollte
sowieso stets vermieden werden (siehe [[Programmierprinzip#Don.27t_repeat_yourself.2C_DRY.5B4.5D|Programmierprinzip  „Don't repeat yourself“ (Dry)]]).
gemäß dem [[Programmierprinzip#Don.27t_repeat_yourself.2C_DRY.5B4.5D|Programmierprinzip  „Don't repeat yourself“ (Dry)]]
sowieso stets vermieden werden.


In der Version 4 des SVG-Hello-World-Tutoriums kann dieses Problem recht elegant gelöst werden.
In der Version 4 des SVG-Hello-World-Tutoriums kann dieses Problem recht elegant gelöst werden.
Zeile 73: Zeile 140:
</source>
</source>


Bei der Erzeugung der Raphaël-Bühne wird die Größe des zugehörigen <code>div</code>-Containers
Bei der Formatierung der Raphaël-Bühne (Hervorhebung des Randes) wird die Größe des zugehörigen  
nicht mehr mittels CSS sondern mittels JavaScript (genauer: jQuery) unter Rückgriff auf diese beiden
<code>div</code>-Containers nicht mehr mittels statischem CSS sondern mittels JavaScript (genauer: jQuery)
Konstanten festgelegt:
unter Rückgriff auf diese beiden Konstanten festgelegt:


<source lang="javascript">
<source lang="javascript">
  v_canvas = new Raphael("d_canvas", CANVAS_WIDTH, CANVAS_HEIGHT);  
g_canvas = new Raphael("d_canvas", CANVAS_WIDTH, CANVAS_HEIGHT);  
  $("#d_canvas")
$("#d_canvas")
    .css ({"width":  CANVAS_WIDTH,
  .css ({"width":  CANVAS_WIDTH,
          "height": CANVAS_HEIGHT,
        "height": CANVAS_HEIGHT,
          });
        });
</source>
</source>


=Quellen=
==Quellen==
<references/>
<references/>
<ol start="1">
<ol start="1">
<li> {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}</li>
<li> {{Quelle|Kowarschick, W.: Multimedia-Programmierung}}</li>
</ol>
</ol>
Die restlichen Quellen wurden direkt im Text angegeben.
==Fortsetzung des Tutoriums==


<noinclude>[[Kategorie: HTML-Tutorium: SVG: Hello World]][[Kategorie: HTML-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]
Sie sollten nun das [[HTML5-Tutorium: Canvas: MiniPong|Minipong-Canvas-Tutorium]] bearbeiten, sofern Sie dies noch nicht gemacht haben.
</noinclude>
Anderenfalls können Sie gleich mit dem [[HTML-Tutorium: SVG: MiniPong|Minipong-SVG-Tutorium]] forfahren.
[[Kategorie: HTML-Tutorium: SVG: Hello World]][[Kategorie: HTML-Beispiel]][[Kategorie:Kapitel:Multimedia-Programmierung:Beispiele]]

Aktuelle Version vom 1. März 2023, 13:17 Uhr

Dieser Artikel erfüllt die GlossarWiki-Qualitätsanforderungen:

Korrektheit: 4
(großteils überprüft)
Umfang: 4
(unwichtige Fakten fehlen)
Quellenangaben: 5
(vollständig vorhanden)
Quellenarten: 5
(ausgezeichnet)
Konformität: 4
(sehr gut)

HTML-Tutorium Hello World: JavaScript | Canvas | SVG

Inhalt | Teil 1 | Teil 2

Musterlösung: hallo.html

(SVN-Repositories: Pendant zu Teil 2 des Canvas-Tutoriums, Pendant zu Teil 3, Pendant zu Teil 4)

Voraussetzung

Sie sollten die Inhalte der Tutorien HTML5-Tutorium: Canvas: Hello World 02, Hello World 03 und Hello World 04 sowie des Tutoriums HTML-Tutorium: SVG: Hello World 01 kennen.

Ziel: Ausgabe von „Hallo <Benutzername>!“ als SVG-Grafik

Die in HTML-Tutorium: SVG: Hello World 01 erstellte Hello-World-Anwendung wird so umgeschrieben, dass ein Benutzer seinen Namen eingeben kann und er nach Klick auf den OK-Button mit seinem Namen begrüßt wird.

Anwendungen „HelloWorldSVG02“, „HelloWorldSVG03“ und „HelloWorldSVG04“=

Gehen Sie bei der Erweiterung der SVG-Hello-World-Anwendung genauso vor, wie bei der Erweiterung der Canvas-Hello-World-Anwendung. Das heißt, befolgen Sie die Anweisungen der Tutorien

ersetzen dabei aber jedes Mal den Canvas-Code durch einen äquivalenten SVG-Code.

Wenn Sie beim Erzeugen des SVG-Codes Probleme haben sollten, können Sie in den SVG-Musterlösungen spicken:

HTML 4 vs. HTML5

Beachten Sie, dass Teil 1 des SVG-Hello-World-Tutoriums in HTML 4 geschrieben wurde, während das Canvas-Hello-World-Tutorium in HTML5 realisiert wurde.

Wenn Sie den Code der Canvas-Tutorien 2, 3 und 4 für das SVG-Tutorium wiederverwenden wollen, sollten Sie die Datei hallo.html jeweils ebenfalls von HTML5 auf HTML 4 umstellen. Hierbei ergeben sich ein paar kleine, aber subtile Veränderungen.

Für Formulare gibt es das label-Element noch nicht. Dafür müssen Formularelemente in p-Elemente (oder Änhliches) „gepackt“ werden.

<form action="">
  <p class="form">
    Ihr Name:
    <input id="d_name" type="text"   value=""                            >
    <input             type="button" value="OK" onmousedown="sayHello()" >
  </p>
</form>

Von diesen p-Elementen sollten per CSS der Rand (margin) entfernt werden, damit das Layout erhalten bleibt:

/* In HTML 4 müssen Formularelemente in p-Elemente (oder Ähnliches)
 * eingebettet werden. Damit diese Elemente optisch nicht auffallen, 
 * wird ihr Rand eliminiert. 
 */
.form
{ margin: 0px;
}

Etc. pp.

Um zu überprüfen, ob man validen HTML-Code erzeugt hat, kann man sich des W3C-HTML-Validators bedienen. Das sollten man bei allen HTML-Dateien machen, die man erstellt.

Die Musterlösungen dieses Tutoriums sind valide:

Anmerkung

Für HTML5 funktioniert der W3C-Validator auch:

Ein kleiner Optimierungstipp

Die Größe des Canvas muss nur an einer Stelle festgelegt werden, bei der Erzeugung des Canvas-Objektes:

g_canvas        = document.getElementById("d_canvas");
g_canvas.width  = 300;
g_canvas.height =  27;

In Raphaël muss die Größe dagegen an zwei Stellen angegeben werden. Bei der Erzeugung der Bühne

g_canvas = new Raphael("d_canvas", 300, 27);

sowie in einer CSS-Datei (z.B. bei der Festlegung des Layouts der Umrandung ):

#d_canvas
{
  width:        300px;
  height:       27px;

  ...
}

Der Grund dafür ist, dass in HTML5 zwar ein spezielles canvas-Element existiert, aber kein spezielles svg-Element. Ersatzweise wird in Raphaël daher ein div-Element verwendet, dessen Größe dann allerdings via CSS explizit festgelegt werden muss.

Die Definition der Größe einer Raphaël-Bühne an zwei unterschiedlichen Stellen sollte vermieden werden, da es bei Änderung der Bühnengröße zu Inkonsitenzen kommen kann (wenn die Größe versehentlich nur an einer Stelle geändert wird). Code-Verdopplung sollte gemäß dem Programmierprinzip „Don't repeat yourself“ (Dry) sowieso stets vermieden werden.

In der Version 4 des SVG-Hello-World-Tutoriums kann dieses Problem recht elegant gelöst werden. Die Größe der Bühne wird in der JavaScript-Datei CONSTANT.js festgelegt:

var CANVAS_WIDTH  = 300; 
var CANVAS_HEIGHT =  27;

Bei der Formatierung der Raphaël-Bühne (Hervorhebung des Randes) wird die Größe des zugehörigen div-Containers nicht mehr mittels statischem CSS sondern mittels JavaScript (genauer: jQuery) unter Rückgriff auf diese beiden Konstanten festgelegt:

g_canvas = new Raphael("d_canvas", CANVAS_WIDTH, CANVAS_HEIGHT); 
$("#d_canvas")
  .css ({"width":  CANVAS_WIDTH,
         "height": CANVAS_HEIGHT,
        });

Quellen

  1. Kowarschick (MMProg): Wolfgang Kowarschick; Vorlesung „Multimedia-Programmierung“; Hochschule: Hochschule Augsburg; Adresse: Augsburg; Web-Link; 2018; Quellengüte: 3 (Vorlesung)

Die restlichen Quellen wurden direkt im Text angegeben.

Fortsetzung des Tutoriums

Sie sollten nun das Minipong-Canvas-Tutorium bearbeiten, sofern Sie dies noch nicht gemacht haben. Anderenfalls können Sie gleich mit dem Minipong-SVG-Tutorium forfahren.