Cartes, listes et organisation du contenu

Liste de contenu repliable pour la tournée de terrain

Dans le scénario de la ligne de patrouille sur le terrain, réalisez une liste de contenu repliable : elle comprend du contenu réel, des contrôles interactifs, un retour d’état clair et une mise en page adaptée à différentes tailles.

Cartes, listes et organisation du contenuListe de contenu repliableHTMLCSSJavaScript
Après activation de JavaScript, ce cas peut être modifié, exécuté et enregistré. Code source fixe ci-dessous :
<!doctype html>
<html lang="fr" dir="ltr">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Liste de contenu repliable pour la tournée de terrain</title>
  <style>
    :root { --ink:#102c44; --paper:#eef6f8; --accent:#e05263; --secondary:#79b7c7; --line:color-mix(in srgb, var(--ink) 18%, transparent); --shadow:0 24px 60px color-mix(in srgb, var(--ink) 16%, transparent); color-scheme:light; }
    * { box-sizing:border-box; }
    html { min-width:320px; background:var(--paper); }
    body { min-height:100vh; margin:0; overflow-x:hidden; color:var(--ink); font-family:"Hiragino Maru Gothic ProN","PingFang SC",sans-serif; background:radial-gradient(circle at 15% 10%,color-mix(in srgb,var(--secondary) 35%,transparent) 0 9%,transparent 10%),radial-gradient(circle at 90% 75%,color-mix(in srgb,var(--accent) 18%,transparent) 0 12%,transparent 13%),var(--paper); }
    button,input,select,textarea { color:inherit; font:inherit; }
    button,[role="button"],input,select,textarea { accent-color:var(--accent); }
    button { cursor:pointer; }
    button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible { outline:3px solid var(--accent); outline-offset:3px; }
    [hidden] { display:none !important; }
    @media (max-width:700px) { .mast h1 { line-height:1.08 !important; letter-spacing:-.035em !important; overflow-wrap:anywhere; } }
    @media (prefers-reduced-motion:reduce) { *,*::before,*::after { scroll-behavior:auto !important; animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; } }
    .page{width:min(1140px,calc(100% - 28px));margin:auto;padding:54px 0}.mast{display:flex;justify-content:space-between;align-items:center;gap:24px;margin:0 12px 28px}.mast h1{font-family:"Hiragino Maru Gothic ProN","PingFang SC",sans-serif;font-weight:900;font-size:clamp(38px,8vw,82px);letter-spacing:-.035em;margin:0;line-height:.98}.eyebrow{display:inline-flex;padding:7px 12px;border-radius:999px;color:var(--paper);background:var(--accent);font-weight:900}.intro{max-width:620px;line-height:1.65}.scenario{padding:12px 18px;border-radius:999px;background:var(--secondary);box-shadow:0 7px 0 color-mix(in srgb,var(--ink) 18%,transparent);font-weight:900}.demo{border-radius:46px 18px 46px 18px;box-shadow:0 18px 0 color-mix(in srgb,var(--secondary) 45%,transparent);position:relative;min-height:390px;overflow:hidden;padding:clamp(22px,5vw,54px);background:color-mix(in srgb,var(--paper) 90%,#fff)}@media(max-width:700px){.mast{display:grid}.page{width:calc(100% - 16px);padding:18px 0}.demo{padding:17px}}
    .panel{padding:24px;border-block:1px solid var(--ink);background:transparent}.stack{display:grid;gap:22px}.row{display:flex;flex-wrap:wrap;gap:16px}.action{padding:8px 0;border:0;border-bottom:1px solid currentColor;background:transparent;letter-spacing:.08em}.action.primary,.action.is-active{color:var(--accent);border-bottom-width:4px}.status{min-height:28px;margin-top:20px;font-style:italic}.metric{font-family:Didot,serif;font-size:clamp(38px,8vw,76px)}.muted{max-width:54ch;line-height:1.8}.meter{position:relative;height:3px;background:var(--line)}.meter>i{position:absolute;inset:0 auto 0 0;background:var(--accent)}.chip{padding-bottom:3px;border-bottom:1px solid var(--ink);font-size:13px}
    .composition-index{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px}.index-mark{display:grid;align-content:space-between;width:76px;padding:16px 10px;border:1px solid var(--line);color:var(--accent);background:color-mix(in srgb,var(--paper) 82%,transparent);text-align:center}.index-mark strong{font:900 34px/1 ui-monospace,monospace}.index-mark span{writing-mode:vertical-rl;font:800 10px/1.2 ui-monospace,monospace;letter-spacing:.18em}.composition-index .demo{grid-column:1;grid-row:1}.composition-index::before{content:"";position:absolute;left:-12px;top:38px;width:5px;height:45%;background:linear-gradient(var(--accent),var(--secondary))}@media(max-width:700px){.composition-index{grid-template-columns:1fr}.index-mark{grid-row:1;width:auto;grid-template-columns:auto 1fr}.index-mark span{writing-mode:horizontal-tb}.composition-index .demo{grid-row:2}}
    .accordion-studio{display:grid;gap:18px;max-width:960px;margin:auto}.accordion-studio header{display:flex;justify-content:space-between;gap:18px;align-items:end}.accordion-studio h2{margin:.3em 0}.accordion-layout{display:grid;grid-template-columns:minmax(0,1.15fr) 250px;gap:14px}.accordion-stack{display:grid;gap:10px}.accordion-stack article{overflow:hidden;border:1px solid var(--line);border-radius:18px;background:var(--paper)}.accordion-stack article>button{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;width:100%;padding:16px;border:0;background:transparent;text-align:left}.accordion-stack article>button span{display:grid;gap:5px}.accordion-stack article>button[aria-expanded="true"] i{transform:rotate(45deg)}.accordion-stack article>div{display:grid;gap:10px;padding:0 16px 16px;border-top:1px solid var(--line)}.accordion-stack article ul{display:grid;gap:7px;padding-left:18px;margin:0}.accordion-inspector{display:grid;align-content:start;gap:10px;padding:18px;border-left:5px solid var(--accent);background:color-mix(in srgb,var(--secondary) 10%,transparent)}.accordion-inspector strong{font-size:28px}.accordion-inspector ol{display:grid;gap:8px;padding-left:18px;margin:0}@media(max-width:720px){.accordion-studio header{align-items:stretch;flex-direction:column}.accordion-layout{grid-template-columns:1fr}}.workflow-session{display:grid;gap:14px}.session-command{display:grid;grid-template-columns:1fr auto minmax(170px,.45fr) auto;gap:16px;align-items:end;padding:18px;border-block:4px double var(--ink)}.session-command h2{margin:.2em 0}.session-command output{font:900 clamp(28px,5vw,54px)/1 ui-monospace,monospace}.session-command label{display:grid;grid-template-columns:1fr auto;gap:7px;font-size:12px}.session-command input{grid-column:1/-1;width:100%}#workflowSessionProgress{height:12px;overflow:hidden;border-radius:2px;background:var(--line)}#workflowSessionProgress i{display:block;width:0;height:100%;background:var(--accent)}.session-stage{min-width:0;transition:filter .25s,transform .25s}.session-stage[data-session-phase="running"]{transform:translateY(-3px)}.session-stage[data-session-phase="paused"]{filter:grayscale(.65)}.session-stage[data-session-phase="complete"]{filter:contrast(.78);opacity:.72}.session-log{display:grid;grid-template-columns:auto 1fr;gap:18px;align-items:start}.session-log ol{display:flex;flex-wrap:wrap;gap:7px;padding:0;margin:0;list-style:none}.session-log li{padding:5px 8px;border:1px solid var(--line);font-size:12px}@media(max-width:900px){.session-stage{order:-1}.session-command{grid-template-columns:1fr auto}.session-command label{grid-column:1/-1}.session-log{grid-template-columns:1fr}}
  </style>
</head>
<body data-aesthetic="playful" data-composition="field-index">
  <main class="page">
    <header class="mast"><div><span class="eyebrow">playful / liste de contenu repliable / BEGINNER</span><h1>Liste de contenu repliable pour la tournée de terrain</h1><p class="intro">Dans le scénario de la ligne de patrouille sur le terrain, réalisez une liste de contenu repliable : elle comprend du contenu réel, des contrôles interactifs, un retour d’état clair et une mise en page adaptée à différentes tailles.</p></div><span class="scenario">Itinéraire de patrouille sur le terrain</span></header>
    <div class="composition-index"><section class="demo" aria-label="Zone interactive de liste de contenu repliable pour les rondes de terrain"><div class="workflow-session"><header class="session-command"><div><span class="eyebrow">ligne de patrouille sur le terrain SESSION</span><h2>Poste de chronométrage de la ligne de patrouille sur le terrain</h2></div><output id="workflowSessionClock">00:45</output><label>Durée du tour<input id="workflowSessionLength" type="range" min="15" max="90" step="15" value="45"><span>s</span></label><button id="workflowSessionToggle" class="action primary" type="button">Commencer la sauvegarde de l’organisation</button></header><div id="workflowSessionProgress" role="progressbar" aria-label="Progression de la ligne de patrouille sur le terrain" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><i></i></div><section id="workflowCore" class="workflow-core session-stage" data-session-phase="ready" tabindex="-1"><!-- 11DZ_CORE_START:cards-lists-content-accordion-list --><section class="accordion-studio"><header><div><span class="eyebrow">ACCORDION LIST</span><h2>Liste de suivi des soins pour la tournée de terrain</h2><p>Chaque module peut être développé indépendamment, et la colonne de droite affiche en synchronisation le focus actuellement ouvert.</p></div><output id="accordionOpenCount">1 éléments développés</output></header><div class="accordion-layout"><div class="accordion-stack"><article><button id="accordionButton0" type="button" data-accordion-card="0" aria-expanded="true" aria-controls="accordionPanel0" data-core-bridge="cards-lists-content-accordion-list"><span><b>Inspiration pour les tournées d’inspection sur le terrain</b><small>Étapes d’exécution</small></span><i aria-hidden="true">+</i></button><div id="accordionPanel0" role="region" aria-labelledby="accordionButton0"><p>Une explication détaillée du fil de visite des champs sera conservée ici et restera lisible sur la page actuelle.</p><ul><li>Vérifier les enregistrements locaux</li><li>Ajouter les explications clés</li><li>Préparer l’action suivante</li></ul></div></article><article><button id="accordionButton1" type="button" data-accordion-card="1" aria-expanded="false" aria-controls="accordionPanel1"><span><b>Journal de tournée de terrain</b><small>Rappel supplémentaire</small></span><i aria-hidden="true">+</i></button><div id="accordionPanel1" role="region" aria-labelledby="accordionButton1" hidden><p>Les explications détaillées du relevé de la ligne de patrouille des champs resteront ici et demeureront lisibles sur la page actuelle.</p><ul><li>Vérifier les enregistrements locaux</li><li>Ajouter les explications clés</li><li>Préparer l’action suivante</li></ul></div></article><article><button id="accordionButton2" type="button" data-accordion-card="2" aria-expanded="false" aria-controls="accordionPanel2"><span><b>Collaboration sur la ligne de tournée de terrain</b><small>Étapes d’exécution</small></span><i aria-hidden="true">+</i></button><div id="accordionPanel2" role="region" aria-labelledby="accordionButton2" hidden><p>Les explications détaillées de la collaboration pour la tournée d’inspection des champs resteront ici et demeureront lisibles sur la page actuelle.</p><ul><li>Vérifier les enregistrements locaux</li><li>Ajouter les explications clés</li><li>Préparer l’action suivante</li></ul></div></article><article><button id="accordionButton3" type="button" data-accordion-card="3" aria-expanded="false" aria-controls="accordionPanel3"><span><b>Progression de la ligne de patrouille sur le terrain</b><small>Rappel supplémentaire</small></span><i aria-hidden="true">+</i></button><div id="accordionPanel3" role="region" aria-labelledby="accordionButton3" hidden><p>Les explications détaillées sur la progression de la ligne de patrouille sur le terrain resteront ici et demeureront lisibles sur la page actuelle.</p><ul><li>Vérifier les enregistrements locaux</li><li>Ajouter les explications clés</li><li>Préparer l’action suivante</li></ul></div></article><article><button id="accordionButton4" type="button" data-accordion-card="4" aria-expanded="false" aria-controls="accordionPanel4"><span><b>Rappel de la ligne de patrouille sur le terrain</b><small>Étapes d’exécution</small></span><i aria-hidden="true">+</i></button><div id="accordionPanel4" role="region" aria-labelledby="accordionButton4" hidden><p>Les explications détaillées concernant l’alerte de la ligne de patrouille de terrain resteront ici et demeureront lisibles dans la page actuelle.</p><ul><li>Vérifier les enregistrements locaux</li><li>Ajouter les explications clés</li><li>Préparer l’action suivante</li></ul></div></article></div><aside class="accordion-inspector"><strong id="accordionCurrent">Inspiration pour les tournées d’inspection sur le terrain</strong><p id="accordionCurrentCopy">Le module actuellement suivi affichera ici un résumé explicatif.</p><ol id="accordionVisible"><li>Inspiration pour les tournées d’inspection sur le terrain</li></ol></aside></div></section><!-- 11DZ_CORE_END --></section><footer class="session-log"><strong id="workflowSessionScore">0 points de contrôle interactifs</strong><ol id="workflowSessionLaps" aria-label="Journal de ronde"></ol></footer></div><p id="status" class="status" role="status" aria-live="polite"></p></section><aside class="index-mark" aria-hidden="true"><strong>05</strong><span>Ligne de patrouille de terrain FIELD INDEX</span></aside></div>
  </main>
  <script>
    'use strict';
    const statusOutput = document.querySelector('#status');
    const announce = message => { statusOutput.textContent = message; };
    /* 11DZ_CORE_SCRIPT_START:cards-lists-content-accordion-list */
const accordionCards=[...document.querySelectorAll('[data-accordion-card]')];function syncAccordion(){const openCards=accordionCards.filter(button=>button.getAttribute('aria-expanded')==='true');document.querySelector('#accordionOpenCount').textContent='Déplié '+openCards.length+' élément';const current=openCards.at(-1)||accordionCards[0];document.querySelector('#accordionCurrent').textContent=current.querySelector('b').textContent;document.querySelector('#accordionCurrentCopy').textContent=current.querySelector('small').textContent+'Se développera en continu sur la page locale.';document.querySelector('#accordionVisible').replaceChildren(...(openCards.length?openCards:[accordionCards[0]]).map(button=>{const item=document.createElement('li');item.textContent=button.querySelector('b').textContent;return item;}));}accordionCards.forEach(button=>button.addEventListener('click',()=>{const open=button.getAttribute('aria-expanded')!=='true';button.setAttribute('aria-expanded',String(open));document.querySelector('#'+button.getAttribute('aria-controls')).hidden=!open;syncAccordion();announce(button.querySelector('b').textContent+(open?' Déplié':' Réduit'));}));syncAccordion();
/* 11DZ_CORE_SCRIPT_END */
const workflowBridgeSpec={"name":"cards-lists-content-accordion-list","selector":"[data-core-bridge=\"cards-lists-content-accordion-list\"]","mode":"click","key":"Enter"};const workflowBridgeCore=document.querySelector('#workflowCore');const workflowBridgeControl=workflowBridgeCore.querySelector(workflowBridgeSpec.selector);if(!workflowBridgeControl)throw new Error('Missing core bridge: '+workflowBridgeSpec.name);const workflowBridgeControlledId=workflowBridgeControl.getAttribute('aria-controls');const workflowBridgeControlled=workflowBridgeControlledId?document.getElementById(workflowBridgeControlledId):null;workflowBridgeCore.dataset.workflowBridge=workflowBridgeSpec.name;workflowBridgeCore.dataset.workflowVersion='0';function workflowBridgeSerialize(){const visualNode=workflowBridgeCore.firstElementChild||workflowBridgeCore;const visual=getComputedStyle(visualNode);const outputs=[...workflowBridgeCore.querySelectorAll('output,[role="status"],[aria-live],meter,progress')].map(node=>node.textContent.trim()+'|'+node.getAttribute('aria-valuenow')+'|'+node.getAttribute('value'));const canvas=[...workflowBridgeCore.querySelectorAll('canvas')].map(node=>{try{return node.toDataURL().slice(-160);}catch{return 'canvas-unavailable';}});return JSON.stringify({html:workflowBridgeCore.innerHTML,status:statusOutput.textContent,outputs,canvas,visual:[visual.display,visual.visibility,visual.opacity,visual.transform,visual.filter,visual.backgroundColor,visual.width,visual.height],scroll:workflowBridgeSpec.mode==='scroll'?workflowBridgeControl.scrollTop:null});}let workflowBridgeLastEffect=workflowBridgeSerialize();function workflowBridgeSummary(){const label=(workflowBridgeControl.getAttribute('aria-label')||workflowBridgeControl.textContent||workflowBridgeControl.value||workflowBridgeSpec.name).trim().replace(/\s+/g,' ').slice(0,72);return label+' · Version de base '+workflowBridgeCore.dataset.workflowVersion;}function workflowBridgeCommit(){const effect=workflowBridgeSerialize();if(effect===workflowBridgeLastEffect)return {changed:false,summary:workflowBridgeSummary()};workflowBridgeLastEffect=effect;workflowBridgeCore.dataset.workflowVersion=String(Number(workflowBridgeCore.dataset.workflowVersion||0)+1);return {changed:true,summary:workflowBridgeSummary()};}function workflowBridgeScheduleCommit(){queueMicrotask(workflowBridgeCommit);setTimeout(workflowBridgeCommit,0);}workflowBridgeControl.addEventListener("click",workflowBridgeScheduleCommit);const workflowBridgeStateTargets=new Set(workflowBridgeCore.querySelectorAll('dialog'));if(workflowBridgeControlled&&workflowBridgeCore.contains(workflowBridgeControlled))workflowBridgeStateTargets.add(workflowBridgeControlled);workflowBridgeStateTargets.forEach(target=>['close','cancel','toggle'].forEach(eventName=>target.addEventListener(eventName,workflowBridgeScheduleCommit)));function workflowBridgeActivate(){workflowBridgeControl.focus();workflowBridgeControl.click();const result=workflowBridgeCommit();setTimeout(workflowBridgeCommit,0);return result;}function workflowBridgeReset(){workflowBridgeCore.dataset.workflowVersion='0';workflowBridgeLastEffect=workflowBridgeSerialize();}
const workflowSessionCore=document.querySelector('#workflowCore');const workflowSessionToggle=document.querySelector('#workflowSessionToggle');const workflowSessionLength=document.querySelector('#workflowSessionLength');const workflowSessionState={phase:'ready',elapsed:0,limit:Number(workflowSessionLength.value),checkpoints:[],timer:null};function workflowSessionFormat(seconds){return String(Math.floor(seconds/60)).padStart(2,'0')+':'+String(seconds%60).padStart(2,'0');}function workflowSessionDrive(){const percent=Math.min(100,Math.round(workflowSessionState.elapsed/workflowSessionState.limit*100));document.querySelector('#workflowSessionClock').textContent=workflowSessionFormat(Math.max(0,workflowSessionState.limit-workflowSessionState.elapsed));const progress=document.querySelector('#workflowSessionProgress');progress.setAttribute('aria-valuenow',String(percent));progress.querySelector('i').style.width=percent+'%';workflowSessionCore.dataset.sessionPhase=workflowSessionState.phase;document.querySelector('#workflowSessionScore').textContent=workflowSessionState.checkpoints.length+' points de contrôle d’interaction';}function workflowSessionLap(label){workflowSessionState.checkpoints.push({label,at:workflowSessionState.elapsed});const item=document.createElement('li');item.textContent=label+' · '+workflowSessionFormat(workflowSessionState.elapsed);document.querySelector('#workflowSessionLaps').append(item);workflowSessionDrive();}function workflowSessionStop(complete=false){clearInterval(workflowSessionState.timer);workflowSessionState.timer=null;workflowSessionState.phase=complete?'complete':'paused';workflowSessionToggle.textContent=complete?'Recommencer':'Tour suivant';workflowSessionToggle.setAttribute('aria-pressed','false');workflowSessionDrive();announce(complete?'tour de terrain achevé':'La ronde est suspendue');}function workflowSessionStart(){if(workflowSessionState.phase==='complete'){workflowSessionState.elapsed=0;workflowSessionState.checkpoints=[];document.querySelector('#workflowSessionLaps').replaceChildren();}workflowSessionState.phase='running';workflowSessionToggle.textContent='Tour de pause';workflowSessionToggle.setAttribute('aria-pressed','true');const bridge=workflowBridgeActivate();workflowSessionLap(bridge.summary);clearInterval(workflowSessionState.timer);workflowSessionState.timer=setInterval(()=>{workflowSessionState.elapsed+=1;if(workflowSessionState.elapsed>=workflowSessionState.limit){workflowSessionStop(true);return;}workflowSessionDrive();},1000);workflowSessionDrive();announce('La ronde de patrouille de terrain a commencé · '+bridge.summary);}workflowSessionToggle.addEventListener('click',()=>workflowSessionState.phase==='running'?workflowSessionStop():workflowSessionStart());workflowSessionLength.addEventListener('input',()=>{workflowSessionState.limit=Number(workflowSessionLength.value);workflowSessionState.elapsed=Math.min(workflowSessionState.elapsed,workflowSessionState.limit);workflowSessionDrive();});workflowSessionCore.addEventListener('keydown',event=>{if(event.key==='Enter'||event.key===' '){workflowSessionLap('Opérations au clavier');}});workflowSessionCore.addEventListener('click',event=>{if(event.target.closest('[data-core-bridge]'))workflowSessionLap('Opération principale · '+workflowBridgeSummary());});document.addEventListener('visibilitychange',()=>{if(document.hidden&&workflowSessionState.phase==='running')workflowSessionStop();});workflowSessionDrive();
workflowBridgeReset();
  </script>
</body>
</html>
Commentaires sur la pageVous avez découvert un problème ou avez une suggestion d’amélioration ?
Les fonctions de retour nécessitent l’utilisation de la version en ligne

Veuillez activer JavaScript dans la version en ligne avant de soumettre ; les fonctionnalités locales de l’outil ou du cas ne sont pas affectées.

Aller vers la version en ligne pour envoyer des commentaires