slogan3

Help me een responsief tooltip-systeem te maken dat de gebruikersinteractie verbetert op verschillende apparaten.

description

Het creëren van een effectief tooltip-systeem zal de betrokkenheid van gebruikers vergroten, snelle toegang tot informatie bieden en de bruikbaarheid op verschillende apparaten verbeteren, wat uiteindelijk leidt tot een meer intuïtieve website-ervaring.

prompt

try_prompt

Ik wil een responsief tooltip-systeem ontwerpen dat contextuele informatie biedt wanneer gebruikers over of op specifieke elementen tikken of hoveren. Mijn huidige HTML-structuur voor tooltips is: {{tooltip_html_structure}} en mijn ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier zijn aanbevelingen voor het ontwerpen van een responsief, toegankelijk en gebruiksvriendelijk tooltip-systeem: 1. Positionering - Gebruik CSS-positionering zoals `absolute` of `fixed` om de tooltip netjes naast of boven het element te plaatsen. - Gebruik JavaScript of CSS (bijvoorbeeld met `:hover` en `:focus`) om de positie dynamisch aan te passen aan de locatie van het element, zodat de tooltip niet buiten het scherm valt. - Overweeg het gebruik van een bibliotheek of aangepaste functies die de positie automatisch aanpassen afhankelijk van de ruimte rondom het element (bijvoorbeeld boven, onder, links, rechts). 2. Zichtbaarheid - Verberg de tooltip standaard met `opacity: 0` en `visibility: hidden`. - Maak de tooltip zichtbaar bij hover (`:hover`) of focus (`:focus`) met overgangen voor soepele animaties, bijvoorbeeld: ```css .tooltip { opacity: 0; visibility: hidden; transition: opacity 0.3s ease; position: absolute; z-index: 1000; } .tooltip.show { opacity: 1; visibility: visible; } ``` - Gebruik JavaScript om de `show` klasse toe te voegen/verwijderen bij interacties. 3. Toegankelijkheid - Zorg dat de tooltip ook zichtbaar wordt bij focus, zodat toetsenbordgebruikers er ook toegang toe hebben: ```css .element:focus + .tooltip { opacity: 1; visibility: visible; } ``` - Gebruik `aria-describedby` of `aria-label` op de elementen die de tooltips activeren, zodat schermlezers de informatie kunnen voorlezen. - Voeg `tabindex="0"` toe aan elementen die een tooltip hebben, zodat ze focusbaar zijn. - Zorg dat de tooltip-inhoud begrijpelijk en kort is, en vermijd het gebruik van alleen visuele cues. 4. Responsiviteit op mobiele apparaten - Voor mobiele telefoons en tablets kunnen hover niet altijd werken. Gebruik daarom `:focus` of tap-gebaseerde interacties. - Overweeg het gebruik van een klik of tap om de tooltip te tonen, en deze te sluiten door opnieuw te tikken of ergens anders te tikken. - Zorg dat de tooltip niet te groot wordt, en dat de tekst goed leesbaar is op kleine schermen (gebruik bijvoorbeeld `font-size: 14px` en voldoende padding). 5. Extra tips - Gebruik media queries om de tooltip-stijlen aan te passen op verschillende schermformaten. - Overweeg het gebruik van aria-rollen zoals `role="tooltip"` en `aria-hidden` om de toegankelijkheid te verbeteren. - Test de tooltip op verschillende apparaten en met schermlezers om de gebruikservaring te optimaliseren. Voorbeeld HTML-structuur en CSS: ```html <div class="tooltip-container" tabindex="0" aria-describedby="tip1"> Element met tooltip <div id="tip1" class="tooltip" role="tooltip"> Dit is de contextuele informatie. </div> </div> ``` ```css .tooltip { position: absolute; background-color: zwart; color: wit; padding: 8px; border-radius: 4px; opacity: 0; visibility: hidden; transition: opacity 0.3s ease; z-index: 1000; } .tooltip-container:focus .tooltip, .tooltip-container:hover .tooltip { opacity: 1; visibility: visible; } ``` Kortom: zorg voor dynamische positionering, soepele overgangen, toetsenbordtoegankelijkheid en responsieve styling voor een optimale gebruikerservaring op alle apparaten.
provider: deepseek
model: deepseek-chat
Hier zijn aanbevelingen voor een responsief en toegankelijk tooltip-systeem: ## HTML-structuur verbeteringen ```html <!-- Voeg aria-labels en rol toe voor toegankelijkheid --> <div class="tooltip-container"> <button class="tooltip-trigger" aria-describedby="tooltip-1" aria-expanded="false"> Hover/tap mij </button> <div id="tooltip-1" class="tooltip" role="tooltip" aria-hidden="true"> Tooltip tekst </div> </div> ``` ## CSS-verbeteringen ```css .tooltip { background-color: #000; color: #fff; padding: 8px 12px; border-radius: 4px; font-size: 14px; line-height: 1.4; max-width: 250px; box-shadow: 0 2px 8px rgba(0,0,0,0.15); /* Positionering */ position: absolute; z-index: 1000; /* Standaard verborgen */ opacity: 0; visibility: hidden; transition: opacity 0.2s ease, visibility 0.2s ease; } .tooltip.active { opacity: 1; visibility: visible; } /* Responsive positionering */ .tooltip.top { bottom: 100%; margin-bottom: 8px; } .tooltip.bottom { top: 100%; margin-top: 8px; } .tooltip.left { right: 100%; margin-right: 8px; } .tooltip.right { left: 100%; margin-left: 8px; } /* Mobiele optimalisaties */ @media (max-width: 768px) { .tooltip { max-width: 200px; font-size: 13px; padding: 6px 10px; } /* Zorg dat tooltips niet buiten scherm vallen */ .tooltip-container { position: relative; } } ``` ## JavaScript-functionaliteit ```javascript class TooltipSystem { constructor() { this.init(); } init() { document.querySelectorAll('.tooltip-trigger').forEach(trigger => { // Hover voor desktop trigger.addEventListener('mouseenter', this.showTooltip.bind(this)); trigger.addEventListener('mouseleave', this.hideTooltip.bind(this)); // Tap voor touch devices trigger.addEventListener('click', this.toggleTooltip.bind(this)); trigger.addEventListener('touchstart', this.handleTouch.bind(this)); }); // Sluit tooltips bij klik buiten document.addEventListener('click', this.closeAllTooltips.bind(this)); } showTooltip(e) { if ('ontouchstart' in window) return; // Skip hover op touch devices const trigger = e.currentTarget; const tooltip = this.getTooltip(trigger); this.positionTooltip(trigger, tooltip); this.setTooltipState(tooltip, true); } toggleTooltip(e) { e.stopPropagation(); const trigger = e.currentTarget; const tooltip = this.getTooltip(trigger); const isActive = tooltip.classList.contains('active'); this.closeAllTooltips(); if (!isActive) { this.positionTooltip(trigger, tooltip); this.setTooltipState(tooltip, true); } } positionTooltip(trigger, tooltip) { const rect = trigger.getBoundingClientRect(); const viewport = this.getViewportSize(); // Bepaal beste positie gebaseerd op beschikbare ruimte if (rect.top > tooltip.offsetHeight + 20) { tooltip.classList.add('top'); } else if (viewport.height - rect.bottom > tooltip.offsetHeight + 20) { tooltip.classList.add('bottom'); } else { tooltip.classList.add('top'); // fallback } } } ``` ## Toegankelijkheidsfuncties 1. **Keyboard navigation**: Ondersteun Tab-toets om tooltips te activeren 2. **Screen readers**: Gebruik `aria-describedby` en `role="tooltip"` 3. **Focus management**: Sluit tooltips bij ESC-toets 4. **Kleurcontrast**: Zorg voor minimaal contrast van 4.5:1 5. **Touch targets**: Minimaal 44×44px voor mobiele interactie ## Belangrijkste aandachtspunten: - Gebruik hover alleen voor desktop, tap voor mobiel - Voorkom dat tooltips buiten het viewport vallen - Zorg voor voldoende vertraging bij hover om per ongeluk activeren te voorkomen - Test met echte screen readers en toetsenbordnavigatie - Houd tooltip-tekst kort en relevant voor mobiel gebruik Deze aanpak zorgt voor een consistente ervaring across alle devices en voldoet aan WCAG-richtlijnen.