Currently when setting focus programmatically to an element with focus()
, there is no way to instruct the browser to apply :focus-visible
styling to it.
This can be problematic when using HTML-over-the-wire technologies like Hotwire or Htmx, where the focused element may be replaced with a new one, and the new one is given focus. If the initial element was showing a focus ring via :focus-visible
styles, that styling will go away for the new element, because the browser has decided that it wasn’t necessary.
focus()
currently supports passing an object with preventScroll:true
to prevent the browser from scrolling to the focused element. I propose that the object should support an additional forceVisible
key, which can be set to true
to force :focus-visible
styling on the element.