Análise da diferença entre exibição nenhuma e opacidade 0

Existem diferenças óbvias entre atributos HTML display: nonee opacity: 0processamento de acessibilidade. Eles são usados ​​em cenários diferentes e têm efeitos diferentes na visibilidade e interatividade dos elementos da página web. Neste artigo, explicarei detalhadamente o que essas duas propriedades fazem, como elas diferem e quando usá-las, além de fornecer exemplos para ilustrar seus efeitos.

display: nonee opacity: 0visão geral

display: none

display: noneÉ uma propriedade CSS usada para ocultar completamente um elemento HTML e removê-lo do layout da página. Ao utilizar este atributo, o elemento não aparece na página e não ocupa espaço, portanto fica completamente invisível ao usuário e não responde a nenhum evento de interação, incluindo teclados e leitores de tela.

opacity: 0

opacity: 0Também é uma propriedade CSS usada para tornar um elemento completamente transparente, mas o elemento ainda existe no layout da página. Ou seja, o elemento ainda ocupa espaço e mantém seu tamanho e posição originais, mas fica invisível para o usuário. No entanto, diferentemente de display: none, os elementos ainda podem receber eventos de interação, incluindo eventos de teclado e leitor de tela.

Exemplo de diferença

Para entender melhor a diferença entre essas duas propriedades, vamos ilustrar seus diferentes efeitos através de exemplos.

Exemplo 1: display: noneUso de

Suponha que você tenha uma caixa de diálogo pop-up em uma página da Web que contém informações importantes, mas não está visível por padrão. Você pode usar display: nonepara ocultar esta caixa de diálogo e mostrá-la via JavaScript quando necessário.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>示例1:使用 display: none</title>
  <style>
    .hidden-dialog {
      
      
      display: none;
      background-color: #ffffff;
      border: 1px solid #000000;
      padding: 20px;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      z-index: 999;
    }
  </style>
</head>
<body>
  <button id="show-dialog">显示对话框</button>
  <div class="hidden-dialog" id="dialog">
    <h2>重要信息</h2>
    <p>这是一些重要信息,只有在用户点击按钮后才会显示。</p>
    <button id="close-dialog">关闭</button>
  </div>
  <script>
    const showDialogButton = document.getElementById('show-dialog');
    const dialog = document.getElementById('dialog');
    const closeDialogButton = document.getElementById('close-dialog');

    showDialogButton.addEventListener('click', () => {
      
      
      dialog.style.display = 'block'; // 显示对话框
    });

    closeDialogButton.addEventListener('click', () => {
      
      
      dialog.style.display = 'none'; // 隐藏对话框
    });
  </script>
</body>
</html>

Neste exemplo, display: nonea caixa de diálogo está inicialmente definida como invisível. Ele só será exibido após o usuário clicar no botão "Mostrar caixa de diálogo". Isso não é suficiente para fornecer uma experiência de usuário acessível porque a caixa de diálogo, embora visível, é inacessível para usuários de leitores de tela.

Exemplo 2: opacity: 0Uso de

Agora, vamos usar opacity: 0para conseguir um efeito semelhante, mas manter a presença do diálogo no layout e torná-lo acessível.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>示例2:使用 opacity: 0</title>
  <style>
    .hidden-dialog {
      
      
      opacity: 0;
      background-color: #ffffff;
      border: 1px solid #000000;
      padding: 20px;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      z-index: 999;
      transition: opacity 0.3s; /* 添加渐变效果 */
    }
  </style>
</head>
<body>
  <button id="show-dialog">显示对话框</button>
  <div class="hidden-dialog" id="dialog">
    <h2>重要信息</h2>
    <p>这是一些重要信息,只有在用户点击按钮后才会显示。</p>
    <button id="close-dialog">关闭</button>
  </div>
  <script>
    const showDialogButton = document.getElementById('show-dialog');
    const dialog = document.getElementById('dialog');
    const closeDialogButton = document.getElementById('close-dialog');

    showDialogButton.addEventListener('click', () => {
      
      
      dialog.style.opacity = '1'; // 使对话框可见
    });

    closeDialogButton.addEventListener('click', () => {
      
      
      dialog.style.opacity = '0'; // 使对话框不可见
    });
  </script>
