Diferentes estados (texto e ícone) para respostas não aceitas e aceitas

Ao alterar o texto de ajuda para algo mais acionável (por exemplo, “Marcar como solução” em vez de “Solução”), descobri recentemente que tanto as respostas não aceitas quanto as aceitas usam o mesmo texto de ajuda e, por extensão, o mesmo ícone. Eu estava me perguntando se seria possível ter estados separados para quando uma resposta não foi aceita e quando uma resposta é marcada como solução, assim:

Estado do botão quando uma resposta não foi selecionada:

Estado do botão em uma resposta aceita após ser selecionada.

Acho que os usuários podem se beneficiar ao ver um texto de ajuda que sugere uma ação do que o texto padrão “Solução”. Quando uma resposta é selecionada, seria útil ver algum feedback evidente como resultado de sua seleção.

Além disso, estados de hover contextualizados também podem ser úteis para entender o que o botão fará, em vez de depender do atributo alt do navegador, veja os exemplos abaixo.

Aceitando uma solução:
Accept Solution Hover and Selection demo

Removendo uma resposta previamente selecionada:
Deselect Solution Hover and Selection demo

Existem planos para implementar interações como essas?

2 curtidas

Estou adicionando uma solução CSS caso seja útil.

Com pseudo-elementos, pelo menos o comportamento da parte do texto pode ser imitado:

CleanShot 2023-12-08 at 18.56.34

Este código está um pouco aninhado semanticamente, mas funciona. O alinhamento do texto precisaria ser alterado ou a largura do botão corrigida para que o alvo não pule ao passar o mouse.

css
nav.post-controls .actions button {
    &::after {
        margin-left: 0.5em;
    }

    &.unaccepted {
        &::after {
            content: "Marcar como solução";
        }
        &:hover {
            &::after {
                content: "Selecionar solução";
            }
        }

    }

    &.accepted {
        &, .d-icon {
            color: var(--tertiary);
        }
        &::after {
            content: "Solução Selecionada";
        }
        &:hover {
            &, .d-icon {
                color: var(--primary);
            }
            &::after {
                content: "Remover Seleção";
            }
        }
    }
}

Também é possível fazer isso, o que resultaria no texto “Selecionar se esta resposta resolver o problema”, que é muito longo, mas deve respeitar as traduções de idiomas.

&::after {
    content: attr(title);
}

Idealmente, eu mudaria o HTML real para suportar traduções, em vez de usar pseudo-elementos;
Exceto pelo atributo title (se fosse mais curto), pode ser melhor do que ter um listener de hover em JS.

3 curtidas

Olá @tynaut,

Estou testando esta solução e tenho uma pergunta. Quando alguém é o autor original, um rótulo de botão adicional é enviado para o DOM
<span>Mark as solution</span> que cria duplicação com esta solução. Você tem alguma sugestão sobre como lidar com isso? Devo apenas ocultar o rótulo do botão no CSS?

Obrigado!

Olá @tynaut,

Notei também que não há uma maneira fácil de alinhar os botões à esquerda para que eles não saltem ao passar o mouse. A única solução que encontrei é adicionar uma largura ao botão, o que provavelmente não é o ideal, dado que não é um elemento de largura fixa. Você tem alguma outra sugestão para isso, por acaso?

É melhor combinar ambas as medidas, pois o botão pulará indefinidamente se o cursor permanecer no final de um elemento não fixo quando o texto mudar.

nav.post-controls {
    .actions {
        width: 100%;
        .extra-buttons {
            margin-right: auto; // ajusta o botão para a esquerda
            .widget-button {
                width: 200px; // define para um valor que cubra o texto máximo
            }
        }
    }
}

CleanShot 2023-12-14 at 10.51.55

Você pode ocultar a cor de fundo ao pairar o mouse e usar uma abordagem diferente para indicar o hover, se desejar.

O texto DOM pode ser definido como font-size: 0;.

E os pseudo-elementos (e a classe .d-icon) precisariam ter seus tamanhos de fonte especificados, pois são filhos que herdarão essa propriedade.

Olá @tynaut, obrigado pela sua ajuda e contribuição.
Existe alguma maneira de alterarmos a propriedade <use href> para mudar o ícone para os diferentes estados (resposta selecionada, ao passar o mouse, etc.)?