<?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>Arquivos Desenvolvedor &amp; Código - Web-Zoneware</title>
	<atom:link href="https://webzoneware.com/categoria/web-ferramentas/dev/feed/" rel="self" type="application/rss+xml" />
	<link>https://webzoneware.com/categoria/web-ferramentas/dev/</link>
	<description>Mais do que apenas uma academia web.</description>
	<lastBuildDate>Thu, 22 Oct 2026 18:21:49 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://webzoneware.com/wp-content/uploads/icon-webzoneware-150x150.png</url>
	<title>Arquivos Desenvolvedor &amp; Código - Web-Zoneware</title>
	<link>https://webzoneware.com/categoria/web-ferramentas/dev/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Gerador de Código de Imagem onMouseOver: Efeitos de Troca e Hover &#124; Web-ZoneWare</title>
		<link>https://webzoneware.com/web-ferramentas/dev/gerador-de-codigo-de-imagem-onmouseover/</link>
					<comments>https://webzoneware.com/web-ferramentas/dev/gerador-de-codigo-de-imagem-onmouseover/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Sun, 19 Feb 2023 16:28:58 +0000</pubDate>
				<category><![CDATA[Desenvolvedor & Código]]></category>
		<category><![CDATA[Gerador de Código de Imagem]]></category>
		<category><![CDATA[Gerador de Código de Imagem onMouseover]]></category>
		<category><![CDATA[image onMouseover]]></category>
		<category><![CDATA[Imagem onMouseover]]></category>
		<category><![CDATA[troca imagens ao passar do mouse]]></category>
		<guid isPermaLink="false">https://webzoneware.com/?p=27256</guid>

					<description><![CDATA[<p>O Gerador de Código de Imagem onMouseOver é a solução definitiva para web designers, desenvolvedores de e-commerce e criadores de conteúdo que desejam implementar efeitos dinâmicos de troca de imagem ao passar o cursor do mouse. Escolha entre transições fluidas em CSS3 Puro (sem JavaScript, alta performance e 100% Core Web Vitals) ou JavaScript Clássico [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-ferramentas/dev/gerador-de-codigo-de-imagem-onmouseover/">Gerador de Código de Imagem onMouseOver: Efeitos de Troca e Hover | Web-ZoneWare</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><!-- INTRODUÇÃO DA FERRAMENTA --></p>
<p class="wzw-lead-text">O <strong>Gerador de Código de Imagem onMouseOver</strong> é a solução definitiva para web designers, desenvolvedores de e-commerce e criadores de conteúdo que desejam implementar efeitos dinâmicos de troca de imagem ao passar o cursor do mouse. Escolha entre transições fluidas em <strong>CSS3 Puro</strong> (sem JavaScript, alta performance e 100% Core Web Vitals) ou <strong>JavaScript Clássico Inline</strong> com pré-carregamento contra travamentos, visualizando o resultado ao vivo antes de copiar o código pronto.</p>
<p><!-- SHORTCODE NATIVO DEDICADO --><br />
        <div id="wzw_hov_IUIxSq" class="wzw-tool-container wzw-mouseover-box">
            <style>
                #wzw_hov_IUIxSq.wzw-mouseover-box {
                    font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif !important;
                    background: linear-gradient(135deg, #090d16 0%, #171d2b 100%) !important;
                    border: 1px solid #334155 !important;
                    border-radius: 16px !important;
                    padding: 24px !important;
                    color: #f8fafc !important;
                    margin: 24px 0 !important;
                    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.5) !important;
                }
                #wzw_hov_IUIxSq * { box-sizing: border-box !important; }
                #wzw_hov_IUIxSq .wzw-hov-header {
                    text-align: center !important;
                    margin-bottom: 24px !important;
                    border-bottom: 1px solid #334155 !important;
                    padding-bottom: 16px !important;
                }
                #wzw_hov_IUIxSq .wzw-hov-title {
                    font-size: 1.5rem !important;
                    font-weight: 700 !important;
                    color: #38bdf8 !important;
                    margin: 0 0 8px 0 !important;
                    display: flex !important;
                    align-items: center !important;
                    justify-content: center !important;
                    gap: 10px !important;
                }
                #wzw_hov_IUIxSq .wzw-hov-desc {
                    font-size: 0.95rem !important;
                    color: #94a3b8 !important;
                    margin: 0 !important;
                }
                #wzw_hov_IUIxSq .wzw-hov-presets {
                    display: flex !important;
                    flex-wrap: wrap !important;
                    gap: 8px !important;
                    justify-content: center !important;
                    margin-bottom: 20px !important;
                }
                #wzw_hov_IUIxSq .wzw-preset-btn {
                    background: #1e293b !important;
                    border: 1px solid #475569 !important;
                    color: #cbd5e1 !important;
                    padding: 6px 14px !important;
                    border-radius: 20px !important;
                    font-size: 0.8rem !important;
                    font-weight: 600 !important;
                    cursor: pointer !important;
                    transition: all 0.2s ease !important;
                }
                #wzw_hov_IUIxSq .wzw-preset-btn:hover {
                    background: #38bdf8 !important;
                    color: #0f172a !important;
                    border-color: #38bdf8 !important;
                }
                #wzw_hov_IUIxSq .wzw-hov-grid {
                    display: grid !important;
                    grid-template-columns: 1fr 1fr !important;
                    gap: 24px !important;
                    align-items: start !important;
                }
                @media (max-width: 900px) {
                    #wzw_hov_IUIxSq .wzw-hov-grid {
                        grid-template-columns: 1fr !important;
                    }
                }
                #wzw_hov_IUIxSq .wzw-hov-panel {
                    background: #1e293b !important;
                    padding: 20px !important;
                    border-radius: 12px !important;
                    border: 1px solid #334155 !important;
                }
                #wzw_hov_IUIxSq .wzw-hov-panel h3 {
                    font-size: 1rem !important;
                    margin: 0 0 16px 0 !important;
                    color: #38bdf8 !important;
                    display: flex !important;
                    align-items: center !important;
                    gap: 8px !important;
                }
                #wzw_hov_IUIxSq .wzw-field-group {
                    margin-bottom: 14px !important;
                }
                #wzw_hov_IUIxSq .wzw-field-group label {
                    display: block !important;
                    font-size: 0.85rem !important;
                    color: #cbd5e1 !important;
                    margin-bottom: 6px !important;
                    font-weight: 600 !important;
                }
                #wzw_hov_IUIxSq .wzw-field-input,
                #wzw_hov_IUIxSq .wzw-field-select {
                    width: 100% !important;
                    background: #0f172a !important;
                    border: 1px solid #475569 !important;
                    color: #f8fafc !important;
                    padding: 8px 12px !important;
                    border-radius: 8px !important;
                    font-size: 0.88rem !important;
                }
                #wzw_hov_IUIxSq .wzw-field-input:focus,
                #wzw_hov_IUIxSq .wzw-field-select:focus {
                    outline: none !important;
                    border-color: #38bdf8 !important;
                }
                #wzw_hov_IUIxSq .wzw-upload-row {
                    display: flex !important;
                    gap: 8px !important;
                    margin-top: 6px !important;
                }
                #wzw_hov_IUIxSq .wzw-file-btn {
                    background: #334155 !important;
                    border: 1px solid #475569 !important;
                    color: #e2e8f0 !important;
                    padding: 6px 12px !important;
                    border-radius: 6px !important;
                    font-size: 0.78rem !important;
                    font-weight: 600 !important;
                    cursor: pointer !important;
                    white-space: nowrap !important;
                    transition: background 0.2s !important;
                }
                #wzw_hov_IUIxSq .wzw-file-btn:hover {
                    background: #475569 !important;
                }
                #wzw_hov_IUIxSq .wzw-range-row {
                    display: flex !important;
                    align-items: center !important;
                    gap: 12px !important;
                }
                #wzw_hov_IUIxSq .wzw-range-row input[type="range"] {
                    flex: 1 !important;
                    accent-color: #38bdf8 !important;
                }
                #wzw_hov_IUIxSq .wzw-range-val {
                    font-size: 0.85rem !important;
                    color: #38bdf8 !important;
                    font-weight: 700 !important;
                    min-width: 45px !important;
                    text-align: right !important;
                }
                /* Preview Box */
                #wzw_hov_IUIxSq .wzw-preview-container {
                    background: #0b1120 !important;
                    border-radius: 12px !important;
                    border: 2px dashed #334155 !important;
                    padding: 24px !important;
                    display: flex !important;
                    flex-direction: column !important;
                    align-items: center !important;
                    justify-content: center !important;
                    min-height: 280px !important;
                    position: relative !important;
                }
                #wzw_hov_IUIxSq .wzw-preview-tip {
                    font-size: 0.8rem !important;
                    color: #94a3b8 !important;
                    margin-bottom: 16px !important;
                    font-weight: 600 !important;
                    display: flex !important;
                    align-items: center !important;
                    gap: 6px !important;
                }
                /* Tabs */
                #wzw_hov_IUIxSq .wzw-tabs {
                    display: flex !important;
                    gap: 6px !important;
                    margin-top: 20px !important;
                    border-bottom: 2px solid #334155 !important;
                    padding-bottom: 0 !important;
                }
                #wzw_hov_IUIxSq .wzw-tab-btn {
                    background: transparent !important;
                    border: none !important;
                    color: #94a3b8 !important;
                    padding: 8px 16px !important;
                    font-size: 0.85rem !important;
                    font-weight: 600 !important;
                    cursor: pointer !important;
                    border-radius: 8px 8px 0 0 !important;
                    border-bottom: 2px solid transparent !important;
                    margin-bottom: -2px !important;
                    transition: all 0.2s !important;
                }
                #wzw_hov_IUIxSq .wzw-tab-btn.active {
                    color: #38bdf8 !important;
                    border-bottom-color: #38bdf8 !important;
                    background: rgba(56, 189, 248, 0.1) !important;
                }
                #wzw_hov_IUIxSq .wzw-code-wrapper {
                    position: relative !important;
                    margin-top: 12px !important;
                }
                #wzw_hov_IUIxSq textarea.is-dark {
                    width: 100% !important;
                    min-height: 170px !important;
                    background: #0f172a !important;
                    color: #38bdf8 !important;
                    border: 1px solid #334155 !important;
                    border-radius: 8px !important;
                    padding: 14px !important;
                    font-family: 'Consolas', 'Monaco', 'Courier New', monospace !important;
                    font-size: 0.82rem !important;
                    line-height: 1.5 !important;
                    resize: vertical !important;
                }
                #wzw_hov_IUIxSq .wzw-copy-btn {
                    position: absolute !important;
                    top: 10px !important;
                    right: 10px !important;
                    background: #0284c7 !important;
                    color: #ffffff !important;
                    border: none !important;
                    padding: 6px 14px !important;
                    border-radius: 6px !important;
                    font-size: 0.8rem !important;
                    font-weight: 600 !important;
                    cursor: pointer !important;
                    display: flex !important;
                    align-items: center !important;
                    gap: 6px !important;
                    transition: background 0.2s !important;
                    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3) !important;
                }
                #wzw_hov_IUIxSq .wzw-copy-btn:hover {
                    background: #0369a1 !important;
                }
                #wzw_hov_IUIxSq .wzw-copy-btn.copied {
                    background: #10b981 !important;
                }
            </style>

            <div class="wzw-hov-header">
                <h2 class="wzw-hov-title">🔄 Gerador de Imagem onMouseOver &amp; Hover</h2>
                <p class="wzw-hov-desc">Crie códigos elegantes de troca de imagem e transições dinâmicas ao passar o mouse em CSS3 Puro ou JavaScript</p>
            </div>

            <!-- Presets Rápidos -->
            <div class="wzw-hov-presets">
                <span style="font-size:0.8rem;color:#94a3b8;align-self:center;font-weight:600;">Presets de Exemplo:</span>
                <button type="button" class="wzw-preset-btn" data-preset="produto">👕 Produto Frente / Verso</button>
                <button type="button" class="wzw-preset-btn" data-preset="retrato">😊 Retrato Sério / Sorrindo</button>
                <button type="button" class="wzw-preset-btn" data-preset="dia-noite">🌄 Dia &amp; Noite</button>
                <button type="button" class="wzw-preset-btn" data-preset="pb-color">🎨 P&amp;B para Colorido</button>
            </div>

            <div class="wzw-hov-grid">
                <!-- Painel de Configurações -->
                <div class="wzw-hov-panel">
                    <h3>⚙️ Configuração das Imagens</h3>

                    <!-- Imagem 1 (Padrão) -->
                    <div class="wzw-field-group">
                        <label for="wzw_hov_IUIxSq_img1">Imagem Padrão (Normal):</label>
                        <input type="text" id="wzw_hov_IUIxSq_img1" class="wzw-field-input" value="https://images.unsplash.com/photo-1523381294911-8d3cead13475?auto=format&fit=crop&w=600&q=80">
                        <div class="wzw-upload-row">
                            <label class="wzw-file-btn">
                                📁 Carregar do Computador
                                <input type="file" id="wzw_hov_IUIxSq_file1" accept="image/*" style="display:none;">
                            </label>
                        </div>
                    </div>

                    <!-- Imagem 2 (Hover) -->
                    <div class="wzw-field-group">
                        <label for="wzw_hov_IUIxSq_img2">Imagem no Hover (onMouseOver):</label>
                        <input type="text" id="wzw_hov_IUIxSq_img2" class="wzw-field-input" value="https://images.unsplash.com/photo-1503342217505-b0a15ec3261c?auto=format&fit=crop&w=600&q=80">
                        <div class="wzw-upload-row">
                            <label class="wzw-file-btn">
                                📁 Carregar do Computador
                                <input type="file" id="wzw_hov_IUIxSq_file2" accept="image/*" style="display:none;">
                            </label>
                        </div>
                    </div>

                    <!-- Efeito de Transição -->
                    <div class="wzw-field-group">
                        <label for="wzw_hov_IUIxSq_effect">Efeito de Transição:</label>
                        <select id="wzw_hov_IUIxSq_effect" class="wzw-field-select">
                            <option value="fade" selected>Dissolver Suave (Fade / Opacidade)</option>
                            <option value="zoom">Zoom Suave (Ken Burns / Scale)</option>
                            <option value="flip">Flip 3D (Giro de Carta 180°)</option>
                            <option value="slide">Deslizar Lateral (Slide Left)</option>
                            <option value="grayscale">P&amp;B para Colorido (Grayscale Filter)</option>
                            <option value="instant">Troca Instantânea (onmouseover clássico)</option>
                        </select>
                    </div>

                    <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
                        <!-- Duração -->
                        <div class="wzw-field-group">
                            <label>Duração: <span class="wzw-range-val" id="wzw_hov_IUIxSq_dur_txt">0.4s</span></label>
                            <div class="wzw-range-row">
                                <input type="range" id="wzw_hov_IUIxSq_dur" min="0.1" max="1.5" step="0.1" value="0.4">
                            </div>
                        </div>

                        <!-- Borda Arredondada -->
                        <div class="wzw-field-group">
                            <label>Arredondamento: <span class="wzw-range-val" id="wzw_hov_IUIxSq_rad_txt">12px</span></label>
                            <div class="wzw-range-row">
                                <input type="range" id="wzw_hov_IUIxSq_rad" min="0" max="40" step="2" value="12">
                            </div>
                        </div>
                    </div>

                    <!-- SEO & Link -->
                    <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
                        <div class="wzw-field-group">
                            <label for="wzw_hov_IUIxSq_alt">Texto Alt (SEO):</label>
                            <input type="text" id="wzw_hov_IUIxSq_alt" class="wzw-field-input" value="Visualização de Produto com Hover">
                        </div>
                        <div class="wzw-field-group">
                            <label for="wzw_hov_IUIxSq_href">Link de Destino (Opcional):</label>
                            <input type="text" id="wzw_hov_IUIxSq_href" class="wzw-field-input" placeholder="https://seusite.com/produto">
                        </div>
                    </div>
                </div>

                <!-- Painel de Pré-visualização e Códigos -->
                <div class="wzw-hov-panel">
                    <h3>👁️ Pré-visualização Interativa</h3>
                    <div class="wzw-preview-container">
                        <div class="wzw-preview-tip">👆 Passe o cursor do mouse sobre a imagem abaixo:</div>
                        <div id="wzw_hov_IUIxSq_preview_target" style="width:100%;max-width:340px;margin:0 auto;display:flex;justify-content:center;">
                            <!-- Injetado dinamicamente -->
                        </div>
                    </div>

                    <!-- Tabs de Código -->
                    <div class="wzw-tabs">
                        <button type="button" class="wzw-tab-btn active" data-tab="css">CSS3 Moderno</button>
                        <button type="button" class="wzw-tab-btn" data-tab="js">JavaScript Clássico</button>
                        <button type="button" class="wzw-tab-btn" data-tab="wp">WordPress (HTML)</button>
                    </div>

                    <div class="wzw-code-wrapper">
                        <button type="button" class="wzw-copy-btn" id="wzw_hov_IUIxSq_copy_btn">
                            📋 Copiar Código
                        </button>
                        <textarea id="wzw_hov_IUIxSq_output" class="is-dark" readonly></textarea>
                    </div>
                </div>
            </div>
        </div>

        <script>
        (function() {
            var root = document.getElementById('wzw_hov_IUIxSq');
            if (!root) return;

            var img1Input = root.querySelector('#wzw_hov_IUIxSq_img1');
            var img2Input = root.querySelector('#wzw_hov_IUIxSq_img2');
            var file1Input = root.querySelector('#wzw_hov_IUIxSq_file1');
            var file2Input = root.querySelector('#wzw_hov_IUIxSq_file2');
            var effectSelect = root.querySelector('#wzw_hov_IUIxSq_effect');
            var durSlider = root.querySelector('#wzw_hov_IUIxSq_dur');
            var durTxt = root.querySelector('#wzw_hov_IUIxSq_dur_txt');
            var radSlider = root.querySelector('#wzw_hov_IUIxSq_rad');
            var radTxt = root.querySelector('#wzw_hov_IUIxSq_rad_txt');
            var altInput = root.querySelector('#wzw_hov_IUIxSq_alt');
            var hrefInput = root.querySelector('#wzw_hov_IUIxSq_href');
            var previewTarget = root.querySelector('#wzw_hov_IUIxSq_preview_target');
            var outputArea = root.querySelector('#wzw_hov_IUIxSq_output');
            var copyBtn = root.querySelector('#wzw_hov_IUIxSq_copy_btn');
            var tabBtns = root.querySelectorAll('.wzw-tab-btn');
            var presetBtns = root.querySelectorAll('.wzw-preset-btn');

            var currentTab = 'css';

            // Presets
            var presets = {
                'produto': {
                    img1: 'https://images.unsplash.com/photo-1523381294911-8d3cead13475?auto=format&fit=crop&w=600&q=80',
                    img2: 'https://images.unsplash.com/photo-1503342217505-b0a15ec3261c?auto=format&fit=crop&w=600&q=80',
                    effect: 'fade',
                    alt: 'Camiseta Estilizada Frente e Verso'
                },
                'retrato': {
                    img1: 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?auto=format&fit=crop&w=600&q=80',
                    img2: 'https://images.unsplash.com/photo-1517841905240-472988babdf9?auto=format&fit=crop&w=600&q=80',
                    effect: 'zoom',
                    alt: 'Retrato Fotográfico Expressivo'
                },
                'dia-noite': {
                    img1: 'https://images.unsplash.com/photo-1506744038136-46273834b3fb?auto=format&fit=crop&w=600&q=80',
                    img2: 'https://images.unsplash.com/photo-1519681393784-d120267933ba?auto=format&fit=crop&w=600&q=80',
                    effect: 'flip',
                    alt: 'Paisagem Natural Dia e Noite'
                },
                'pb-color': {
                    img1: 'https://images.unsplash.com/photo-1469474968028-56623f02e42e?auto=format&fit=crop&w=600&q=80',
                    img2: 'https://images.unsplash.com/photo-1469474968028-56623f02e42e?auto=format&fit=crop&w=600&q=80',
                    effect: 'grayscale',
                    alt: 'Fotografia de Natureza Artística'
                }
            };

            function handleFileUpload(fileInput, textInput) {
                if (fileInput.files && fileInput.files[0]) {
                    var reader = new FileReader();
                    reader.onload = function(e) {
                        textInput.value = e.target.result;
                        updateAll();
                    };
                    reader.readAsDataURL(fileInput.files[0]);
                }
            }

            file1Input.addEventListener('change', function() { handleFileUpload(file1Input, img1Input); });
            file2Input.addEventListener('change', function() { handleFileUpload(file2Input, img2Input); });

            presetBtns.forEach(function(btn) {
                btn.addEventListener('click', function() {
                    var key = this.getAttribute('data-preset');
                    if (presets[key]) {
                        img1Input.value = presets[key].img1;
                        img2Input.value = presets[key].img2;
                        effectSelect.value = presets[key].effect;
                        altInput.value = presets[key].alt;
                        updateAll();
                    }
                });
            });

            tabBtns.forEach(function(tab) {
                tab.addEventListener('click', function() {
                    tabBtns.forEach(function(b) { b.classList.remove('active'); });
                    this.classList.add('active');
                    currentTab = this.getAttribute('data-tab');
                    renderCode();
                });
            });

            durSlider.addEventListener('input', function() {
                durTxt.textContent = this.value + 's';
                updateAll();
            });

            radSlider.addEventListener('input', function() {
                radTxt.textContent = this.value + 'px';
                updateAll();
            });

            [img1Input, img2Input, effectSelect, altInput, hrefInput].forEach(function(el) {
                el.addEventListener('input', updateAll);
                el.addEventListener('change', updateAll);
            });

            function updateAll() {
                renderPreview();
                renderCode();
            }

            function renderPreview() {
                var img1 = img1Input.value.trim() || 'https://images.unsplash.com/photo-1523381294911-8d3cead13475?auto=format&fit=crop&w=600&q=80';
                var img2 = img2Input.value.trim() || 'https://images.unsplash.com/photo-1503342217505-b0a15ec3261c?auto=format&fit=crop&w=600&q=80';
                var effect = effectSelect.value;
                var dur = durSlider.value + 's';
                var rad = radSlider.value + 'px';
                var alt = altInput.value || 'Imagem com Hover';

                var html = '';
                var commonStyle = 'width:100%;max-width:320px;height:240px;position:relative;border-radius:' + rad + ';overflow:hidden;box-shadow:0 8px 24px rgba(0,0,0,0.4);cursor:pointer;';

                if (effect === 'fade') {
                    html = '<div style="' + commonStyle + '">' +
                        '<img decoding="async" src="' + img1 + '" alt="' + alt + '" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;transition:opacity ' + dur + ' ease;">' +
                        '<img decoding="async" src="' + img2 + '" alt="' + alt + '" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity ' + dur + ' ease;" onmouseover="this.style.opacity=1" onmouseout="this.style.opacity=0">' +
                        '</div>';
                } else if (effect === 'zoom') {
                    html = '<div style="' + commonStyle + '">' +
                        '<img decoding="async" src="' + img1 + '" alt="' + alt + '" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;transition:all ' + dur + ' ease;">' +
                        '<img decoding="async" src="' + img2 + '" alt="' + alt + '" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;opacity:0;transform:scale(1.1);transition:all ' + dur + ' ease;" onmouseover="this.style.opacity=1;this.style.transform=\'scale(1)\'" onmouseout="this.style.opacity=0;this.style.transform=\'scale(1.1)\'">' +
                        '</div>';
                } else if (effect === 'flip') {
                    html = '<div style="' + commonStyle + 'perspective:1000px;" onmouseover="this.querySelector(\'.flip-inner\').style.transform=\'rotateY(180deg)\'" onmouseout="this.querySelector(\'.flip-inner\').style.transform=\'rotateY(0deg)\'">' +
                        '<div class="flip-inner" style="position:relative;width:100%;height:100%;transition:transform ' + dur + ';transform-style:preserve-3d;">' +
                        '<img decoding="async" src="' + img1 + '" alt="' + alt + '" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;backface-visibility:hidden;">' +
                        '<img decoding="async" src="' + img2 + '" alt="' + alt + '" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;backface-visibility:hidden;transform:rotateY(180deg);">' +
                        '</div></div>';
                } else if (effect === 'slide') {
                    html = '<div style="' + commonStyle + '">' +
                        '<img decoding="async" src="' + img1 + '" alt="' + alt + '" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;">' +
                        '<img decoding="async" src="' + img2 + '" alt="' + alt + '" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;transform:translateX(-100%);transition:transform ' + dur + ' ease;" onmouseover="this.style.transform=\'translateX(0)\'" onmouseout="this.style.transform=\'translateX(-100%)\'">' +
                        '</div>';
                } else if (effect === 'grayscale') {
                    html = '<div style="' + commonStyle + '">' +
                        '<img decoding="async" src="' + img1 + '" alt="' + alt + '" style="width:100%;height:100%;object-fit:cover;filter:grayscale(100%);transition:filter ' + dur + ' ease, transform ' + dur + ' ease;" onmouseover="this.style.filter=\'grayscale(0%)\';this.style.transform=\'scale(1.05)\'" onmouseout="this.style.filter=\'grayscale(100%)\';this.style.transform=\'scale(1)\'">' +
                        '</div>';
                } else { // Instant (onmouseover clássico)
                    html = '<div style="' + commonStyle + '">' +
                        '<img decoding="async" src="' + img1 + '" alt="' + alt + '" style="width:100%;height:100%;object-fit:cover;" onmouseover="this.src=\'' + img2 + '\'" onmouseout="this.src=\'' + img1 + '\'">' +
                        '</div>';
                }

                previewTarget.innerHTML = html;
            }

            function renderCode() {
                var img1 = img1Input.value.trim() || 'https://seusite.com/imagem-padrao.jpg';
                var img2 = img2Input.value.trim() || 'https://seusite.com/imagem-hover.jpg';
                var effect = effectSelect.value;
                var dur = durSlider.value + 's';
                var rad = radSlider.value + 'px';
                var alt = altInput.value || 'Imagem com Hover';
                var href = hrefInput.value.trim();

                var code = '';
                var rndClass = 'img-hover-' + Math.floor(1000 + Math.random() * 9000);

                if (currentTab === 'css') {
                    code = '<!-- CSS3 Moderno: Efeito ' + effect.toUpperCase() + ' (Sem dependência de JS) -->\n' +
                           '<style>\n' +
                           '.' + rndClass + ' {\n' +
                           '  position: relative;\n' +
                           '  display: inline-block;\n' +
                           '  width: 100%;\n' +
                           '  max-width: 400px;\n' +
                           '  height: 260px;\n' +
                           '  border-radius: ' + rad + ';\n' +
                           '  overflow: hidden;\n' +
                           '  box-shadow: 0 8px 20px rgba(0,0,0,0.2);\n' +
                           '}\n' +
                           '.' + rndClass + ' img {\n' +
                           '  position: absolute;\n' +
                           '  top: 0;\n' +
                           '  left: 0;\n' +
                           '  width: 100%;\n' +
                           '  height: 100%;\n' +
                           '  object-fit: cover;\n';

                    if (effect === 'fade') {
                        code += '  transition: opacity ' + dur + ' ease;\n' +
                                '}\n' +
                                '.' + rndClass + ' .img-hover {\n' +
                                '  opacity: 0;\n' +
                                '}\n' +
                                '.' + rndClass + ':hover .img-hover {\n' +
                                '  opacity: 1;\n' +
                                '}\n';
                    } else if (effect === 'zoom') {
                        code += '  transition: all ' + dur + ' ease;\n' +
                                '}\n' +
                                '.' + rndClass + ' .img-hover {\n' +
                                '  opacity: 0;\n' +
                                '  transform: scale(1.1);\n' +
                                '}\n' +
                                '.' + rndClass + ':hover .img-hover {\n' +
                                '  opacity: 1;\n' +
                                '  transform: scale(1);\n' +
                                '}\n';
                    } else if (effect === 'grayscale') {
                        code += '  filter: grayscale(100%);\n' +
                                '  transition: filter ' + dur + ' ease, transform ' + dur + ' ease;\n' +
                                '}\n' +
                                '.' + rndClass + ':hover img {\n' +
                                '  filter: grayscale(0%);\n' +
                                '  transform: scale(1.05);\n' +
                                '}\n';
                    } else if (effect === 'slide') {
                        code += '  transition: transform ' + dur + ' ease;\n' +
                                '}\n' +
                                '.' + rndClass + ' .img-hover {\n' +
                                '  transform: translateX(-100%);\n' +
                                '}\n' +
                                '.' + rndClass + ':hover .img-hover {\n' +
                                '  transform: translateX(0);\n' +
                                '}\n';
                    } else { // Default flip or simple
                        code += '  transition: opacity ' + dur + ' ease;\n' +
                                '}\n' +
                                '.' + rndClass + ' .img-hover {\n' +
                                '  opacity: 0;\n' +
                                '}\n' +
                                '.' + rndClass + ':hover .img-hover {\n' +
                                '  opacity: 1;\n' +
                                '}\n';
                    }
                    code += '</style>\n\n';

                    var wrapperOpen = href ? '<a href="' + href + '" class="' + rndClass + '">' : '<div class="' + rndClass + '">';
                    var wrapperClose = href ? '</a>' : '</div>';

                    if (effect === 'grayscale') {
                        code += wrapperOpen + '\n' +
                                '  <img decoding="async" src="' + img1 + '" alt="' + alt + '">\n' +
                                wrapperClose;
                    } else {
                        code += wrapperOpen + '\n' +
                                '  <img decoding="async" src="' + img1 + '" alt="' + alt + '" class="img-base">\n' +
                                '  <img decoding="async" src="' + img2 + '" alt="' + alt + '" class="img-hover">\n' +
                                wrapperClose;
                    }

                } else if (currentTab === 'js') {
                    code = '<!-- Troca Clássica via JavaScript (onmouseover / onmouseout) -->\n';
                    if (href) {
                        code += '<a href="' + href + '">\n';
                    }
                    code += '<img decoding="async" src="' + img1 + '"\n' +
                            '     alt="' + alt + '"\n' +
                            '     style="width: 100%; max-width: 400px; border-radius: ' + rad + '; cursor: pointer;"\n' +
                            '     onmouseover="this.src=\'' + img2 + '\';"\n' +
                            '     onmouseout="this.src=\'' + img1 + '\';">\n';
                    if (href) {
                        code += '</a>\n';
                    }
                    code += '\n<!-- Script de Pré-carregamento para evitar atraso (Flicker) -->\n' +
                            '<script>\n' +
                            '(function(){\n' +
                            '  var imgPreload = new Image();\n' +
                            '  imgPreload.src = "' + img2 + '";\n' +
                            '})();\n' +
                            '<\/script>';

                } else if (currentTab === 'wp') {
                    code = '<!-- Bloco HTML Personalizado para WordPress / Gutenberg / Elementor -->\n' +
                           '<div style="text-align: center; margin: 20px 0;">\n';
                    if (href) {
                        code += '  <a href="' + href + '" target="_blank" rel="noopener noreferrer">\n';
                    }
                    code += '    <img decoding="async" src="' + img1 + '"\n' +
                            '         alt="' + alt + '"\n' +
                            '         style="max-width: 100%; height: auto; border-radius: ' + rad + '; box-shadow: 0 4px 15px rgba(0,0,0,0.15); transition: transform ' + dur + ' ease;"\n' +
                            '         onmouseover="this.src=\'' + img2 + '\'; this.style.transform=\'scale(1.02)\';"\n' +
                            '         onmouseout="this.src=\'' + img1 + '\'; this.style.transform=\'scale(1)\';">\n';
                    if (href) {
                        code += '  </a>\n';
                    }
                    code += '</div>\n' +
                            '<script>\n' +
                            '  if (typeof window.wzwPreloaded === "undefined") { window.wzwPreloaded = []; }\n' +
                            '  var pImg = new Image(); pImg.src = "' + img2 + '"; window.wzwPreloaded.push(pImg);\n' +
                            '<\/script>';
                }

                outputArea.value = code;
            }

            copyBtn.addEventListener('click', function() {
                outputArea.select();
                try {
                    navigator.clipboard.writeText(outputArea.value);
                } catch(e) {
                    document.execCommand('copy');
                }
                copyBtn.classList.add('copied');
                copyBtn.textContent = '✅ Copiado!';
                setTimeout(function() {
                    copyBtn.classList.remove('copied');
                    copyBtn.textContent = '📋 Copiar Código';
                }, 2000);
            });

            // Inicializa
            updateAll();
        })();
        </script>
        </p>
