O Html marcação para um TD focalizável?
Pergunta
Eu quero practive, e até mesmo as melhores práticas, com HTML + JS + CSS.
Eu uso um cliente só página uma página Sudoku.
Minha marcação Sudoku é basicamente um <table>
, com <td>
.
(Estou aberto a sugestões para melhorar este).
Os meus requisitos:
- Have a célula sob foco (a noção teclado de foco) (highlighed com css a um fundo amarelo)
- Navegue pelas células com teclas de seta (mais Início etc).
- type-in ??um valor inteiro define esse valor para a célula atualmente focada
Eu uso um botão de entrada dentro de cada célula. O Javascript funciona bem.
O meu único problema é com o display. exibição Quando uma célula tem o foco, é realçado não cobre toda a TD , em vez apenas o espaço visual incluído no botão de entrada. Eu tenho algum espaço ao redor do botão que não é 'amarelo'.
Eu não acho que eu poderia ir para cima na seleção CSS, para selecionar o pai da entrada, eu poderia? Tais como:
input:focus '?? how to go up ??' td { background-color:yellow;
Eu tentei alguns truques, como ter sempre 5 caracteres em cada visualização do botão (5 espaços quando vazio, mudando o caráter médio quando definido), mas nada é visualmente satisfazendo. Pior ainda, é claramente contra as melhores práticas para alterar o conteúdo por uma questão de visualizar. Isso é o que a distinção entre MVC HTML / CSS / JS é para!
Já procurou neste site para resposta, eu encontrei perto, mas questões distintas e resposta.
Eu estou esperando que alguém poderia ajudar a melhorar a minha página ... e minha habilidade de marcação: -)
Solução
Não é possível construir um selector de CSS que corresponde a um nó pai dependente de um (pseudo) de classe nó filho.
Basicamente, você tem duas opções para escolher:
-
Tente preencher o
td
com oinput
completamente usando regrasheight
ewidth
no seu CSS. -
Set 'centrada' e classe 'desfocados' no seu tds com javascript usando os
onfocus
eonblur
eventos das entradas.
Outras dicas
Você não poderia usar um pouco de jQuery para definir uma classe .focused e, em seguida, aplique um pouco de estilo a ele?