</body>
</html>

Neste exemplo, usamos opacity: 0para tornar o diálogo invisível inicialmente, mas ainda assim apresentá-lo no layout. Quando o usuário clica no botão "Mostrar caixa de diálogo", tornamos a caixa de diálogo visível opacitydefinindo como . 1Isso é mais amigável para usuários de leitores de tela porque a caixa de diálogo permanece no layout e o conteúdo dentro dela pode ser acessado pelo usuário por meio do leitor.

Considerações de acessibilidade

display: noneConsiderações de acessibilidade

  • Visibilidade : display: noneOculta o elemento para que ele não fique visível para todos os usuários, incluindo usuários de leitores de tela.
  • Interatividade : Como o elemento está oculto, ele não responde aos eventos do teclado ou do leitor de tela. Isto pode resultar na inacessibilidade do conteúdo ou da funcionalidade para pessoas com deficiência visual.
  • Semântica : Se você display: noneocultar algum conteúdo importante usando , ele não ficará acessível aos leitores de tela, causando problemas de acessibilidade.

opacity: 0Considerações de acessibilidade

  • Visibilidade : opacity: 0Torna um elemento invisível, mas ainda presente no layout da página, por isso fica visível para deficientes visuais (embora invisível, ocupa espaço na página).
  • Interatividade : Os elementos permanecem interativos e, portanto, respondem aos eventos do teclado e do leitor de tela, tornando seu conteúdo e funcionalidade acessíveis.
  • Semântica : O uso opacity: 0pode garantir que os leitores de tela possam acessar o conteúdo do elemento, proporcionando melhor acessibilidade.

como escolher?

Ao escolher entre display: noneou opacity: 0, sua decisão deve ser baseada em suas necessidades específicas e objetivos de acessibilidade.

Uso display: nonede

  • Use quando quiser ocultar um elemento completamente, inclusive não ocupar espaço no layout da página, e não quiser que os usuários possam interagir com ele display: none. Por exemplo, você pode usar este método para pop-ups de anúncios gráficos.
.hidden-element {
    
    
  display: none;
}

Uso opacity: 0de

  • Usado quando você deseja que um elemento retenha espaço no layout da página, mas não fique visível opacity: 0. Isso é útil ao criar elementos que alternam a visibilidade (como caixas de diálogo pop-up, menus suspensos, etc.), pois mantém o elemento acessível.
.hidden-element {
    
    
  opacity: 0;
  /* 还可以添加其他样式以适应需求 */
  transition: opacity 0.3s; /* 添加渐变效果 */
}

Considerações adicionais

Além de display: nonee opacity: 0, existem outros métodos disponíveis para controlar a visibilidade dos elementos, como visibility: hiddene position: absolute. Ao escolher, você também precisa considerar os seguintes fatores:

  • Efeitos de animação : Se você precisar adicionar efeitos de animação, como fade in e fade out, opacity: 0é uma escolha melhor porque pode ser usado com efeitos de transição.

  • Gerenciamento de foco : ao usar opacity: 0, você precisa considerar como lidar com o foco. Se um elemento estiver invisível, mas ainda conseguir obter foco, os usuários poderão ter problemas com a navegação pelo teclado.

  • Desempenho : Em alguns casos, display: nonepode ser mais eficiente de usar, pois remove totalmente o elemento da árvore de renderização.

Resumir

display: nonee opacity: 0são propriedades CSS que controlam a visibilidade dos elementos, mas apresentam diferenças claras na acessibilidade. O método escolhido depende de suas necessidades de design e objetivos de acessibilidade. Use isto se precisar ocultar um elemento e não quiser que o usuário possa interagir com ele display: none. Mas se você quiser manter o elemento no layout e garantir que seu conteúdo seja acessível aos usuários de leitores de tela, então opacity: 0pode ser uma escolha melhor. Não importa o método escolhido, você deve priorizar a acessibilidade para garantir que seu site seja fácil de usar e acessível a todos os usuários.

おすすめ

転載: blog.csdn.net/i042416/article/details/133530936