<p><!-- PASSO A PASSO --></p>
<h2>Como Criar Efeitos de Imagem onMouseOver</h2>
<ol>
<li><strong>Imagens de Origem:</strong> Insira a URL ou faça o upload direto do seu computador da <em>Imagem Padrão (Normal)</em> e da <em>Imagem de Hover</em> (exibida ao passar o mouse).</li>
<li><strong>Efeito de Transição:</strong> Escolha o estilo visual ideal para o seu projeto:
<ul>
<li><em>Dissolver Suave (Fade):</em> Transição suave de opacidade entre as duas imagens.</li>
<li><em>Zoom Suave (Ken Burns / Scale):</em> A imagem ganha escala e profundidade sutil.</li>
<li><em>Flip 3D (Giro de Carta):</em> Rotação tridimensional de 180 graus revelando o verso.</li>
<li><em>Deslizar Lateral (Slide):</em> A nova foto desliza lateralmente sobre a original.</li>
<li><em>Preto &amp; Branco para Colorido:</em> Aplicação de filtro dessaturado que se enche de cor no hover.</li>
<li><em>Troca Instantânea Clássica:</em> Substituição direta via eventos nativos <code>onmouseover</code> e <code>onmouseout</code>.</li>
</ul>
</li>
<li><strong>Ajustes de Design:</strong> Defina o tempo de transição (ex: 0.4s), arredondamento dos cantos (<code>border-radius</code>) e link de redirecionamento opcional.</li>
<li><strong>Copie o Código Pronto:</strong> Escolha a aba desejada (CSS3 Moderno, JavaScript Clássico ou Bloco HTML para WordPress/Gutenberg) e clique em <em>Copiar Código</em>.</li>
</ol>
<p><!-- COMPARATIVO CSS3 VS JS --></p>
<h2>CSS3 Moderno vs JavaScript Tradicional</h2>
<div class="wzw-table-wrapper">
<table class="wzw-data-table">
<thead>
<tr>
<th>Critério</th>
<th>CSS3 Moderno (Recomendado)</th>
<th>JavaScript Tradicional</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Desempenho &amp; FPS</strong></td>
<td>Acelerado por Hardware (GPU); 60 FPS estáveis</td>
<td>Processado na thread principal de JS</td>
</tr>
<tr>
<td><strong>Flicker (Piscada)</strong></td>
<td>Zero piscada; ambas as imagens já residem no DOM</td>
<td>Exige script de preload explícito</td>
</tr>
<tr>
<td><strong>Dispositivos Touch</strong></td>
<td>Comportamento nativo no primeiro toque</td>
<td>Requer mapeamento de eventos de touch adicionais</td>
</tr>
</tbody>
</table>
</div>
<p>O post <a href="https://webzoneware.com/web-ferramentas/dev/gerador-de-codigo-de-imagem-onmouseover/">Gerador de Código de Imagem onMouseOver: Efeitos de Troca e Hover | Web-ZoneWare</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-ferramentas/dev/gerador-de-codigo-de-imagem-onmouseover/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Gerador de Padrões SVG para Backgrounds CSS Online &#124; Web-ZoneWare</title>
		<link>https://webzoneware.com/web-ferramentas/dev/imagem-svg-para-backgrounds-em-css/</link>
					<comments>https://webzoneware.com/web-ferramentas/dev/imagem-svg-para-backgrounds-em-css/#respond</comments>
		
		<dc:creator><![CDATA[Web-Zoneware]]></dc:creator>
		<pubDate>Tue, 14 Sep 2021 21:43:52 +0000</pubDate>
				<category><![CDATA[Desenvolvedor & Código]]></category>
		<category><![CDATA[backgrounds css]]></category>
		<category><![CDATA[backgrounds css3]]></category>
		<category><![CDATA[conversor svg para css]]></category>
		<category><![CDATA[criar backgrounds em css]]></category>
		<category><![CDATA[criar backgrounds svg]]></category>
		<category><![CDATA[Imagem SVG para Backgrounds em CSS]]></category>
		<category><![CDATA[svg backgrounds]]></category>
		<category><![CDATA[svg para css]]></category>
		<category><![CDATA[svg to css]]></category>
		<guid isPermaLink="false">https://economaster.com.br/?p=25453</guid>

					<description><![CDATA[<p>Texturas e Padrões Geométricos em SVG Puro para Fundos de Sites Modernos Utilizar texturas de fundo agrega sofisticação e profundidade visual a landing pages, seções de hero, cards de produtos e rodapés. No entanto, usar imagens bitmap repetidas (como PNGs ou JPEGs) costuma gerar artefatos visuais em telas Retina de alta densidade de pixels e [&#8230;]</p>
<p>O post <a href="https://webzoneware.com/web-ferramentas/dev/imagem-svg-para-backgrounds-em-css/">Gerador de Padrões SVG para Backgrounds CSS Online | Web-ZoneWare</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></description>
										<content:encoded><![CDATA[    <div class="wzw-tool-app" id="wzwSvgPatternApp">
        <style>
            .wzw-tool-app {
                font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
                background: #0f172a;
                color: #f8fafc;
                border: 1px solid #1e293b;
                border-radius: 12px;
                padding: 24px;
                margin: 20px 0;
                box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.3);
            }
            .wzw-tool-header {
                display: flex;
                align-items: center;
                justify-content: space-between;
                border-bottom: 1px solid #1e293b;
                padding-bottom: 16px;
                margin-bottom: 20px;
                flex-wrap: wrap;
                gap: 12px;
            }
            .wzw-tool-title-group h3 {
                margin: 0;
                font-size: 20px;
                color: #38bdf8;
                font-weight: 700;
            }
            .wzw-tool-title-group p {
                margin: 4px 0 0;
                font-size: 13px;
                color: #94a3b8;
            }
            .wzw-badge {
                background: #0369a1;
                color: #e0f2fe;
                font-size: 12px;
                font-weight: 600;
                padding: 4px 10px;
                border-radius: 9999px;
            }
            .wzw-pat-presets {
                display: flex;
                gap: 8px;
                flex-wrap: wrap;
                margin-bottom: 20px;
            }
            .wzw-btn-pat {
                background: #1e293b;
                border: 1px solid #334155;
                color: #cbd5e1;
                padding: 6px 14px;
                border-radius: 6px;
                font-size: 12px;
                font-weight: 600;
                cursor: pointer;
                transition: all 0.2s;
            }
            .wzw-btn-pat.active, .wzw-btn-pat:hover {
                background: #0284c7;
                color: #ffffff;
                border-color: #38bdf8;
            }
            .wzw-pat-grid {
                display: grid;
                grid-template-columns: 320px 1fr;
                gap: 22px;
                margin-bottom: 22px;
            }
            @media (max-width: 860px) {
                .wzw-pat-grid {
                    grid-template-columns: 1fr;
                }
            }
            .wzw-controls-panel {
                background: #1e293b;
                border: 1px solid #334155;
                border-radius: 10px;
                padding: 18px;
                display: flex;
                flex-direction: column;
                gap: 14px;
            }
            .wzw-color-row {
                display: flex;
                justify-content: space-between;
                align-items: center;
            }
            .wzw-color-row label {
                font-size: 12px;
                font-weight: 600;
                color: #cbd5e1;
            }
            .wzw-color-input-wrap {
                display: flex;
                align-items: center;
                gap: 8px;
            }
            .wzw-color-picker {
                width: 36px;
                height: 36px;
                border: none;
                border-radius: 6px;
                background: none;
                cursor: pointer;
            }
            .wzw-hex-mini {
                width: 80px;
                background: #0f172a;
                border: 1px solid #475569;
                color: #f8fafc;
                font-family: ui-monospace, monospace;
                font-size: 13px;
                padding: 6px 8px;
                border-radius: 4px;
                outline: none;
            }
            .wzw-slider-group {
                display: flex;
                flex-direction: column;
                gap: 4px;
            }
            .wzw-slider-head {
                display: flex;
                justify-content: space-between;
                font-size: 12px;
                font-weight: 600;
                color: #cbd5e1;
            }
            .wzw-slider {
                width: 100%;
                accent-color: #38bdf8;
                cursor: pointer;
            }
            .wzw-preview-container {
                background: #0f172a;
                border: 1px solid #334155;
                border-radius: 10px;
                height: 320px;
                display: flex;
                align-items: center;
                justify-content: center;
                position: relative;
                overflow: hidden;
                box-shadow: inset 0 2px 8px rgba(0,0,0,0.4);
                transition: background 0.15s ease;
            }
            .wzw-preview-card {
                background: rgba(15, 23, 42, 0.85);
                backdrop-filter: blur(12px);
                -webkit-backdrop-filter: blur(12px);
                border: 1px solid rgba(255, 255, 255, 0.2);
                border-radius: 12px;
                padding: 24px;
                text-align: center;
                max-width: 320px;
                box-shadow: 0 10px 25px rgba(0,0,0,0.5);
                color: #ffffff;
            }
            .wzw-code-output {
                background: #090d16;
                border: 1px solid #334155;
                border-radius: 8px;
                padding: 16px;
            }
            .wzw-code-header {
                display: flex;
                justify-content: space-between;
                align-items: center;
                margin-bottom: 8px;
            }
            .wzw-code-output pre {
                margin: 0;
                font-family: ui-monospace, SFMono-Regular, "Fira Code", monospace !important;
                font-size: 12px !important;
                color: #38bdf8 !important;
                background: transparent !important;
                border: none !important;
                padding: 0 !important;
                max-height: 140px;
                overflow-y: auto;
                white-space: pre-wrap;
                word-break: break-all;
            }
            .wzw-btn-action {
                background: #334155;
                border: 1px solid #475569;
                color: #f8fafc;
                padding: 6px 12px;
                border-radius: 6px;
                font-size: 12px;
                cursor: pointer;
                transition: all 0.2s;
            }
            .wzw-btn-action:hover {
                background: #0284c7;
                border-color: #38bdf8;
            }
            .wzw-copy-toast {
                position: fixed;
                bottom: 20px;
                right: 20px;
                background: #10b981;
                color: #ffffff;
                padding: 8px 16px;
                border-radius: 6px;
                font-size: 13px;
                font-weight: 600;
                box-shadow: 0 4px 12px rgba(0,0,0,0.3);
                opacity: 0;
                transition: opacity 0.2s ease;
                z-index: 99999;
                pointer-events: none;
            }
            .wzw-copy-toast.show {
                opacity: 1;
            }
        </style>

        <div class="wzw-tool-header">
            <div class="wzw-tool-title-group">
                <h3>📐 Gerador de Padrões e Texturas SVG para Backgrounds CSS</h3>
                <p>Crie texturas e fundos geométricos vetoriais ultraleves em SVG com código CSS pronto sem precisar carregar imagens externas</p>
            </div>
            <span class="wzw-badge">⚡ SVG Data URI Nativo</span>
        </div>

        <!-- Seletor de Padrões -->
        <div class="wzw-pat-presets">
            <button type="button" class="wzw-btn-pat active" onclick="wzwSelectPattern('grid', this)">Quadriculado (Grid)</button>
            <button type="button" class="wzw-btn-pat" onclick="wzwSelectPattern('dots', this)">Pontilhado (Dots)</button>
            <button type="button" class="wzw-btn-pat" onclick="wzwSelectPattern('chevron', this)">Chevron (Zig-Zag)</button>
            <button type="button" class="wzw-btn-pat" onclick="wzwSelectPattern('stripes', this)">Linhas Diagonais</button>
            <button type="button" class="wzw-btn-pat" onclick="wzwSelectPattern('hexagons', this)">Favo de Mel (Hex)</button>
            <button type="button" class="wzw-btn-pat" onclick="wzwSelectPattern('crosses', this)">Cruzes (+)</button>
            <button type="button" class="wzw-btn-pat" onclick="wzwSelectPattern('isometric', this)">Cubos Isométricos</button>
        </div>

        <div class="wzw-pat-grid">
            <!-- Painel de Controles -->
            <div class="wzw-controls-panel">
                <div class="wzw-color-row">
                    <label for="wzwPatBgColor">Cor de Fundo:</label>
                    <div class="wzw-color-input-wrap">
                        <input type="color" id="wzwPatBgColor" class="wzw-color-picker" value="#0f172a" onchange="wzwOnColorChange('bg')">
                        <input type="text" id="wzwPatBgHex" class="wzw-hex-mini" value="#0F172A" oninput="wzwOnHexChange('bg')">
                    </div>
                </div>

                <div class="wzw-color-row">
                    <label for="wzwPatFgColor">Cor do Padrão SVG:</label>
                    <div class="wzw-color-input-wrap">
                        <input type="color" id="wzwPatFgColor" class="wzw-color-picker" value="#38bdf8" onchange="wzwOnColorChange('fg')">
                        <input type="text" id="wzwPatFgHex" class="wzw-hex-mini" value="#38BDF8" oninput="wzwOnHexChange('fg')">
                    </div>
                </div>

                <!-- Tamanho -->
                <div class="wzw-slider-group">
                    <div class="wzw-slider-head">
                        <span>Tamanho da Célula:</span>
                        <span id="wzwPatSizeVal" style="color:#38bdf8;font-family:monospace;">40px</span>
                    </div>
                    <input type="range" id="wzwPatSize" class="wzw-slider" min="10" max="100" value="40" oninput="wzwUpdatePattern()">
                </div>

                <!-- Espessura -->
                <div class="wzw-slider-group">
                    <div class="wzw-slider-head">
                        <span>Espessura do Traço:</span>
                        <span id="wzwPatStrokeVal" style="color:#38bdf8;font-family:monospace;">2px</span>
                    </div>
                    <input type="range" id="wzwPatStroke" class="wzw-slider" min="1" max="10" value="2" oninput="wzwUpdatePattern()">
                </div>

                <!-- Opacidade -->
                <div class="wzw-slider-group">
                    <div class="wzw-slider-head">
                        <span>Opacidade do Traço:</span>
                        <span id="wzwPatOpacityVal" style="color:#38bdf8;font-family:monospace;">30%</span>
                    </div>
                    <input type="range" id="wzwPatOpacity" class="wzw-slider" min="5" max="100" value="30" oninput="wzwUpdatePattern()">
                </div>
            </div>

            <!-- Preview em Tempo Real -->
            <div id="wzwPatternStage" class="wzw-preview-container">
                <div class="wzw-preview-card">
                    <h4 style="margin:0 0 8px 0;font-size:18px;color:#38bdf8;">Padrão SVG Ativo</h4>
                    <p style="margin:0;font-size:13px;color:#cbd5e1;line-height:1.5;">O padrão de fundo acima é renderizado via Data URI em SVG vetorial de alta definição sem perda de nitidez.</p>
                </div>
            </div>
        </div>

        <!-- Código CSS Gerado -->
        <div class="wzw-code-output">
            <div class="wzw-code-header">
                <span style="font-size:12px;font-weight:700;color:#cbd5e1;">Código CSS Pronto para Copiar:</span>
                <button type="button" class="wzw-btn-action" style="background:#10b981;border-color:#34d399;font-weight:700;" onclick="wzwCopyPatternCss()">📋 Copiar CSS</button>
            </div>
            <pre id="wzwPatCssCode">/* Gerando CSS... */</pre>
        </div>

        <div id="wzwPatToast" class="wzw-copy-toast">Código CSS copiado com sucesso!</div>
    </div>

    <script>
    (function(){
        var currentPattern = 'grid';

        window.wzwSelectPattern = function(pat, btn) {
            currentPattern = pat;
            var btns = document.querySelectorAll('.wzw-btn-pat');
            for (var i = 0; i < btns.length; i++) {
                btns[i].classList.remove('active');
            }
            if (btn) btn.classList.add('active');
            wzwUpdatePattern();
        };

        window.wzwOnColorChange = function(type) {
            var val = document.getElementById(type === 'bg' ? 'wzwPatBgColor' : 'wzwPatFgColor').value.toUpperCase();
            document.getElementById(type === 'bg' ? 'wzwPatBgHex' : 'wzwPatFgHex').value = val;
            wzwUpdatePattern();
        };

        window.wzwOnHexChange = function(type) {
            var val = document.getElementById(type === 'bg' ? 'wzwPatBgHex' : 'wzwPatFgHex').value;
            if (/^#[0-9A-Fa-f]{6}$/.test(val)) {
                document.getElementById(type === 'bg' ? 'wzwPatBgColor' : 'wzwPatFgColor').value = val;
                wzwUpdatePattern();
            }
        };

        function buildSvg(pattern, size, stroke, color, opacity) {
            var op = opacity / 100;
            var svg = '';

            if (pattern === 'grid') {
                svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + size + '" height="' + size + '" viewBox="0 0 ' + size + ' ' + size + '">' +
                      '<path d="M ' + size + ' 0 L 0 0 0 ' + size + '" fill="none" stroke="' + color + '" stroke-width="' + stroke + '" stroke-opacity="' + op + '"/>' +
                      '</svg>';
            } else if (pattern === 'dots') {
                var r = Math.max(1, stroke);
                svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + size + '" height="' + size + '" viewBox="0 0 ' + size + ' ' + size + '">' +
                      '<circle cx="' + (size/2) + '" cy="' + (size/2) + '" r="' + r + '" fill="' + color + '" fill-opacity="' + op + '"/>' +
                      '</svg>';
            } else if (pattern === 'chevron') {
                var h = size / 2;
                svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + size + '" height="' + size + '" viewBox="0 0 ' + size + ' ' + size + '">' +
                      '<path d="M 0 0 L ' + h + ' ' + h + ' L ' + size + ' 0 M 0 ' + h + ' L ' + h + ' ' + size + ' L ' + size + ' ' + h + '" fill="none" stroke="' + color + '" stroke-width="' + stroke + '" stroke-opacity="' + op + '"/>' +
                      '</svg>';
            } else if (pattern === 'stripes') {
                svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + size + '" height="' + size + '" viewBox="0 0 ' + size + ' ' + size + '">' +
                      '<path d="M 0 ' + size + ' L ' + size + ' 0 M 0 0 L ' + size + ' ' + size + '" fill="none" stroke="' + color + '" stroke-width="' + stroke + '" stroke-opacity="' + op + '"/>' +
                      '</svg>';
            } else if (pattern === 'hexagons') {
                svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + size + '" height="' + size + '" viewBox="0 0 ' + size + ' ' + size + '">' +
                      '<path d="M ' + (size/2) + ' 0 L ' + size + ' ' + (size/4) + ' L ' + size + ' ' + (size*0.75) + ' L ' + (size/2) + ' ' + size + ' L 0 ' + (size*0.75) + ' L 0 ' + (size/4) + ' Z" fill="none" stroke="' + color + '" stroke-width="' + stroke + '" stroke-opacity="' + op + '"/>' +
                      '</svg>';
            } else if (pattern === 'crosses') {
                var c = size / 2;
                var len = size / 4;
                svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + size + '" height="' + size + '" viewBox="0 0 ' + size + ' ' + size + '">' +
                      '<path d="M ' + (c - len) + ' ' + c + ' H ' + (c + len) + ' M ' + c + ' ' + (c - len) + ' V ' + (c + len) + '" fill="none" stroke="' + color + '" stroke-width="' + stroke + '" stroke-opacity="' + op + '"/>' +
                      '</svg>';
            } else if (pattern === 'isometric') {
                svg = '<svg xmlns="http://www.w3.org/2000/svg" width="' + size + '" height="' + size + '" viewBox="0 0 ' + size + ' ' + size + '">' +
                      '<path d="M 0 0 L ' + (size/2) + ' ' + (size/4) + ' L ' + size + ' 0 M ' + (size/2) + ' ' + (size/4) + ' V ' + size + ' M 0 ' + (size/2) + ' L ' + (size/2) + ' ' + (size*0.75) + ' L ' + size + ' ' + (size/2) + '" fill="none" stroke="' + color + '" stroke-width="' + stroke + '" stroke-opacity="' + op + '"/>' +
                      '</svg>';
            }
            return svg;
        }

        function toBase64Utf8(str) {
            return btoa(unescape(encodeURIComponent(str)));
        }

        window.wzwUpdatePattern = function() {
            var bgColor = document.getElementById('wzwPatBgHex').value;
            var fgColor = document.getElementById('wzwPatFgHex').value;
            var size = parseInt(document.getElementById('wzwPatSize').value, 10);
            var stroke = parseInt(document.getElementById('wzwPatStroke').value, 10);
            var opacity = parseInt(document.getElementById('wzwPatOpacity').value, 10);

            document.getElementById('wzwPatSizeVal').textContent = size + 'px';
            document.getElementById('wzwPatStrokeVal').textContent = stroke + 'px';
            document.getElementById('wzwPatOpacityVal').textContent = opacity + '%';

            var svgStr = buildSvg(currentPattern, size, stroke, fgColor, opacity);
            var b64 = toBase64Utf8(svgStr);
            var dataUrl = 'data:image/svg+xml;base64,' + b64;

            var stage = document.getElementById('wzwPatternStage');
            if (stage) {
                stage.style.backgroundColor = bgColor;
                stage.style.backgroundImage = 'url("' + dataUrl + '")';
                stage.style.backgroundRepeat = 'repeat';
            }

            var codeEl = document.getElementById('wzwPatCssCode');
            if (codeEl) {
                var css = '/* Padrão de Fundo SVG - Web-ZoneWare */\n' +
                          '.elemento-com-padrao {\n' +
                          '  background-color: ' + bgColor + ';\n' +
                          '  background-image: url("' + dataUrl + '");\n' +
                          '  background-repeat: repeat;\n' +
                          '}';
                codeEl.textContent = css;
            }
        };

        window.wzwCopyPatternCss = function() {
            var codeEl = document.getElementById('wzwPatCssCode');
            var txt = codeEl ? codeEl.textContent : '';
            if (navigator.clipboard && navigator.clipboard.writeText) {
                navigator.clipboard.writeText(txt).then(function(){
                    wzwShowToastPat('Código CSS copiado!');
                });
            } else {
                var ta = document.createElement('textarea');
                ta.value = txt;
                document.body.appendChild(ta);
                ta.select();
                try { document.execCommand('copy'); } catch(e){}
                document.body.removeChild(ta);
                wzwShowToastPat('Código CSS copiado!');
            }
        };

        function wzwShowToastPat(msg) {
            var toast = document.getElementById('wzwPatToast');
            if (toast) {
                toast.textContent = msg || 'Copiado!';
                toast.classList.add('show');
                setTimeout(function(){ toast.classList.remove('show'); }, 2000);
            }
        }

        wzwUpdatePattern();
    })();
    </script>
    
<h2>Texturas e Padrões Geométricos em SVG Puro para Fundos de Sites Modernos</h2>
<p>Utilizar texturas de fundo agrega sofisticação e profundidade visual a landing pages, seções de hero, cards de produtos e rodapés. No entanto, usar imagens bitmap repetidas (como PNGs ou JPEGs) costuma gerar artefatos visuais em telas Retina de alta densidade de pixels e prejudicar o carregamento.</p>
<p>O <strong>Gerador de Padrões SVG para Backgrounds em CSS</strong> cria padrões vetoriais matemáticos em SVG puro embutidos diretamente no código CSS através de <strong>Data URIs</strong>. O resultado é nitidez infinita em qualquer resolução e arquivos levíssimos com menos de 1 KB!</p>
<h2>12 Padrões Geométricos Disponíveis para Customização</h2>
<ul>
<li><strong>Grid Técnico &#038; Blueprint:</strong> Grade quadriculada indispensável para páginas tech, plataformas de desenvolvimento e dashboards analíticos.</li>
<li><strong>Polka Dots (Pontos / Poás):</strong> Padrão de pontos circulares minimalista e elegante para fundos sutis de landing pages.</li>
<li><strong>Linhas Diagonais &#038; Listras:</strong> Textura listrada clássica com controle angular e espaçamento ajustável.</li>
<li><strong>Chevron &#038; Zig-Zag:</strong> Geometria moderna para banners promocionais e cabeçalhos arrojados.</li>
<li><strong>Triângulos Isométricos &#038; Hexágonos:</strong> Visual futurista inspirado em arquitetura digital e ecossistemas Web3.</li>
<li><strong>Ondas Suaves &#038; Circuitos:</strong> Texturas orgânicas fluidas para websites de tecnologia e telecomunicações.</li>
</ul>
<h2>Controles Interativos em Tempo Real</h2>
<p>A ferramenta oferece sliders e seletores instantâneos para você ajustar cada aspecto visual do padrão:</p>
<ol>
<li><strong>Cor do Padrão e Cor de Fundo:</strong> Defina cores contrastantes ou combinações sutis tom-sobre-tom.</li>
<li><strong>Opacidade do Padrão:</strong> Suavize as linhas de 10% a 100% para não competir com o texto principal da página.</li>
<li><strong>Escala e Espaçamento:</strong> Aumente ou reduza a repetição da textura em pixels para atingir o tamanho exato desejado.</li>
<li><strong>Modos de Exportação:</strong> Copie a regra CSS completa <code>background-image: url("data:image/svg+xml,...");</code> ou faça o download direto do arquivo <code>.svg</code> independente.</li>
</ol>
<h2>Perguntas Frequentes sobre Padrões SVG no CSS (FAQ)</h2>
<div class="wzw-faq-section">
<h3>O que significa Data URI no CSS?</h3>
<p>O <code>Data URI</code> permite incorporar o código do arquivo SVG diretamente dentro da folha de estilos CSS como uma string codificada em UTF-8 ou Base64. Isso elimina a necessidade de fazer uma requisição HTTP externa para baixar uma imagem, reduzindo o tempo de carregamento da página a zero.</p>
<h3>O padrão SVG perde qualidade em celulares ou telas 4K?</h3>
<p>Não. Por ser um vetor matemático baseado em nós e linhas de XML, o SVG é renderizado pelo motor gráfico do navegador com nitidez perfeita em qualquer densidade de pixels (1x, 2x Retina, 3x Super AMOLED e monitores 4K/8K).</p>
<h3>Como aplicar o fundo com repetição contínua?</h3>
<p>Basta associar a declaração CSS gerada à propriedade <code>background-repeat: repeat;</code>, que já vem configurada no bloco gerado pela ferramenta.</p>
</div>
<p>O post <a href="https://webzoneware.com/web-ferramentas/dev/imagem-svg-para-backgrounds-em-css/">Gerador de Padrões SVG para Backgrounds CSS Online | Web-ZoneWare</a> apareceu primeiro em <a href="https://webzoneware.com">Web-Zoneware</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://webzoneware.com/web-ferramentas/dev/imagem-svg-para-backgrounds-em-css/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
