<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JavaScript &#8211; webmatze.de</title>
	<atom:link href="https://webmatze.de/category/webseiten-erstellen/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://webmatze.de</link>
	<description>Profi Tipps für einen erfolgreichen Internetauftritt</description>
	<lastBuildDate>Wed, 03 Dec 2025 21:17:46 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>React, Svelte oder Astro? Ein Leitfaden für Einsteiger</title>
		<link>https://webmatze.de/react-svelte-oder-astro-ein-leitfaden-fuer-einsteiger/</link>
					<comments>https://webmatze.de/react-svelte-oder-astro-ein-leitfaden-fuer-einsteiger/#respond</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Wed, 03 Dec 2025 21:17:46 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Astro]]></category>
		<category><![CDATA[Einsteiger]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[Svelte]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://webmatze.de/?p=1109</guid>

					<description><![CDATA[Vergleich der drei wichtigsten JavaScript-Frameworks für Einsteiger. Mit praktischen Hello World Beispielen und Entscheidungshilfen für React, Svelte und Astro.]]></description>
										<content:encoded><![CDATA[<p>Wer heute mit der Webentwicklung beginnt, steht vor einer schier endlosen Auswahl an JavaScript-Frameworks. React dominiert mit einem Marktanteil von über 80%, aber immer mehr Entwickler entdecken Alternativen wie Svelte und Astro. Welches Framework ist das richtige für dich als Einsteiger?</p>
<p>In diesem Artikel vergleiche ich die drei wichtigsten JavaScript-Frameworks des Jahres 2025: React, Svelte und Astro. Du bekommst praktische &quot;Hello World&quot;-Beispiele für jedes Framework und klare Entscheidungshilfen, die dir bei der Auswahl helfen. Spoiler: Es gibt kein &quot;bestes&quot; Framework – es kommt auf deinen Use Case an.</p>
<h2>Was sind JavaScript-Frameworks?</h2>
<p>Bevor wir in den Vergleich einsteigen, lass uns kurz klären, was JavaScript-Frameworks eigentlich sind und warum wir sie brauchen.</p>
<p>Ein <strong>JavaScript-Framework</strong> ist eine Sammlung von vorgefertigten Code-Bausteinen, die dir helfen, moderne Webanwendungen effizienter zu entwickeln. Statt jedes Mal das Rad neu zu erfinden, bieten Frameworks Lösungen für wiederkehrende Probleme wie:</p>
<ul>
<li><strong>Komponentenbasierte Entwicklung:</strong> Teile deine Benutzeroberfläche in wiederverwendbare Bausteine auf</li>
<li><strong>Reaktivität:</strong> Die Benutzeroberfläche aktualisiert sich automatisch, wenn sich Daten ändern</li>
<li><strong>State Management:</strong> Verwalte den Zustand deiner Anwendung zentral</li>
<li><strong>Routing:</strong> Navigation zwischen verschiedenen Seiten ohne volle Seitenladezeiten</li>
</ul>
<p>Frameworks sparen dir Zeit, helfen dir dabei, sauberen Code zu schreiben, und bieten bewährte Lösungsansätze, die in der Community getestet wurden.</p>
<h2>React: Der etablierte Standard</h2>
<h3>Was ist React?</h3>
<p>React wurde 2013 von Facebook (heute Meta) entwickelt und ist heute das mit Abstand populärste JavaScript-Framework. Genau genommen ist React eine <strong>Bibliothek</strong> (Library) für User Interfaces, wird aber oft als Framework bezeichnet. React setzt auf das Konzept des <strong>Virtual DOM</strong> – einer virtuellen Darstellung des DOM, die React nutzt, um Updates effizient durchzuführen.</p>
<h3>Die Stärken von React</h3>
<p><strong>Riesiges Ökosystem:</strong> React hat die größte Community aller JavaScript-Frameworks. Das bedeutet:</p>
<ul>
<li>Unzählige Third-Party-Bibliotheken für fast jeden Use Case</li>
<li>Viele Tutorials, Kurse und Lernressourcen</li>
<li>Schnelle Antworten auf Stack Overflow und in Foren</li>
</ul>
<p><strong>Job-Markt:</strong> Wenn du als Entwickler arbeiten möchtest, ist React die sicherste Wahl. Die meisten Job-Angebote setzen React-Kenntnisse voraus.</p>
<p><strong>Mature und stabil:</strong> Nach über 10 Jahren Entwicklung ist React ausgereift. Breaking Changes sind selten, und Meta investiert kontinuierlich in die Weiterentwicklung.</p>
<h3>Die Lernkurve</h3>
<p>React hat eine <strong>mittelschwere Lernkurve</strong> für Einsteiger:</p>
<ul>
<li><strong>JSX-Syntax:</strong> Du schreibst HTML-ähnlichen Code direkt in JavaScript. Das wirkt anfangs ungewohnt, wird aber schnell zur zweiten Natur.</li>
<li><strong>Hooks:</strong> Seit React 16.8 gibt es Hooks wie <code>useState</code> und <code>useEffect</code>. Sie ersetzen die alten Class Components und sind einfacher zu verstehen.</li>
<li><strong>Konzepte:</strong> Du musst Konzepte wie Props, State und Component Lifecycle verstehen.</li>
</ul>
<h3>Praktisches React-Beispiel</h3>
<p>Hier ist eine einfache Counter-Komponente in React:</p>
<pre><code class="language-jsx">// Einfache Counter-Komponente mit React Hooks
import { useState } from &#039;react&#039;;

function Counter() {
  // useState Hook für reaktiven State
  // count ist die aktuelle Zahl, setCount ist die Funktion zum Ändern
  const [count, setCount] = useState(0);

  return (
    &lt;div&gt;
      &lt;h1&gt;React Counter&lt;/h1&gt;
      &lt;p&gt;Aktuelle Zahl: {count}&lt;/p&gt;
      &lt;button onClick={() =&gt; setCount(count + 1)}&gt;
        Erhöhen
      &lt;/button&gt;
      &lt;button onClick={() =&gt; setCount(count - 1)}&gt;
        Verringern
      &lt;/button&gt;
      &lt;button onClick={() =&gt; setCount(0)}&gt;
        Zurücksetzen
      &lt;/button&gt;
    &lt;/div&gt;
  );
}

export default Counter;</code></pre>
<p><strong>Was passiert hier?</strong></p>
<ul>
<li><code>useState(0)</code> erstellt eine State-Variable <code>count</code> mit Startwert 0</li>
<li>Bei jedem Klick auf &quot;Erhöhen&quot; wird <code>setCount</code> aufgerufen</li>
<li>React erkennt die Änderung und aktualisiert automatisch die Anzeige</li>
<li>JSX mischt HTML-ähnliche Syntax mit JavaScript (<code>{count}</code> ist JavaScript)</li>
</ul>
<h2>Svelte: Der aufsteigende Stern</h2>
<h3>Was ist Svelte?</h3>
<p>Svelte, entwickelt von Rich Harris, ist das jüngste der drei Frameworks (erstes Release 2016, große Überarbeitung 2019 mit Svelte 3). Der große Unterschied zu React: Svelte ist ein <strong>Compiler</strong>, kein Framework, das zur Laufzeit im Browser läuft.</p>
<p>Das bedeutet: Svelte verwandelt deinen Code beim Build-Prozess in hochoptimiertes Vanilla JavaScript. Es gibt keine Framework-Runtime, die im Browser geladen werden muss – Svelte &quot;verschwindet&quot; im finalen Bundle.</p>
<h3>Die Stärken von Svelte</h3>
<p><strong>Einfache, intuitive Syntax:</strong> Svelte fühlt sich näher an HTML, CSS und JavaScript an als React. Es gibt weniger Boilerplate-Code.</p>
<p><strong>Performance:</strong> Da Svelte zur Build-Zeit kompiliert wird, ist es extrem schnell. Keine Virtual DOM-Berechnungen zur Laufzeit.</p>
<p><strong>Weniger Code:</strong> Svelte-Komponenten brauchen im Schnitt 40% weniger Code als vergleichbare React-Komponenten.</p>
<p><strong>Reaktivität &quot;einfach da&quot;:</strong> In Svelte ist Reaktivität eingebaut – du musst keine speziellen Hooks oder State-Management-Tools lernen.</p>
<h3>Die Lernkurve</h3>
<p>Svelte hat die <strong>niedrigste Lernkurve</strong> der drei Frameworks:</p>
<ul>
<li><strong>HTML-ähnlicher als JSX:</strong> Svelte-Templates sehen aus wie HTML mit einigen Erweiterungen</li>
<li><strong>Reaktivität ist intuitiv:</strong> <code>let count = 0; count += 1</code> funktioniert einfach</li>
<li><strong>Scoped CSS:</strong> Styles sind automatisch auf die Komponente beschränkt</li>
</ul>
<h3>Praktisches Svelte-Beispiel</h3>
<p>Hier ist die gleiche Counter-Komponente in Svelte:</p>
<pre><code class="language-html">&lt;script&gt;
  // Reaktive Variable - automatisch aktualisiert
  let count = 0;

  // Reaktive Berechnungen mit $:
  // Wird automatisch neu berechnet, wenn count sich ändert
  $: doubled = count * 2;

  // Funktionen für Button-Clicks
  function increment() {
    count += 1; // So einfach ist Reaktivität in Svelte!
  }

  function decrement() {
    count -= 1;
  }

  function reset() {
    count = 0;
  }
&lt;/script&gt;

&lt;div&gt;
  &lt;h1&gt;Svelte Counter&lt;/h1&gt;
  &lt;p&gt;Aktuelle Zahl: {count}&lt;/p&gt;
  &lt;p&gt;Verdoppelt: {doubled}&lt;/p&gt;

  &lt;button on:click={increment}&gt;
    Erhöhen
  &lt;/button&gt;
  &lt;button on:click={decrement}&gt;
    Verringern
  &lt;/button&gt;
  &lt;button on:click={reset}&gt;
    Zurücksetzen
  &lt;/button&gt;
&lt;/div&gt;

&lt;style&gt;
  /* Scoped CSS - gilt nur für diese Komponente */
  div {
    padding: 20px;
    background-color: #f0f0f0;
    border-radius: 8px;
  }

  button {
    margin: 5px;
    padding: 10px 15px;
    background-color: #ff3e00;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
  }

  button:hover {
    background-color: #cc3100;
  }
&lt;/style&gt;</code></pre>
<p><strong>Was passiert hier?</strong></p>
<ul>
<li><code>let count = 0</code> ist eine normale Variable – Svelte macht sie automatisch reaktiv</li>
<li><code>$: doubled = count * 2</code> ist eine reaktive Berechnung</li>
<li><code>on:click={increment}</code> bindet die Funktion an den Button</li>
<li>CSS im <code>&lt;style&gt;</code> Block gilt nur für diese Komponente</li>
<li>Deutlich weniger Code als React, aber gleiche Funktionalität!</li>
</ul>
<h2>Astro: Der Performance-Champion</h2>
<h3>Was ist Astro?</h3>
<p>Astro ist das neueste Framework in diesem Vergleich (erstes Release 2021) und verfolgt einen radikal anderen Ansatz: <strong>Zero JavaScript by Default</strong>. Astro ist primär ein <strong>Static Site Generator</strong> mit einer innovativen Architektur namens &quot;Islands Architecture&quot;.</p>
<p>Die Grundidee: Deine Website ist standardmäßig statisches HTML und CSS – komplett ohne JavaScript. Nur dort, wo du Interaktivität brauchst, fügst du &quot;Islands&quot; (Inseln) von JavaScript hinzu.</p>
<h3>Die Stärken von Astro</h3>
<p><strong>Extrem schnell:</strong> Da Astro standardmäßig kein JavaScript ausliefert, sind Astro-Sites blitzschnell. Perfekte Lighthouse-Scores sind die Regel, nicht die Ausnahme.</p>
<p><strong>Content-fokussiert:</strong> Astro wurde für Content-Sites wie Blogs, Marketing-Websites und Dokumentationen entwickelt. Weniger für hochinteraktive Web-Apps.</p>
<p><strong>Multi-Framework Support:</strong> Das Besondere an Astro: Du kannst React, Svelte, Vue und andere Frameworks <em>gleichzeitig</em> in einem Projekt nutzen. Jede Komponente kann in einem anderen Framework geschrieben sein.</p>
<p><strong>Developer Experience:</strong> Astro bietet eine hervorragende Entwickler-Erfahrung mit schnellem Hot Reload und klarer Fehlermeldungen.</p>
<h3>Die Lernkurve</h3>
<p>Astro hat eine <strong>mittlere Lernkurve</strong>:</p>
<ul>
<li><strong>Ähnlich wie andere Komponenten-Frameworks:</strong> Wenn du React oder Svelte kennst, findest du dich schnell zurecht</li>
<li><strong>Neues Konzept:</strong> &quot;Islands Architecture&quot; ist ein neues Paradigma, das du verstehen musst</li>
<li><strong>Zwei &quot;Modi&quot;:</strong> Code im Frontmatter (<code>---</code> Bereich) läuft beim Build, Code in <code>&lt;script&gt;</code> Tags läuft im Browser</li>
</ul>
<h3>Praktisches Astro-Beispiel</h3>
<p>Hier ist die Counter-Komponente in Astro:</p>
<pre><code class="language-html">---
// Component Script (läuft nur beim Build)
const title = &quot;Astro Counter&quot;;
const currentDate = new Date().toLocaleDateString(&#039;de-DE&#039;);

// Dieser Code läuft auf dem Server, nicht im Browser!
console.log(&#039;Diese Komponente wird gerade gebaut...&#039;);
---

&lt;div class=&quot;counter-container&quot;&gt;
  &lt;h1&gt;{title}&lt;/h1&gt;
  &lt;p class=&quot;date&quot;&gt;Erstellt am: {currentDate}&lt;/p&gt;

  &lt;!-- Interaktive Island mit Client-JavaScript --&gt;
  &lt;!-- client:load bedeutet: JavaScript beim Laden ausführen --&gt;
  &lt;div id=&quot;counter&quot;&gt;
    &lt;p&gt;Aktuelle Zahl: &lt;span id=&quot;count&quot;&gt;0&lt;/span&gt;&lt;/p&gt;
    &lt;button id=&quot;increment&quot;&gt;Erhöhen&lt;/button&gt;
    &lt;button id=&quot;decrement&quot;&gt;Verringern&lt;/button&gt;
    &lt;button id=&quot;reset&quot;&gt;Zurücksetzen&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
  // Dieser Code läuft im Browser (Client-Side)
  let count = 0;

  // DOM-Elemente holen
  const incrementBtn = document.getElementById(&#039;increment&#039;);
  const decrementBtn = document.getElementById(&#039;decrement&#039;);
  const resetBtn = document.getElementById(&#039;reset&#039;);
  const countDisplay = document.getElementById(&#039;count&#039;);

  // Event Listeners hinzufügen
  incrementBtn?.addEventListener(&#039;click&#039;, () =&gt; {
    count++;
    updateDisplay();
  });

  decrementBtn?.addEventListener(&#039;click&#039;, () =&gt; {
    count--;
    updateDisplay();
  });

  resetBtn?.addEventListener(&#039;click&#039;, () =&gt; {
    count = 0;
    updateDisplay();
  });

  // Display aktualisieren
  function updateDisplay() {
    if (countDisplay) {
      countDisplay.textContent = count.toString();
    }
  }
&lt;/script&gt;

&lt;style&gt;
  .counter-container {
    padding: 20px;
    background-color: #f9f9f9;
    border-radius: 8px;
    max-width: 400px;
    margin: 20px auto;
  }

  .date {
    color: #666;
    font-size: 0.9em;
  }

  #counter {
    margin-top: 20px;
    padding: 15px;
    background-color: white;
    border-radius: 4px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
  }

  button {
    margin: 5px;
    padding: 10px 15px;
    background-color: #5b21b6;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    font-weight: 500;
  }

  button:hover {
    background-color: #4c1d95;
  }

  #count {
    font-weight: bold;
    font-size: 1.2em;
    color: #5b21b6;
  }
&lt;/style&gt;</code></pre>
<p><strong>Was passiert hier?</strong></p>
<ul>
<li>Code im <code>---</code> Bereich läuft beim Build (Server-Side)</li>
<li><code>currentDate</code> wird zur Build-Zeit erstellt, nicht beim Seitenaufruf</li>
<li>HTML wird als statischer Content ausgeliefert</li>
<li>Nur der Code im <code>&lt;script&gt;</code> Tag läuft im Browser</li>
<li>Weniger &quot;magisch&quot; als React/Svelte, aber volle Kontrolle</li>
</ul>
<p><strong>Hinweis:</strong> In der Praxis würdest du für interaktive Komponenten in Astro oft React, Svelte oder Vue nutzen. Das obige Beispiel zeigt Vanilla JavaScript, um die Islands-Idee zu verdeutlichen.</p>
<h2>Direkter Vergleich: Die wichtigsten Unterschiede</h2>
<p>Hier ist eine Übersicht, die dir bei der Entscheidung hilft:</p>
<table>
<thead>
<tr>
<th>Kriterium</th>
<th>React</th>
<th>Svelte</th>
<th>Astro</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Lernkurve</strong></td>
<td>Mittel</td>
<td>Niedrig</td>
<td>Mittel</td>
</tr>
<tr>
<td><strong>Performance</strong></td>
<td>Gut</td>
<td>Sehr gut</td>
<td>Hervorragend</td>
</tr>
<tr>
<td><strong>Bundle Size</strong></td>
<td>~40-50 KB (gzipped)</td>
<td>~2-3 KB (gzipped)</td>
<td>0 KB (Standard)*</td>
</tr>
<tr>
<td><strong>Ökosystem</strong></td>
<td>Riesig</td>
<td>Wachsend</td>
<td>Klein, aber wachsend</td>
</tr>
<tr>
<td><strong>Job-Markt</strong></td>
<td>Sehr groß</td>
<td>Klein, aber wachsend</td>
<td>Sehr klein</td>
</tr>
<tr>
<td><strong>Beste für</strong></td>
<td>SPAs, komplexe Apps</td>
<td>Moderne Web-Apps</td>
<td>Content-Sites, Blogs</td>
</tr>
<tr>
<td><strong>Community</strong></td>
<td>Sehr groß</td>
<td>Groß</td>
<td>Mittel</td>
</tr>
<tr>
<td><strong>Learning Resources</strong></td>
<td>Sehr viele</td>
<td>Viele</td>
<td>Wachsend</td>
</tr>
<tr>
<td><strong>Entwicklungsgeschwindigkeit</strong></td>
<td>Gut</td>
<td>Sehr gut</td>
<td>Gut</td>
</tr>
<tr>
<td><strong>Reaktivität</strong></td>
<td>Hooks</td>
<td>Eingebaut</td>
<td>Manuell (oder via Framework-Integration)</td>
</tr>
</tbody>
</table>
<p><em>*Astro liefert standardmäßig kein JavaScript aus. JavaScript wird nur für interaktive &quot;Islands&quot; geladen.</em></p>
<h3>Bundle Size erklärt</h3>
<p>Die Zahlen bedeuten, wie viel Framework-Code im Browser geladen werden muss:</p>
<ul>
<li><strong>React:</strong> ~42 KB (React + ReactDOM, gzipped)</li>
<li><strong>Svelte:</strong> ~2 KB – fast nichts, da Svelte beim Build kompiliert wird</li>
<li><strong>Astro:</strong> 0 KB – statische Sites brauchen kein Framework im Browser</li>
</ul>
<p>Das ist besonders wichtig für:</p>
<ul>
<li>Mobile Nutzer mit langsamen Verbindungen</li>
<li>SEO (Google bevorzugt schnelle Websites)</li>
<li>User Experience (schnellere Ladezeiten)</li>
</ul>
<h2>Welches Framework für wen?</h2>
<p>Hier sind meine Empfehlungen, basierend auf verschiedenen Szenarien:</p>
<h3>Wähle React, wenn du...</h3>
<p><span class="dashicons dashicons-saved green"></span> <strong>Jobs als Frontend-Entwickler suchst:</strong> React ist mit Abstand am gefragtesten<br />
<span class="dashicons dashicons-saved green"></span> <strong>Ein großes Ökosystem brauchst:</strong> Für jedes Problem gibt es eine React-Library<br />
<span class="dashicons dashicons-saved green"></span> <strong>Komplexe Single-Page Applications (SPAs) baust:</strong> React ist perfekt für Web-Apps wie Dashboards, SaaS-Tools<br />
<span class="dashicons dashicons-saved green"></span> <strong>Mit einem etablierten, ausgereiften Tool arbeiten möchtest:</strong> React ist &quot;battle-tested&quot;<br />
<span class="dashicons dashicons-saved green"></span> <strong>Teil einer großen Community sein willst:</strong> Hilfe ist überall verfügbar</p>
<p><span class="dashicons dashicons-no red"></span> <strong>Nicht ideal für:</strong> Einfache Websites, Performance-kritische Content-Sites</p>
<h3>Wähle Svelte, wenn du...</h3>
<p><span class="dashicons dashicons-saved green"></span> <strong>Einfache, intuitive Syntax magst:</strong> Svelte ist am schnellsten zu lernen<br />
<span class="dashicons dashicons-saved green"></span> <strong>Performance wichtig ist:</strong> Svelte ist extrem schnell<br />
<span class="dashicons dashicons-saved green"></span> <strong>Weniger Code schreiben willst:</strong> Svelte ist prägnant und ausdrucksstark<br />
<span class="dashicons dashicons-saved green"></span> <strong>Moderne Entwicklung magst:</strong> Svelte fühlt sich &quot;2025&quot; an<br />
<span class="dashicons dashicons-saved green"></span> <strong>Kleinere bis mittlere Web-Apps baust:</strong> Svelte glänzt hier</p>
<p><span class="dashicons dashicons-no red"></span> <strong>Nicht ideal für:</strong> Wenn du sofort einen Job brauchst (noch nicht so verbreitet)</p>
<h3>Wähle Astro, wenn du...</h3>
<p><span class="dashicons dashicons-saved green"></span> <strong>Content-Sites baust:</strong> Blogs, Marketing-Websites, Dokumentationen, Portfolios<br />
<span class="dashicons dashicons-saved green"></span> <strong>Performance oberste Priorität ist:</strong> Astro ist unschlagbar schnell<br />
<span class="dashicons dashicons-saved green"></span> <strong>Wenig JavaScript brauchst:</strong> Die meiste Site ist statisch<br />
<span class="dashicons dashicons-saved green"></span> <strong>SEO wichtig ist:</strong> Statische Sites sind perfekt für Suchmaschinen<br />
<span class="dashicons dashicons-saved green"></span> <strong>Flexibilität willst:</strong> Du kannst React, Svelte, Vue mischen</p>
<p><span class="dashicons dashicons-no red"></span> <strong>Nicht ideal für:</strong> Hochinteraktive SPAs, Echtzeit-Apps, komplexe Web-Apps</p>
<h3>Mein persönlicher Tipp für Einsteiger</h3>
<p>Wenn du gerade erst anfängst, würde ich <strong>in dieser Reihenfolge</strong> lernen:</p>
<ol>
<li><strong>Starte mit Svelte</strong> – Die niedrigste Lernkurve, und du verstehst Grundkonzepte schnell</li>
<li><strong>Lerne dann React</strong> – Für Job-Chancen und das große Ökosystem</li>
<li><strong>Entdecke Astro</strong> – Wenn du Content-Sites bauen willst</li>
</ol>
<p>Du musst nicht alle drei können! Wähle eines und werde richtig gut darin.</p>
<h2>Erste Schritte: So startest du</h2>
<p>Hier ist, wie du mit jedem Framework ein erstes Projekt erstellst:</p>
<h3>React: Projekt starten</h3>
<pre><code class="language-bash"># Mit Vite (empfohlen – schneller als Create React App)
npm create vite@latest mein-react-projekt -- --template react

# In das Projektverzeichnis wechseln
cd mein-react-projekt

# Dependencies installieren
npm install

# Entwicklungsserver starten
npm run dev</code></pre>
<p>Der Dev-Server läuft dann auf <code>http://localhost:5173</code></p>
<h3>Svelte: Projekt starten</h3>
<pre><code class="language-bash"># Mit SvelteKit (empfohlen)
npm create svelte@latest mein-svelte-projekt

# Wähle: Skeleton project ? Yes, using TypeScript syntax (optional) ? Add Prettier

# In das Projektverzeichnis wechseln
cd mein-svelte-projekt

# Dependencies installieren
npm install

# Entwicklungsserver starten
npm run dev</code></pre>
<p>Der Dev-Server läuft dann auf <code>http://localhost:5173</code></p>
<h3>Astro: Projekt starten</h3>
<pre><code class="language-bash"># Mit dem Astro CLI
npm create astro@latest mein-astro-projekt

# Wähle: Empty ? Yes (TypeScript optional) ? Install dependencies: Yes

# In das Projektverzeichnis wechseln
cd mein-astro-projekt

# Entwicklungsserver starten
npm run dev</code></pre>
<p>Der Dev-Server läuft dann auf <code>http://localhost:4321</code></p>
<h3>VS Code Extensions</h3>
<p>Installiere diese Extensions für bessere Developer Experience:</p>
<p><strong>Für React:</strong></p>
<ul>
<li>ES7+ React/Redux/React-Native snippets</li>
<li>Prettier – Code formatter</li>
</ul>
<p><strong>Für Svelte:</strong></p>
<ul>
<li>Svelte for VS Code (offiziell)</li>
<li>Svelte Intellisense</li>
</ul>
<p><strong>Für Astro:</strong></p>
<ul>
<li>Astro (offiziell)</li>
<li>Prettier (mit Astro Plugin)</li>
</ul>
<h2>Browser-Kompatibilität &amp; Voraussetzungen</h2>
<h3>Node.js Version</h3>
<p>Alle drei Frameworks benötigen Node.js:</p>
<ul>
<li><strong>Minimal:</strong> Node.js 18.x</li>
<li><strong>Empfohlen:</strong> Node.js 20.x oder 22.x (LTS)</li>
</ul>
<p>Download: <a href="https://nodejs.org/">nodejs.org</a></p>
<h3>Browser-Support</h3>
<p><strong>React:</strong></p>
<ul>
<li>Alle modernen Browser (Chrome, Firefox, Safari, Edge)</li>
<li>Internet Explorer 11 wird nicht mehr unterstützt</li>
</ul>
<p><strong>Svelte:</strong></p>
<ul>
<li>Alle modernen Browser</li>
<li>Sehr guter Support bis zurück zu Safari 12</li>
</ul>
<p><strong>Astro:</strong></p>
<ul>
<li>Alle modernen Browser</li>
<li>Da Astro statisches HTML generiert, funktioniert die Basis-Site sogar ohne JavaScript</li>
</ul>
<h3>Empfohlene Entwicklungsumgebung</h3>
<ul>
<li><strong>Editor:</strong> VS Code, WebStorm oder Cursor</li>
<li><strong>Terminal:</strong> Integriertes Terminal oder iTerm2 (Mac) / Windows Terminal</li>
<li><strong>Browser:</strong> Chrome oder Firefox (mit DevTools)</li>
<li><strong>Git:</strong> Für Versionskontrolle</li>
</ul>
<h2>Zusammenfassung</h2>
<p>Hier sind die wichtigsten Punkte im Überblick:</p>
<ul>
<li><strong>Es gibt kein &quot;bestes&quot; Framework</strong> – die richtige Wahl hängt von deinem Use Case ab</li>
<li><strong>React</strong> ist der etablierte Standard mit riesigem Ökosystem und den meisten Job-Möglichkeiten</li>
<li><strong>Svelte</strong> ist modern, einfach zu lernen und extrem performant – perfekt für Einsteiger</li>
<li><strong>Astro</strong> ist ideal für Content-Sites und bietet unschlagbare Performance durch statische HTML-Generierung</li>
<li><strong>Alle drei sind 2025 gute Wahlen</strong> und werden aktiv weiterentwickelt</li>
<li><strong>Fokussiere dich auf eines</strong> und lerne es richtig, statt alle oberflächlich anzukratzen</li>
<li><strong>Die Grundlagen sind wichtiger als das Framework</strong> – HTML, CSS und JavaScript sind das Fundament</li>
</ul>
<h3>Meine Empfehlung</h3>
<p>Für deinen ersten Einstieg: <strong>Probiere Svelte aus!</strong> Es hat die niedrigste Lernkurve und zeigt dir moderne Konzepte ohne viel Komplexität.</p>
<p>Wenn du als Entwickler arbeiten willst: <strong>Investiere Zeit in React.</strong> Es öffnet die meisten Türen.</p>
<p>Wenn du einen Blog oder eine Marketing-Site baust: <strong>Schau dir Astro an.</strong> Du wirst die Performance lieben.</p>
<h2>Weiterführende Ressourcen</h2>
<h3>Offizielle Dokumentationen</h3>
<ul>
<li><strong>React:</strong> <a href="https://react.dev/">react.dev</a> – Komplett überarbeitete Docs mit interaktiven Tutorials</li>
<li><strong>Svelte:</strong> <a href="https://svelte.dev/tutorial">svelte.dev/tutorial</a> – Interaktives Tutorial direkt im Browser</li>
<li><strong>Astro:</strong> <a href="https://docs.astro.build/">docs.astro.build</a> – Sehr gut strukturierte Dokumentation</li>
</ul>
<h3>Interactive Learning</h3>
<ul>
<li><strong>React:</strong> <a href="https://react.dev/learn">react.dev/learn</a> – Offizieller Learn-Path</li>
<li><strong>Svelte:</strong> <a href="https://learn.svelte.dev/">learn.svelte.dev</a> – Interaktives Tutorial</li>
<li><strong>Astro:</strong> <a href="https://astro.new/">astro.new</a> – Starter Templates zum Ausprobieren</li>
</ul>
<h3>Community &amp; News</h3>
<ul>
<li><strong>State of JavaScript Survey:</strong> <a href="https://stateofjs.com/">stateofjs.com</a> – Jährliche Entwickler-Umfrage</li>
<li><strong>JavaScript Weekly:</strong> <a href="https://javascriptweekly.com/">javascriptweekly.com</a> – Newsletter mit News</li>
<li><strong>Dev.to:</strong> Viele Tutorials und Erfahrungsberichte zu allen drei Frameworks</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/react-svelte-oder-astro-ein-leitfaden-fuer-einsteiger/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kittyfier Bookmarklet &#8211; Süße Kätzchen überall</title>
		<link>https://webmatze.de/kittyfier-bookmarklet-suse-katzchen-uberall/</link>
					<comments>https://webmatze.de/kittyfier-bookmarklet-suse-katzchen-uberall/#comments</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Thu, 21 Apr 2011 17:10:34 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmierung]]></category>
		<guid isPermaLink="false">http://webmatze.de/?p=652</guid>

					<description><![CDATA[Was passiert, wenn man sich als Programmierer mal etwas vom normalen Arbeitsstress ablenken will? Man programmiert etwas, dass Spaß macht. Auf genau diese Weise ist auch dieses Bookmarklet entstanden. Es wandelt einfach alle per IMG HTML-Tag eingebundene Bilder einer Seite in Bilder mit niedlichen kleinen Katzen um. Um zu sehen, was es macht, einfach den [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>Was passiert, wenn man sich als Programmierer mal etwas vom normalen Arbeitsstress ablenken will? Man programmiert etwas, dass Spaß macht.</strong></p>
<p>Auf genau diese Weise ist auch dieses <a href="http://en.wikipedia.org/wiki/Bookmarklet">Bookmarklet</a> entstanden. Es wandelt einfach alle per <strong>IMG</strong> HTML-Tag eingebundene Bilder einer Seite in Bilder mit niedlichen kleinen Katzen um. Um zu sehen, was es macht, einfach den folgenden Link in die Bookmark-Leiste eures Browsers ziehen und auf einer beliebigen Seite mit Bildern ausprobieren!</p>
<div style="text-align: center;margin-bottom:10px;"><a style="border: 1px solid #666666; background-color: #e4e4e4; padding: 10px; line-height: 30px;font-weight:bold;" href="javascript:(function(){var%20images=document.images;var%20icount=0;for(var%20i=0;i%20%3C%20images.length;i++){var%20img=images.item(i);if(img.width%20%3E%2020%20%26%26%20img.height%20%3E%2020){img.src=%22http://placekitten.com/%22+img.width+%22/%22+img.height+%22%3Fimage=%22+icount;icount++;if(icount%20%3E%2016){icount=0;}}}})();">Kittyfier Bookmarklet</a></div>
<p>Wer es gleich hier auf dieser Seite testen möchte, kann auch einfach nur den Link anklicken.</p>
<p>Hier sind ein paar zufällige Bilder zum Testen.</p>
<p><img decoding="async" style="float: left; margin-right: 10px; margin-bottom: 10px;" src="http://farm5.static.flickr.com/4090/5006132868_50980e8b91_m.jpg" alt="Flowers" width="200" /><img decoding="async" style="float: left; margin-right: 10px; margin-bottom: 10px;" src="http://farm5.static.flickr.com/4087/5101125270_77244f7c0f_m.jpg" alt="flowers and bokeh" width="200" /><img decoding="async" style="float: left; margin-right: 10px; margin-bottom: 10px;" src="http://farm3.static.flickr.com/2504/3757385629_b58653d59b_m.jpg" alt="Macro flower experiment" width="200" /><img decoding="async" style="float: left; margin-right: 10px; margin-bottom: 10px;" src="http://farm4.static.flickr.com/3047/3319679433_b4771513a3_m.jpg" width="200" alt="Fire-tree flower oppening, Tulipa africana, bisnagueira (Spathodea campanulata). Ceret park São Paulo Brasil. African native"></p>
<p style="clear: both; margin-top: 10px;">Wer wissen möchte, wie das Kittyfier Bookmarklet funktioniert, kann sich den kompletten Code hier ansehen. Eigentlich nichts besonderes:</p>
<pre lang="javascript">var images = document.images; 
var icount = 0; 
for(var i = 0; i < images.length; i++) { 
var img = images.item(i);
if (img.width > 20 && img.height > 20) { 
img.src = "http://placekitten.com/"+img.width+"/"+img.height+"?image="+icount; 
icount++;if(icount > 16){icount=0;}
} 
}</pre>
<p>Wie man sehen kann, verwende ich den <a href="http://placekitten.com">Placekitten</a> Service, welcher es einem erlaubt durch Angabe von Höhe und Breite beliebig große Katzenbilder zu generieren um diese als Platzhalter in die eigenen Entwürfe einzubauen. Dies ist vor allem dann praktisch, wenn man nur mal schnell ein HTML Layout testen möchte, aber noch keine passenden Bilder hat.</p>
<p>Ich hoffe ihr habt Spaß an diesem kleinen Script und ich freue mich über eure Kommentare.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/kittyfier-bookmarklet-suse-katzchen-uberall/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>A small update to my CSS3 Rotating Image Gallery</title>
		<link>https://webmatze.de/a-small-update-to-my-css3-rotating-image-gallery/</link>
					<comments>https://webmatze.de/a-small-update-to-my-css3-rotating-image-gallery/#comments</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Sat, 18 Dec 2010 16:04:57 +0000</pubDate>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmierung]]></category>
		<guid isPermaLink="false">http://webmatze.de/?p=642</guid>

					<description><![CDATA[A couple of months ago I wrote a small image gallery script using some of the new CSS3 functions like transitions and transforms of the Webkit Nightly Browser. It is a simple gallery with only four pictures in it which rotates on mouse click to show the next picture. That thing became a little famous [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>A couple of months ago I wrote <a href="http://webmatze.de/css-3-rotating-image-gallery/">a small image gallery script using some of the new CSS3 functions</a> like transitions and transforms of the <strong>Webkit Nightly Browser</strong>. It is a simple gallery with only four pictures in it which rotates on mouse click to show the next picture.</p>
<p>That thing <strong>became a little famous </strong>and was shown on many other websites as an example to what can be done with <strong>CSS3</strong> and <strong>a modern browser</strong>.</p>
<p>Now, a year later, I updated this script so it works now in many other modern browsers such as Firefox, Chrome, Opera and Internet Explorer.</p>
<p>Just <a href="http://samples.webmatze.de/rotating_image_gallery.htm">browse to the example page</a> and see it for yourself.</p>
<p>And if you have an older browser you can watch this little screen capture:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="http://www.youtube.com/v/rPH1G41Nu2U&amp;hl=de&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/rPH1G41Nu2U&amp;hl=de&amp;fs=1" allowfullscreen="true"></embed></object></p>
<p>I hope you like it and I am eager to see what you can come up with using those CSS3 transitions and transforms.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/a-small-update-to-my-css3-rotating-image-gallery/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>5 extrem nützliche Tools für JavaScript Entwickler</title>
		<link>https://webmatze.de/5-extrem-nutzliche-tools-fur-javascript-entwickler/</link>
					<comments>https://webmatze.de/5-extrem-nutzliche-tools-fur-javascript-entwickler/#respond</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Thu, 21 Oct 2010 20:28:47 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[tools]]></category>
		<guid isPermaLink="false">http://webmatze.de/?p=624</guid>

					<description><![CDATA[Wenn es eine Programmiersprache gibt, die ich wirklich liebe, dann ist dies auf jeden Fall JavaScript. Früher von vielen belächelt, hat sich JavaScript heute zu einem wirklich mächtigen Tool unter Webentwicklern gemausert. Viele hilfreiche Seiten wie z.B. Google Maps wären ohne JavaScript überhaupt nicht möglich gewesen und selbst auf der Serverseite findet es in letzter [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>Wenn es eine Programmiersprache gibt, die ich wirklich liebe, dann ist dies auf jeden Fall <a href="http://webmatze.de/category/webseiten-erstellen/javascript/">JavaScript</a>. Früher von vielen belächelt, hat sich JavaScript heute zu einem wirklich mächtigen Tool unter Webentwicklern gemausert. Viele hilfreiche Seiten wie z.B. <a href="http://maps.google.de/">Google Maps</a> wären ohne JavaScript überhaupt nicht möglich gewesen und selbst auf der Serverseite findet es in letzter Zeit immer mehr Verwendung - siehe <a href="http://nodejs.org/">node.js</a>. Heute möchte ich euch fünf interessante und nützliche Tools vorstellen, die einem das Arbeiten mit JavaScript sehr erleichtern können.</strong></p>
<h3>JSFIDDLE - JavaScript direkt im Browser entwickeln</h3>
<p>Dieses Tool ist noch relativ jung, hat sich aber für mich bereits jetzt zu einem der wichtigsten Tools beim Entwickeln und Testen von JavaScript Scripten entwickelt. Das Besondere an <strong>JSFIDDLE</strong> ist, dass man vier verschiedene Felder zur Verfügung gestellt bekommt. Im Ersten schreibt man seinen HTML Code, im Zweiten den benötigten CSS Code und im Dritten schließlich das JavaScript.</p>
<p>Wenn man möchte lassen sich externe JavaScript Bibliotheken wie <a href="http://www.prototypejs.org/">Prototype</a>, <a href="http://jquery.com/">jQuery</a>, <a href="http://mootools.net/">Mootools</a> und viele weitere per Klick einbinden.</p>
<p>Ein Klick auf 'Run' und das fertige Script wird ausgeführt und das Ergebnis im vierten Feld angezeigt. Diese so geschriebenen Scripte können gespeichert werden und sind über eine feste URL jederzeit wieder aufrufbar. Bei jedem Speichern bleibt übrigens die vorherige Version erhalten und kann über die alte URL aufgerufen werden.<br />
<span id="more-624"></span><br />
Die mit <strong>JSFIDDLE</strong> erstellten Scripte lassen sich übrigens über eine 'Share' Funktion in jede beliebige Seite einbinden. Das könnte dann z.B. wie folgt aussehen:</p>
<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/katBX/embedded/"></iframe></p>
<p>Wie ich finde ein wirklich geniales und nützliches Tool.</p>
<p><a href="http://jsfiddle.net">http://jsfiddle.net</a></p>
<h3>JavaScript Obfuscator - Den Code unkenntlich machen</h3>
<p>Ein Problem mit dem man bei der Entwicklung von JavaScript leben muss ist, dass sich der Code jederzeit im Browser betrachten lässt. Häufig stecken in dem Code jedoch viele Stunden Arbeit und geistige Schaffenskraft, wo man natürlich nicht möchte, dass sich jeder gleich an der eigenen Arbeit bedienen kann, indem er den Code einfach kopiert.</p>
<p>Hier springt der <strong>Free Javascript Obfuscator</strong> in die Presche, denn mit diesem Tool lässt sich der Code auf einfache Weise unleserlich machen, indem es den Code unkenntlich macht und es so fast unmöglich wird, den so bearbeiteten Code zu analysieren. Dabei bleibt das Script natürlich weiterhin funktionsfähig.</p>
<p><a href="http://javascriptobfuscator.com/">http://javascriptobfuscator.com/</a></p>
<h3>Packer - Große Scripte verkleinern und Bandbreite sparen</h3>
<p>Wer komplette JavaScript Bibliotheken wie Prototype kennt der weiß, dass diese schon mal ziemlich groß werden können. Doch im Web kommt es oft auf schnelle Ladezeiten und damit auf geringe Dateigrößen an. Jedes Kilobyte kann dabei entscheidend sein. Und genau hier kommt <strong>Packer</strong> von <a href="http://dean.edwards.name/">Dean Edwards</a> in Spiel.</p>
<p>Mit diesem Tool lassen sich große Script schnell auf kleinere Größen schrumpfen, indem überflüssige Zeichen entfernt und Variablennamen gegen Kürzere ausgetauscht werden. Außerdem lässt sich alles noch per <strong>Base62</strong> kodieren, was den so entstandenen Code gleichzeitig unleserlich macht.</p>
<p><a href="http://dean.edwards.name/packer/">http://dean.edwards.name/packer/</a></p>
<h3>Bananascript - Effizientes JavaScript Koprimierungstool</h3>
<p>Wem Packer noch nicht ausreicht, oder wer damit Probleme hat - Packer benötigt 100% richtig geschriebenen Code - der sollte sich zusätzlich auch <strong>Bananascript</strong> ansehen. Dieses Komprimierungstool verspricht noch bessere Kompressionsraten und funktioniert auch mit Bibliotheken wie Prototype.</p>
<p>Einfach die entsprechende JavaScript Datei auswählen, hochladen und schon bekommt man die komprimierte Version zum Download angeboten. Die Komprimierung tendiert dabei meistens bei 73%, kann aber auch mal 99% erreichen, wenn man den Statistiken von <strong>Bananascript</strong> trauen darf.</p>
<p><a href="http://www.bananascript.com/">http://www.bananascript.com/</a></p>
<h3>JSBeautifier - JavaScript Code verschönern</h3>
<p>Als letztes Tool möchte ich euch den <strong>JavaScript Beautifier</strong> vorstellen. Mit diesem Tool lassen sich gleich zwei Fliegen mit einer Klappe schlagen. Zum einen kann man damit den eigenen JavaScript Code verschönern lassen, indem dieser richtig eingerückt und umgebrochen wird. Bei JavaScript ist es eigentlich egal, ob das komplette Script in einer Zeile geschrieben wird, aber es lässt sich nun mal viel besser lesen, wenn es ordentlich eingerückt und über mehrere Zeilen geschrieben wird.</p>
<p>Aber der <strong>JSBeautifier</strong> bietet noch mehr, denn damit lassen sich außerdem z.B. mit <strong>Packer</strong> oder <strong>JavaScript Obfuscator</strong> gepackte und unkenntlich gemachte Scripte wieder lesbar machen. Zwar lassen sich Variablennamen nicht immer wieder herstellen, aber der verschönerte und entpackte Code lässt sich auf jeden Fall wieder besser lesen und analysieren. (Aber pssst nicht weitersagen!!!!)</p>
<p><a href="http://jsbeautifier.org/">http://jsbeautifier.org/</a></p>
<h3>Fazit</h3>
<p>Wie ihr sehen könnt, gibt es einige Tools, die einem die Arbeit mit JavaScript erleichtern können. Viele von den oben genannten verwende ich selbst auch regelmäßig und möchte sie heute nicht mehr missen. Ich hoffe auch für euch war etwas Interessantes dabei, aber vielleicht kennt ihr ja selbst auch noch ein paar nützliche Tools. Wenn ja, dann berichtet doch einfach in den Kommentaren davon.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/5-extrem-nutzliche-tools-fur-javascript-entwickler/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ein einfacher Cross-Browser Tooltip mit Javascript und CSS</title>
		<link>https://webmatze.de/ein-einfacher-cross-browser-tooltip-mit-javascript-und-css/</link>
					<comments>https://webmatze.de/ein-einfacher-cross-browser-tooltip-mit-javascript-und-css/#comments</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Tue, 24 Aug 2010 17:00:43 +0000</pubDate>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[HTML / XHTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmierung]]></category>
		<guid isPermaLink="false">http://webmatze.de/?p=555</guid>

					<description><![CDATA[Vor einiger Zeit habe ich hier auf webmatze.de einen einfachen auf JavaScript und CSS basierenden Tooltip vorgestellt, mit dem sich schnell und einfach Tooltips in die eigenen Seiten integrieren ließen. Dieser funktionierte soweit auch ganz gut in vielen Browsern, doch die Zeit ist nicht stillgestanden und seit der Veröffentlichung hat es einige neue Browserversionen und [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Vor einiger Zeit habe ich hier auf webmatze.de einen <a href="http://webmatze.de/wirklich-einfache-javascript-tooltips/">einfachen auf JavaScript und CSS basierenden Tooltip</a> vorgestellt, mit dem sich schnell und einfach Tooltips in die eigenen Seiten integrieren ließen. Dieser funktionierte soweit auch ganz gut in vielen Browsern, doch die Zeit ist nicht stillgestanden und seit der Veröffentlichung hat es einige neue Browserversionen und sogar <a href="http://webmatze.de/google-chrome-der-neue-browser/">ganz neue Browser</a> gegeben.</p>



<p>Leider führte dies auch dazu, dass das alte Tooltip Script nun leider nicht mehr in allen wichtigen Browsern funktioniert. Aber auch in den Browsern, wo es funktionierte, ist es unter Umständen zu Fehlern gekommen.</p>



<p>Dies will ich nun zum Anlass nehmen und euch ein komplett neues Tooltip Script zur Verfügung stellen.</p>



<h2 class="wp-block-heading">XBT - Der Cross-Browser Tooltip</h2>



<p>Okay, über Namen lässt sich bestimmt streiten, aber irgendwie muss das Kind ja heißen. Das neue Script basiert auf ein paar Zeilen JavaScript und ist nur geringfügig größer als das alte Script. Dafür ist es jedoch viel flexibler zu konfigurieren, kollidiert nicht mit anderen Scripten und lässt sich leicht über CSS beliebig anpassen. Und wer möchte, kann das Script auch ohne Probleme um neue Funktionen erweitern.</p>



<p>Hier könnt ihr den Code sehen:</p>



<span id="more-555"></span>



<pre class="wp-block-code"><code lang="javascript" class="language-javascript line-numbers">(function (window, document, undefined) {
    var XBTooltip = function (element, userConf, tooltip) {
        var config = {
            id: userConf.id || undefined,
            className: userConf.className || undefined,
            x: userConf.x || 20,
            y: userConf.y || 20,
            text: userConf.text || undefined
        };

        var over = function (event) {
                tooltip.style.display = "block";
            },
            out = function (event) {
                tooltip.style.display = "none";
            },
            move = function (event) {
                event = event ? event : window.event;
                if (event.pageX == null &amp;&amp; event.clientX != null) {
                    var doc = document.documentElement, body = document.body;
                    event.pageX = event.clientX + (doc &amp;&amp; doc.scrollLeft || body &amp;&amp; body.scrollLeft || 0) - (doc &amp;&amp; doc.clientLeft || body &amp;&amp; body.clientLeft || 0);
                    event.pageY = event.clientY + (doc &amp;&amp; doc.scrollTop || body &amp;&amp; body.scrollTop || 0) - (doc &amp;&amp; doc.clientTop || body &amp;&amp; body.clientTop || 0);
                }
                tooltip.style.top = (event.pageY + config.y) + "px";
                tooltip.style.left = (event.pageX + config.x) + "px";
            }
        if (tooltip === undefined &amp;&amp; config.id) {
            tooltip = document.getElementById(config.id);
            if (tooltip) tooltip = tooltip.parentNode.removeChild(tooltip)
        }
        if (tooltip === undefined &amp;&amp; config.text) {
            tooltip = document.createElement("div");
            if (config.id) tooltip.id = config.id;
            tooltip.innerHTML = config.text;
        }
        if (config.className) tooltip.className = config.className;
        tooltip = document.body.appendChild(tooltip);
        tooltip.style.position = "absolute";
        element.onmouseover = over;
        element.onmouseout = out;
        element.onmousemove = move;
        over();
    };
    window.XBTooltip = window.XBT = XBTooltip;
})(this, this.document);</code></pre>



<p>Das einzig wirklich benötigte CSS für den Tooltip sieht so aus:</p>



<pre class="wp-block-code"><code lang="css" class="language-css line-numbers">.xbtooltip {
  display: none;
  position: absolute;
  background-color: #fff;
}</code></pre>



<p>Dieser kann aber für jeden einzelnen Tooltip noch einmal separat überschrieben werden. Doch dazu später mehr.</p>



<h2 class="wp-block-heading">Tooltip Beispiele</h2>



<p>Kommen wir also zu ein paar einfachen Beispielen, wie man das XBT Tooltip Script einsetzen kann.</p>



<h3 class="wp-block-heading">Einfacher Tooltip</h3>



<p>Der einfachste mögliche Tooltip benötigt einen Link und ein DIV Element mit dem anzuzeigenden Inhalt für den Tooltip.</p>



<pre class="wp-block-code"><code lang="markup" class="language-markup line-numbers">&lt;a href="http://webmatze.de" onMouseOver="XBT(this, {id:'tt1'})">Ein normaler Tooltip...&lt;/a>
&lt;div id="tt1" className="xbtooltip">...mit bereits vorhandenem Inhalt.&lt;/div></code></pre>



<p>Dem Tooltip Script wird also über eine Konfiguration welche in geschweiften Klammern steht, die <strong>id</strong> des Elementes übergeben, welches den Inhalt für den Tooltip enthält. Mehr ist hier nicht notwendig.</p>



<p>Das entsprechende CSS dazu kann z.B. so aussehen:</p>



<pre class="wp-block-code"><code lang="css" class="language-css line-numbers">#tt1 {
      background-color: #00FFFF;
      color: green;
      padding: 3px;
      width: 120px;
    }</code></pre>



<p>Und so sieht dann der Link mit dem Tooltip aus:</p>



<p><a href="http://webmatze.de" onmouseover="XBT(this, {id:'tt1'})">Ein normaler Tooltip...</a><div id="tt1" class="xbtooltip">...mit bereits vorhandenem Inhalt.</div></p>



<h3 class="wp-block-heading">Inhalt als Konfiguration übergeben</h3>



<p>Wer nicht extra für jeden Tooltip ein extra DIV Element erstellen möchte, kann den gewünschten Inhalt für den Tooltip auch gleich als <strong>text</strong> übergeben. Das kann dann z.B. so aussehen:</p>



<pre class="wp-block-code"><code lang="markup" class="language-markup line-numbers">&lt;a href="http://webmatze.de"
   onMouseOver="XBT(this, {text: '...indem man ihn &amp;lt;strong&amp;gt;als Text&amp;lt;/strong&amp;gt; übergibt', className: 'xbtooltip'})">
Man kann den Inhalt des Tooltips auch dynamisch erstellen lassen...
&lt;/a></code></pre>



<p>Als Konfiguration wird also nicht mehr eine <strong>id</strong> übergeben, sondern ein beliebiger Text, der auch HTML Elemente enthalten kann. Über den Parameter <strong>className</strong> kann man dem Tooltip dann einen beliebigen Style zuordnen.</p>



<p>Und so sieht das Ganze dann aus:</p>



<p><a href="http://webmatze.de"
   onMouseOver="XBT(this, {text: '...indem man ihn &lt;strong&gt;als Text&lt;/strong&gt; übergibt', className: 'xbtooltip'})">
Man kann den Inhalt des Tooltips auch dynamisch erstellen lassen...
</a></p>



<h3 class="wp-block-heading">Den Abstand des Tooltips anpassen</h3>



<p>Wenn man möchte, dass der Tooltip nicht direkt neben dem Mauszeiger, sondern weiter entfernt angezeigt wird, kann man dies über die Konfiguration anpassen. Dazu gibt es die beiden Parameter <strong>x</strong> und <strong>y</strong>.</p>



<pre class="wp-block-code"><code lang="markup" class="language-markup line-numbers">&lt;a<ins> href="http://webmatze.de"</ins> onmouseover="XBT(this, {id: 'tt4', x: 50, y: 50})">Man kann den Abstand des Tooltips anpassen...&lt;/a>
&lt;div id="tt4" class="xbtooltip">
...indem man eine Konfiguration übergibt
&lt;/div></code></pre>



<p>Somit wird der Tooltip nun jeweils 50 Pixel nach rechts und unten verschoben angezeigt.</p>



<p><a href="http://webmatze.de" onmouseover="XBT(this, {id: 'tt4', x: 50, y: 50})">Man kann den Abstand des Tooltips anpassen...</a>
<div id="tt4" class="xbtooltip">
...indem man eine Konfiguration übergibt
</div></p>



<h3 class="wp-block-heading">Funktioniert nicht nur bei Links</h3>



<p>Natürlich kann man den Tooltip auch an andere HTML Elemente hängen. Es muss nicht immer ein Link sein.</p>



<pre class="wp-block-code"><code lang="markup" class="language-markup line-numbers">&lt;div style="position: relative; top: 0px; left: 150px; width: 200px; height: 100px; background-color: #e4e4e4;" 
  onmouseover="XBT(this, {id:'tt2'})">Das
    funktioniert auch mit DIVs statt mit Links...
    &lt;div id="tt2" className="xbtooltip">...soweit der Browser onmouseover auf DIV Elementen unterstützt!&lt;/div>
&lt;/div></code></pre>



<p>Dies würde dann so aussehen:</p>



<div style="position: relative; top: 0px; left: 150px; width: 200px; height: 100px; background-color: #e4e4e4;" onmouseover="XBT(this, {id:'tt2'})">Das funktioniert auch mit DIVs statt mit Links...
<div id="tt2" class="xbtooltip">...soweit der Browser onmouseover auf DIV Elementen unterstützt!</div>
</div>



<h3 class="wp-block-heading">In absolut positionierten Elementen funktioniert es auch</h3>



<p>Mit dem alten Tooltip Script gab es immer Probleme mit Tooltips, die sich in anderen absolut prositionierten Elementen befanden. Hier wurden die Tooltips immer an einer falschen Position angezeigt.</p>



<p>Mit dem neuen Script ist dies nun auch kein Problem mehr:</p>



<pre class="wp-block-code"><code lang="markup" class="language-markup line-numbers">&lt;div style="position: absolute; top: 0px; left: 300px; width: 200px; height: 100px; background-color: #e4e4e4;">
    &lt;a href="http://eventicus.de" onmouseover="XBT(this, {id:'tt3'})">Genauso auch mit Tooltips...&lt;/a>
    &lt;div id="tt3" class="xbtooltip">...die sich in absolut positionierten Elementen befinden.&lt;/div>
&lt;/div></code></pre>



<p>Und so sieht's dann aus:</p>



<div style="position: relative; height: 130px;">
<div style="position: absolute; top: 0px; left: 300px; width: 200px; height: 100px; background-color: #e4e4e4;">
    <a href="http://eventicus.de" onmouseover="XBT(this, {id:'tt3'})">Genauso auch mit Tooltips...</a>
    <div id="tt3" class="xbtooltip">...die sich in absolut positionierten Elementen befinden.</div>
</div>
</div>



<h2 class="wp-block-heading">Fazit</h2>



<p>Ich hoffe ihr könnt mit diesem neuen Script etwas anfangen und wünsche euch viel Spaß damit. Sollten euch doch noch Probleme auffallen, oder sollte es in einem Browser nicht richtig funktionieren, so könnt ihr mir dies wie immer in den Kommentaren mitteilen.</p>



<p>Ich denke auch das neue Script ist immer noch sehr kompakt und einfach zu verwenden. Vielleicht werde ich in Zukunft noch ein paar Funktionen nachrüsten, sofern ihr noch Wünsche habt, die unbedingt enthalten sein sollten.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/ein-einfacher-cross-browser-tooltip-mit-javascript-und-css/feed/</wfw:commentRss>
			<slash:comments>95</slash:comments>
		
		
			</item>
		<item>
		<title>Ist display=&#8220;none&#8220; jetzt irrelevant?</title>
		<link>https://webmatze.de/ist-display-none-jetzt-irrelevant/</link>
					<comments>https://webmatze.de/ist-display-none-jetzt-irrelevant/#respond</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Tue, 12 Aug 2008 10:36:41 +0000</pubDate>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML / XHTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programmierung]]></category>
		<guid isPermaLink="false">http://webmatze.de/?p=370</guid>

					<description><![CDATA[Beim Studieren der aktuellen HTML5 Spezifikation, ist mir ein neues Attribut aufgefallen, welches möglicherweise bald eine große Bedeutung bekommen könnte. Ich spreche hier vom Attribut irrelevant, welches allen HTML Elementen zugewiesen werden darf. Wofür steht irrelevant? Das Attribut irrelevant darf die Werte "true" oder "false" enthalten und gibt an, ob ein so ausgezeichnetes HTML Element [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Beim Studieren der aktuellen <abbr title="Hypertext Markup Language Version 5">HTML5</abbr> Spezifikation, ist mir ein neues Attribut aufgefallen, welches möglicherweise bald eine große Bedeutung bekommen könnte. Ich spreche hier vom Attribut <code><a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#irrelevant">irrelevant</a></code>, welches allen <abbr>HTML</abbr> Elementen zugewiesen werden darf.</p>
<h3>Wofür steht irrelevant?</h3>
<p>Das Attribut <code>irrelevant</code> darf die Werte <strong>"true"</strong> oder <strong>"false"</strong> enthalten und gibt an, ob ein so ausgezeichnetes <abbr>HTML</abbr> Element im aktuellen Kontext noch nicht oder nicht mehr relevant ist. So gekennzeichnete Elemente werden vom Browser weder gerendert, noch angezeigt. Das heißt, man kann damit beliebige Elemente ein- und ausblenden.</p>
<p style="text-align:center"><img fetchpriority="high" decoding="async" src="http://webmatze.de/wp-content/uploads/2008/08/html5.png" alt="HTML 5 Draft Recommendation Screenshot" title="HTML 5 Draft Recommendation" width="500" height="240" class="alignnone size-full wp-image-371" srcset="https://webmatze.de/wp-content/uploads/2008/08/html5.png 520w, https://webmatze.de/wp-content/uploads/2008/08/html5-300x144.png 300w" sizes="(max-width: 500px) 100vw, 500px" /></p>
<p>Bisher konnte man diese Funktionalität nur durch das Setzen der <abbr title="Cascading Style Sheets">CSS</abbr> Eigenschaft <code><a href="http://www.w3.org/TR/REC-CSS2/visuren.html#display-prop">display</a></code> auf <strong>display: none</strong> erreichen. Damit werden die entsprechenden Elemente ebenfalls nicht gerendert und angezeigt.</p>
<p>Der Nachteil hier wäre allerdings, dass ein Gerät oder Browser, welcher keine Stylesheets versteht, solche Elemente dann trotzdem darstellen würde. Bei Verwendung von <code>irrelevant</code> würde der entsprechende Teil auch in diesem Fall nicht angezeigt werden. <em>(Vorausgesetzt das Gerät versteht HTML5.)</em><br />
<span id="more-370"></span></p>
<h3>irrelevant schon heute verwenden</h3>
<p>Damit man das neue Attribut in <abbr>HTML</abbr> Seiten verwenden kann, müsste man darauf warten, dass die aktuellen Browser <abbr>HTML 5</abbr> unterstützen. Doch bis es soweit ist, kann es noch eine Weile dauern, zumal <a href="http://www.whatwg.org/specs/web-apps/current-work/">die Spezifikation</a> noch nicht in der finalen Version vorliegt.</p>
<p>Um das Warten aber ein wenig zu verkürzen, kann man die entsprechende Funktionalität in allen aktuellen Browsern auch auf anderem Weg erreichen. Dazu muss man nur zwei einfache <abbr>CSS</abbr> Definitionen in das <abbr>HTML</abbr> Dokument einbinden, und schon wird das Attribut <code>irrelevant</code> richtig ausgewertet.</p>
<pre lang="css">
<style type="text/css">
	*[irrelevant] {
		display: none;
	}
	*[irrelevant="false"] {
		display: inherit;
	}
</style>
</pre>
<p><em>(Man sollte jedoch versuchen möglichst nicht <strong>irrelevant="false"</strong> zu verwenden, sondern statt dessen das Attribut ganz entfernen, da es unter Umständen bei einigen <abbr>HTML</abbr> Elementen zu Problemen in der Darstellung kommen kann.)</em></p>
<p>So kann man nun beliebige Elemente ausblenden lassen:</p>
<pre lang="html">
<P>Laut HTML 5  können nicht relevante Elemente
 ausgeblendet werden, indem ihnen das Attribut irrelevant
 zugewiesen wird. <span irrelevant="true">HTML 5 wird noch
 nicht von allen aktuellen Browsern unterstützt.</span>
 Irrelevante Elemente sind solche, die noch nicht, oder nicht
 mehr relevant sind. Das Attribut sollte auf solche Abschnitte
 angewendet werden, die im aktuellen Kontext nicht relevant
 sind, es aber später durchaus wieder werden können.</P>
</pre>
<p>Wenn man dies mit einem aktuellen Browser wie Firefox 3, Safari 3 oder <abbr title="Internet Explorer">IE</abbr> 8 betrachtet, sollte der zweite Satz nicht mehr angezeigt werden:</p>
<p><em></p>
<p>Laut HTML 5 können nicht relevante Elemente<br />
 ausgeblendet werden, indem ihnen das Attribut irrelevant<br />
 zugewiesen wird. <span irrelevant="true">HTML 5 wird noch<br />
 nicht von allen aktuellen Browsern unterstützt.</span><br />
 Irrelevante Elemente sind solche, die noch nicht, oder nicht<br />
 mehr relevant sind. Das Attribut sollte auf solche Abschnitte<br />
 angewendet werden, die im aktuellen Kontext nicht relevant<br />
 sind, es aber später durchaus wieder werden können.</p>
<p></em></p>
<h3>Elemente per <abbr title="Document Object Model">DOM</abbr> ein- und ausblenden</h3>
<p>Jetzt, da wir mit <code>irrelevant</code> gekennzeichnete Elemente vom Browser ausblenden lassen können, fehlt nur noch der entsprechende JavaScript Code, um dies auch dynamisch per Mausklick durchführen zu können:</p>
<pre lang="javascript">
function hide(elementId) {
	var el = document.getElementById(elementId);
	el.setAttribute('irrelevant',true);
}
function show(elementId) {
	var el = document.getElementById(elementId);
	el.removeAttribute('irrelevant');
}
</pre>
<h3>Fazit</h3>
<p>Wie man sieht, kann man schon heute bestimmte <a href="http://xhtml.com/de/future/x-html-5-versus-xhtml-2/">HTML5 Features</a> verwenden und so die eigenen Seiten für die Zukunft vorbereiten. Ob man das auch tun sollte, sei jedem selbst überlassen. Da ältere Browser möglicherweise mit den hier gezeigten Beispielen nicht zurecht kommen, ist dies nicht unter allen Umständen die beste Wahl. Aber da in den entsprechenden Browsern in dem Fall die zu versteckenden Inhalte einfach angezeigt werden würden, wäre auch kein größerer Schaden entstanden.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/ist-display-none-jetzt-irrelevant/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Die Sprache eines Links kennzeichnen</title>
		<link>https://webmatze.de/die-sprache-eines-links-kennzeichnen/</link>
					<comments>https://webmatze.de/die-sprache-eines-links-kennzeichnen/#respond</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Tue, 04 Sep 2007 10:28:40 +0000</pubDate>
				<category><![CDATA[HTML / XHTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://version3.webmatze.de/2007/09/04/die-sprache-eines-links-kennzeichnen/</guid>

					<description><![CDATA[HTML bietet viele Möglichkeiten, um die Nutzbarkeit der HTML Seiten zu erhöhen. Meist kann dies schon durch einfache Dinge passieren. Wie wäre es zum Beispiel, wenn alle Links einer Seite anzeigen würden, in welcher Sprache die verlinkten Seiten geschrieben sind? Hier steht wie das geht.]]></description>
										<content:encoded><![CDATA[<p>Ein bislang fast nie benutztes Attribut des <strong>&lt;a&gt;</strong> Tags ist das Attribut <strong>hreflang</strong>, welches beschreibt in welcher Sprache die Seite geschrieben ist, zu der ein Link führt. Dieses Attribut darf nur gesetzt werden, wenn auch das <strong>href</strong> Attribut angegeben wurde.</p>
<p>Doch scheint das <strong>hreflang</strong> Attribut keinen wirklichen Nutzen zu haben, da es ja in keiner Weise auf der angezeigten HTML Seite dargestellt wird. In den nächsten Abschnitten möchte ich zwei Wege zeigen, wie man das Attribut doch sichtbar machen kann.</p>
<h2>Die CSS Methode</h2>
<p>Moderne Browser wie Firefox erlauben es per CSS auf Elemente der Seite mit bestimmten Attributen zuzugreifen und diesen dann einen Style zuzuweisen. Dies geschieht, indem man den Attribut Namen in eckigen Klammern hinter den Tag Namen schreibt:</p>
<pre lang="css">a[hreflang] {
	...Styles...
}</pre>
<p><span id="more-12"></span></p>
<p>Mit ein paar weiteren 'Tricks' ist es somit möglich den Inhalt von <strong>hreflang</strong> sichtbar zu machen und z.B. hinter das entsprechende Tag anzufügen:</p>
<pre lang="css">a[hreflang]::after{
	content:" ["attr(hreflang)"]";
}</pre>
<p>Als Ergebnis bekommt man dann einen Link in folgender Form:</p>
<p><a href="http://google.com">Google.com [en]</a></p>
<p>Der Nachteil dabei ist, wie ich schon erwähnt habe, dass solche CSS Definitionen nur in modernen Browsern funktionieren und somit nicht in älteren Browsern wie dem Internet Explorer!<br />
Darum habe ich eine weitere Möglichkeit der Umsetzung ersonnen...</p>
<h2>Die JavaScript Methode</h2>
<p>JavaScript unterstützen heute die meisten Browser. Wenn man also sichergehen will, das die Darstellung der Sprache in all diesem Browsern funktioniert, kann man folgendes Script verwenden.</p>
<pre lang="javascript">function showHreflang() {
	for (var i = 0; i < document.links.length; i++) {
		var link = document.links.item(i);
		var hreflang = link.getAttribute("hreflang");
		if (hreflang != null & hreflang.length > 0) {
			var langText = document.createTextNode(" [" + hreflang + "]");
			var supNode = document.createElement("b");
			supNode.appendChild(langText);
			link.parentNode.insertBefore(supNode, link.nextSibling);
		}
	}
}</pre>
<p>Das Script durchsucht einfach alle Links auf der Seite, schaut nach ob das <strong>hreflang</strong> Attribut definiert wurde und einen Inhalt besitzt und hängt dann den Inhalt in eckigen Klammern hinter den entsprechenden Link.<br />
Sollte der Benutzer JavaScript in seinem Browser ausgeschaltet haben, schadet es auch nichts, dann wird einfach nichts angezeigt, womit derjenige dann auf jeden Fall leben kann.</p>
<h2>Hier das Ergebnis</h2>
<p>Ein Link zu einer Seite auf Deutsch <a hreflang="de" href="http://google.de">Google.de</a> und hier einer zu einer englischen Seite <a hreflang="en" href="http://google.com">Google.com</a>. Und dann darf natürlich auch ein Link nicht fehlen, der keine <strong>hreflang</strong> Angabe besitzt <a href="http://www.webmatze.de">webmatze.de</a>!</p>
<p><script type="text/javascript"><!--
function showHreflang() {
	for (var i = 0; i < document.links.length; i++) {
		var link = document.links.item(i);
		var hreflang = link.getAttribute("hreflang");
		if (hreflang != null) {
			if (hreflang.length != 0) {
				hreflang = " [" + hreflang + "]";
				var langText = document.createTextNode(hreflang);
				var supNode = document.createElement("b");
				supNode.appendChild(langText);
				link.parentNode.insertBefore(supNode, link.nextSibling);
			}
		}
	}
}
showHreflang();
// --></script></p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/die-sprache-eines-links-kennzeichnen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Das Problem mit scrip.aculo.us Effect.scroll()</title>
		<link>https://webmatze.de/das-problem-mit-scripaculous-effectscroll/</link>
					<comments>https://webmatze.de/das-problem-mit-scripaculous-effectscroll/#comments</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Thu, 10 Aug 2006 12:28:00 +0000</pubDate>
				<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://version3.webmatze.de/das-problem-mit-scripaculous-effectscroll/</guid>

					<description><![CDATA[Oliver Schwarz beschreibt in seinem Blog wie man "Unaufdringliches Scrollen in großen Webseiten" mit Hilfe von JavaScript umsetzen kann. Gemeint ist damit das Springen von einer Stelle einer bestimmten Seite zu einer anderen Stelle auf der selben Seite. Nur eben, dass der Browser nicht wirklich zur neuen Position springt, sondern weich dort hinscrollt.Dies gelingt ihm [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="http://hasematzel.de/blog/">Oliver Schwarz</a> beschreibt in seinem Blog wie man "<a href="http://hasematzel.de/blog/2006/08/05/unaufdringliches-scrollen-in-grossen-webseiten/">Unaufdringliches Scrollen in großen Webseiten</a>" mit Hilfe von JavaScript umsetzen kann. Gemeint ist damit das Springen von einer Stelle einer bestimmten Seite zu einer anderen Stelle auf der selben Seite. Nur eben, dass der Browser nicht wirklich zur neuen Position springt, sondern weich dort hinscrollt.<br />Dies gelingt ihm unter Einsatz des JavaScript Frameworks <a href="http://prototype.conio.net/">prototype </a>und der Effekt Bibliothek <a href="http://script.aculo.us/">script.aculo.us</a>. Letztere bietet eine Funktion <a href="http://wiki.script.aculo.us/scriptaculous/show/Effect.ScrollTo">Effect.scroll()</a> an, um zu jeder beliebigen Position innerhalb einer Seite scrollen zu können.<br />Auch wenn es sich bei Olivers Lösung, welche auf der <a href="http://mediastyles.de/">mediastyles </a>Seite zu bewundern ist, um einen ansehnlichen Effekt handelt, sind in den Kommentaren zu seinem Blog-Eintrag einige wichtige Bemerkungen gemacht worden.<br />In einem Kommentar beschreibt <a href="http://screenexa.net/">Christine Kühnel</a> das Problem des <a href="http://hasematzel.de/blog/2006/08/05/unaufdringliches-scrollen-in-grossen-webseiten/#comment-9668">nicht mehr funktionierenden Back-Buttons</a>.</p>
<blockquote><p>"Der Scroll-Effekt ist ganz schön, hat aber einen Nachteil: Der Back-Button funktioniert nicht mehr wie gewohnt. Ich denke, viele Leute benutzen den ganz gern, um wieder nach oben zu springen."<br />"Es gibt zwar andere Möglichkeiten, wieder auf Anfang zu springen (Tasten z.B.), aber ich denke, ein wenig bedenklich ist es immer, wenn Browser-Standard-Verhalten beeinflusst wird..."</p></blockquote>
<p>Damit spricht sie natürlich ein großes Problem bei vielen Webseiten/Webanwendungen an, welches sich auch besonders in AJAX Anwendungen wiederfinden lässt. In einem späteren Kommentar bietet sie aber auch gleich eine <a href="http://hasematzel.de/blog/2006/08/05/unaufdringliches-scrollen-in-grossen-webseiten/#comment-9680">mögliche Lösung</a> an. Durch ein Aufrufen des angesprungenen Ankers nach dem erfolgten Scrollen wird die URL im Browser geändert, was eine Verwendung des Back-Buttons wieder möglich macht. Allerdings sind dazu noch ein paar Tricks notwendig, welche dazu führen, das die Seite nach dem Scrollen kurz flackert, was den Effekt natürlich etwas unschön erscheinen lässt. Das Resultat ist <a href="http://netz-notizen.de/testereien/scroll-mit-back.html">auf dieser Testseite</a> zu betrachten.</p>
<p>Hier muss meines Erachtens nach noch eine bessere Lösung gefunden werden. Auch wenn der Effekt schön anzusehen ist, sollte man es sich momentan besser zweimal überlegen, ob solch ein Scrolleffekt eine Seite wirklich besser benutzbar macht.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/das-problem-mit-scripaculous-effectscroll/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>FireBug 0.4 &#8211; Der ultimative Web Debugger</title>
		<link>https://webmatze.de/firebug-04-der-ultimative-web-debugger/</link>
					<comments>https://webmatze.de/firebug-04-der-ultimative-web-debugger/#respond</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Wed, 24 May 2006 13:52:00 +0000</pubDate>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML / XHTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://version3.webmatze.de/firebug-04-der-ultimative-web-debugger/</guid>

					<description><![CDATA[Webseiten von heute bestehen meistens nicht nur aus HTML und CSS, sondern häufig auch viel JavaScript. Es sind häufig gar keine Webseiten mehr, sondern schon richtige Webanwendungen. Und wir alle wissen, dass Anwendungen häufig auch Fehler enthalten können. Auch Webanwendungen sind davon nicht ausgeschlossen.Bisher war es meistens schwierig solche Fehler im JavaScript Code oder im [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="http://www.joehewitt.com/software/firebug/firebug.png" style="margin: 6px; float: left;" />Webseiten von heute bestehen meistens nicht nur aus HTML und CSS, sondern häufig auch viel JavaScript. Es sind häufig gar keine Webseiten mehr, sondern schon richtige Webanwendungen. Und wir alle wissen, dass Anwendungen häufig auch Fehler enthalten können. Auch Webanwendungen sind davon nicht ausgeschlossen.<br />Bisher war es meistens schwierig solche Fehler im JavaScript Code oder im HTML zu finden. Es fehlen die richtigen Tools, wie man sie z.B. bei der Programmierung mit Java ode C++ gewohnt ist, um diese Fehler aufzuspüren und zu beheben. Da HTML, CSS und JavaScript im Browser ausgeführt und angezeigt werden, braucht man auch Tools, um sie genau da - während sie ausgeführt werden - zu debuggen. Der Browser Firefox bietet hierfür einige gute Tools an. Ein guter Debugger ist z.B. <a href="http://www.mozilla.org/projects/venkman/">Venkman</a>. Und mit dem <a href="http://www.mozilla.org/projects/inspector/">DOM Inspector</a> kann man sich bequem den DOM Tree der Seiten anschauen.<br />Doch in Zeiten von web 2.0 und Ajax braucht man noch bessere und spezialisiertere Tools. Und eins dieser "Übertools" ist <a href="http://www.joehewitt.com/software/firebug/">FireBug</a>, welches jetzt in der <a href="http://www.joehewitt.com/blog/firebug_04_come.php">Version 0.4</a> erschienen ist.<br style="clear: both;" /><br />Hier ein kurzer Überblick über die neuenFeatures:<br /><b><br />JavaScript Debugger</b></p>
<p>FireBug ermöglicht es, Breakpoints im JavaScript Code zu setzen, Schritt für Schritt durch die Codezeilen zu springen und lokale Variablen sowie den Stack zu betrachten.</p>
<p><b>Stack Traces bei JavaScript Fehlern</b></p>
<p>Jeder JavaScript Fehler wird mit einem Stack Trace angezeigt. So kann man genau sehen, an welcher Stelle im Code und durch welchen Aufruf ein Fehler genau aufgetreten ist.</p>
<p><b>JavaScript Fehler debuggen</b></p>
<p>Wenn ein Fehler auftritt, reicht es meistens nicht, nur den Stack Trace zu sehen. Meistens möchte man auch sehen, welche Werte bestimmte Variablen gerade hatten, als der Fehler auftrat. Mit FireBug kann man durch die Einstellung "Break On Error" den Debugger automatisch anhalten lassen, wenn ein Fehler auftritt. Man wird dann sofort zur richtigen Stelle im Code gebracht.<br /><b><br />Logging Funktionalitäten</b></p>
<p>Über das <i>console </i>Objekt kann man verschiedene Nachrichten auf der Konsole ausgeben lassen, während der JavaScript Code ausgeführt wird. Dabei kann man verschiedene Stufen wählen, wie z.B. <i>console.debug()</i>, <i>console.info()</i>, <i>console.warn()</i> oder <i>console.error()</i>. Diese Meldungen werden dann auch noch in unterschiedlicher Farbdarstellung in der Konsole kenntlich gemacht.</p>
<p>Außerdem besitzt FireBug noch viele weitere wichtige und nützliche Funktionen. So kann man sich detailiert den Request anschauen, der bei Ajax gesendet wird. FireBug liefert auch eine sinnvolle JavaScript command line, um schnell kleine JavaScript Schnipsel ausführen zu können. Und über die verschiedensten Inspektoren können alle möglichen Aspekte von HTML, DOM, CSS und JavaScript genau betrachtet werden.</p>
<p>Ich finde das FireBug ein "Must Have" Tool für Webentwickler ist. Es läßt sich leicht als Erweiterung in den aktuellen <a href="http://www.mozilla.com/firefox/">Firefox 1.5 Browser</a> integrieren.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/firebug-04-der-ultimative-web-debugger/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>cloneNode() Problem bei TextAreas im Firefox</title>
		<link>https://webmatze.de/clonenode-problem-bei-textareas-im-firefox/</link>
					<comments>https://webmatze.de/clonenode-problem-bei-textareas-im-firefox/#comments</comments>
		
		<dc:creator><![CDATA[Mathias Karstädt]]></dc:creator>
		<pubDate>Fri, 24 Mar 2006 17:31:00 +0000</pubDate>
				<category><![CDATA[Browser]]></category>
		<category><![CDATA[HTML / XHTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<guid isPermaLink="false">http://version3.webmatze.de/clonenode-problem-bei-textareas-im-firefox/</guid>

					<description><![CDATA[Bei einem aktuellen Projekt benötigte ich eine Möglichkeit, bestimmte Inhalte einer Webseite zu Drucken. Dazu habe ich mir per JavaScript einen Bereich der Seite genommen, diesen geclont, ein neues Fenster geöffnet und dort den geclonten Bereich wieder eingefügt. Falls sich in diesem geclonten Bereich interaktive Elemente wie Butons, Links oder Eingabefelder befanden, habe ich diese [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Bei einem aktuellen Projekt benötigte ich eine Möglichkeit, bestimmte Inhalte einer Webseite zu Drucken. Dazu habe ich mir per JavaScript einen Bereich der Seite genommen, diesen geclont, ein neues Fenster geöffnet und dort den geclonten Bereich wieder eingefügt.</p>
<p>Falls sich in diesem geclonten Bereich interaktive Elemente wie Butons, Links oder Eingabefelder befanden, habe ich diese ebenfalls mittels JavaScript entfernt oder den Textinhalt der Eingabefelder bzw. Textareas kopiert und als Text an die gleiche Stelle wieder eingefügt. Als Ergebnis gibt es dann eine HTML Seite ohne Links und Buttons.</p>
<p>So weit so gut, aber da gibt es ein Problem, welches mir vorher noch nicht bewußt war und was ich auch noch nirgendwo dokumentiert sah. Wenn man im Firefox eine Textarea clont in welche der User zuvor noch Inhalte eingegeben hat, werden diese Inhalte nicht mitgeclont. Im Internet Explorer funktioniert dies richtig. Ich habe dazu mal eine Testseite erstellt, wo man dieses Verhalten nachprüfen kann. Getestet habe ich es zur Zeit nur im Firefox 1.5!</p>
<p><a href="http://old.webmatze.de/samples/textarea_clone.html">Node.cloneNode() Test</a></p>
<p>Ich werde mal weiter nachforschen, ob dies ein gewolltes Verhalten von den Firefox Entwicklern ist, oder ob es dafür schon Bugeinträge in Bugzilla gibt.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webmatze.de/clonenode-problem-bei-textareas-im-firefox/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
