Remix.run Logo
subdavis 13 hours ago

The details / summary thing absolutely kills me. There’s basically nothing you can’t do with them. Hiding and replacing markers is easy. But every component library just pretends they don’t exist.

It even saves you the effort of all the aria control and expanded tags: these tags don’t need them.

WickyNilliams 2 hours ago | parent | next [-]

One drawback of details was that cmd+f search wouldn't play nicely when the details was closed. But now there's a hidden="until-found" you can put on child content, along with an associated event. So you can open the details when a user searches :) super useful

MrJohz an hour ago | parent [-]

You don't need the hidden="until-found" for details/summary, because that has those semantics automatically, but you can use that for other elements that behave similarly (for example tabs, which can't quite correctly be implemented with details/summary, and so needs to be done by hand).

Also I think the event isn't currently emitted consistently on all browsers (and maybe not at all for hidden="until-found"?) so unfortunately you can't quite rely on that yet if you need to sink some JavaScript state to your html. But in general, yeah, this is a really cool feature.

WickyNilliams an hour ago | parent [-]

Oh huh I didn't know details supported that naturally. I'm guessing this wasn't always the case and my knowledge is simply outdated. TIL!

sunaookami 5 hours ago | parent | prev | next [-]

When you search text with ctrl+f it also searches inside details elements and automatically expands them!

maxloh 10 hours ago | parent | prev | next [-]

> The details / summary thing absolutely kills me. There’s basically nothing you can’t do with them.

Animating the details element is tricky. By the spec, browsers don’t natively support transitions between display: none and display: block.

jakelazaroff 10 hours ago | parent | next [-]

That is no longer true! You can do it in CSS with a combination of `@starting-style` and `transition-behavior: allow-discrete`. [1]

Another gotcha you'll run into is animating the height. A couple other new features (`interpolate-size: allow-keywords` and `::details-content`) will let you get around that. [2]

Modern CSS is awesome.

[1] https://developer.chrome.com/blog/entry-exit-animations

[2] https://nerdy.dev/open-and-close-transitions-for-the-details...

port11 31 minutes ago | parent | next [-]

The major issue with this is that modern CSS is almost its own job, to the point we used to have Interface Developers at some place I’ve worked (HTML+CSS specialists). I did frontend for over a decade and eventually lost the train on CSS changes, I don’t even know what’s going on there anymore.

It’s still awesome, but it’s becoming increasingly silly to ask someone to know modern HTML, CSS, JavaScript, Typescript, some build tools, a couple of frameworks, etc.

The amount of JS we ship to clients is a reflection of cost-cutting measures at your workplace, not that every FE dev shuns CSS.

wvenable 6 hours ago | parent | prev | next [-]

I can't see how a bunch of esoteric incantations are better than just some straight-forward easy to understand and follow JavaScript.

berkes 14 minutes ago | parent | next [-]

Is that "straight-forward easy to understand and follow JavaScript" the whole thing written from scratch? Or does it use libraries (that use libraries, that use libraries)?

Because I've written my share of javascript-from-scratch in my time - before npm and such. And even if my use-case was limited, in order to get edge-cases and details working - issues long solved by their HTML/CSS counterparts - we needed more and more JS. Many of which handwritten polyfills, agent-detection, etc.

Seriously, things like scrollbars (because the client insisted on them being consistent across user-agents) or dropdowns (because they had to be styled) "visited" state on links, in pure JS are thousands of lines of code. Maybe not today, anymore, IDK, with current APIs like the history API or aria labeling. But back then, just in order to make the dropdown work with screen readers, or the scrollbars react well to touchpads -in the direction the user was used to based on their OS- took us thousands of lines of JS, hacks, workarounds and very hard to follow code - because of the way the "solutions" were spread out over the exact right combination of JS, HTML and CSS. Edit: I now recall we got the web-app back with the comment "When I select "Language" and start typing "Fr" I expect French to be picked and "enter" to then put the language in French". We spent another few days on functions that collect character inputs in memory and then match them with values. All because "flags in front of the names were of crucial importance".

So, maybe this is solved in modern HTML/CSS/JS. But I highly doubt it. I think "some straight-forward ... JavaScript" is either an `import { foo } from foobar` or a pipe-dream in the area of "programmers always underestimate hours"

yurishimo 6 hours ago | parent | prev | next [-]

Because you need 20x the JS to do the same thing and it’s still not hardware accelerated. These new CSS properties are well supported and will only get better.

pikuseru 2 hours ago | parent | prev | next [-]

Because a team of browser engineers have already written and reviewed the code to do it for you; and (hopefully) it’ll be performant, properly tested and accessible… ;-D

onion2k 3 hours ago | parent | prev | next [-]

JS animations run on the main thread with everything else, so if your browser is busy doing something else the animation ends up being janky. Using CSS solves that problem.

dekoidal 2 hours ago | parent | prev | next [-]

Is CSS too hard to learn or something?

paulddraper 4 hours ago | parent | prev [-]

1. CSS is declarative, so it avoid subtle bugs

2. CSS integrates better with HTML, as it has selectors to automatically bind to elements (yes there custom elements for JS)

llmslave2 8 hours ago | parent | prev | next [-]

@starting-style Has less than 90% browser support making it a non-starter for the time being at least.

jakelazaroff 8 hours ago | parent | next [-]

It'll just degrade gracefully into not animating the element's entry, so unless the animation is somehow crucial you should still be fine to use it.

If you really need to detect whether it's supported there are hacky methods: https://www.bram.us/2024/07/11/feature-detect-css-starting-s...

bryanrasmussen 4 hours ago | parent [-]

I agree, but must also observe that I have never met a designer who was willing to admit without a knock-down drag-out fight that any animation they put in was not somehow crucial.

mikedelfino 2 hours ago | parent | next [-]

The trick is they'll see it working for themselves. :)

sfn42 an hour ago | parent | prev [-]

I've never met a designer who wasn't completely fine with my suggestions for more pragmatic solutions. Like just styling a default scrollbar instead of implementing my own scrollbar to make it exactly like the design. Using a default drop-down menu instead of rolling my own just so I can round the corners of the selects.

The designers I've worked with are fine with these things. We have more important things to work on than small style details. We can go back and change these things later if anyone actually cares, but generally nobody ever does.

paulddraper 4 hours ago | parent | prev [-]

91% of usage for browsers tracked by caniuse [1].

The biggest gap is Chrome versions > 2 years old.

[1] https://caniuse.com/?search=%40starting-style

RussianCow 6 hours ago | parent | prev [-]

You say awesome, I say layers upon layers of opaque incantations I have to remember. Thank god for LLMs.

pikuseru 2 hours ago | parent | next [-]

“Layers upon layers of opaque incantations”

You’ve described software.

sfn42 an hour ago | parent | prev | next [-]

You're doing it wrong. You don't have to remember the incantations. You just have to remember that they exist, and then google them or ask an LLM when you need them.

If you use something enough you'll remember. If you don't, you just look it up when you need it. This is basic programming, nobody remembers everything.

nchmy 5 hours ago | parent | prev [-]

And how might you do this in Javascript?

bryanrasmussen 4 hours ago | parent [-]

they just said "LLMS"!

nchmy 4 hours ago | parent [-]

My point was that js would be vastly more complicated than these html/css "incantations".

davidmurdoch 2 hours ago | parent [-]

Most front end engineers could do it in JS without ever having to look something up. But the CSS to do it is still obscure to most.

qudat 10 hours ago | parent | prev | next [-]

Animating accordions is almost always a bad idea because the content length can make it unbearable.

In general I find animations on the web overused and unnecessary

xp84 9 hours ago | parent [-]

Seriously. As a user I can count on zero hands the number of times I’ve said “Oh great, I’m sure glad this UI is animated!” - and likewise zero times have I missed it when animation isn’t used. Animation is a way to light small units of your users’ precious time on fire, for zero benefit.

ozlikethewizard 6 hours ago | parent | next [-]

As the other user alluded to, Animations are not actually there for people who are comfortable using a computer. The vast majority of users are borderlines in capable of using the internet these days. Animations are supposed to be there to really help guide these users into understanding what the scary machine is doing when they click it. Can they be overused, absolutely, but i think have an accordion fold out animated is a reasonable case. You gotta remember your average user isnt paying any fucking attention, so drawing their attention to important changes on screen is not only good but necessary. I'd prefer no animations ever, but i also dont own an iphone while the majority of the world either does or wants to.

ben_w 28 minutes ago | parent [-]

That's the positive interpretation, but none of the discussions I've had with UI designers or managers have been about adding animation for accessibility, and the zeitgeist of the last decade has been that skeuomorphism (of which intuitive animations are a subset) is passé.

So far as I can tell, all that the stakeholders want from the UI, animations included, is pizzazz.

normie3000 7 hours ago | parent | prev | next [-]

Animations are also a way to explain causal relationships between interactions and their results, and to help build mental models of software behaviour.

TeMPOraL 2 hours ago | parent [-]

Being related to neither software behavior nor the structure of the underlying problem, animations tend to obscure the causal relationships and make it harder for user to build a correct mental model.

8 hours ago | parent | prev [-]
[deleted]
danw1979 4 hours ago | parent | prev | next [-]

Does it need animating ?

lelanthran 6 hours ago | parent | prev | next [-]

> Animating the details element is tricky. By the spec, browsers don’t natively support transitions between display: none and display: block.

Very hot take; then don't animate them!

Animation in a UI is great - you draw the user's attention to a widget that changed because they might not necessarily notice it otherwise. This improves the UX.

With a details/summary, the animation is not needed and can only make a negative change to the UX. There is no positive change to the UX that animating the details/summary elements would bring. When it is opened it is obvious.

If you really really need to animate the details, instead of animating open/close, instead animate the summary background/text color to indicate that the element has just changed state.

Would I like easy animation of open/close? Sure. Does it improve the UX? Nope.

10 hours ago | parent | prev | next [-]
[deleted]
computerfriend 9 hours ago | parent | prev | next [-]

You can put a transition on details > summary.

stephenr 5 hours ago | parent | prev [-]

> browsers don’t natively support transitions between display: none and display: block.

You say that like it's a bad thing.

PhilipRoman 3 hours ago | parent | prev | next [-]

Fun fact: <details> even works on github and similar sites with markdown-based input. You can post large inline logs in issues without cluttering the conversation.

webstrand 12 hours ago | parent | prev | next [-]

Details works even when it's set display:contents too, for even more flexibility. Can't animate from open›close, yet, though. That's pretty much my last frustration with it.

shakna 12 hours ago | parent [-]

I think the CSS support for that has finally landed, though it means targetting a pseudo element instead. Its been a year, so support is probably good enough you don't care if just the animation doesn't happen.

https://developer.chrome.com/blog/styling-details

lelandfe 10 hours ago | parent [-]

Note that the transition to `auto` in that post relies on `interpolate-size` which has yet to land on Firefox or Safari, and neither have movement right now.

raybb 11 hours ago | parent | prev | next [-]

Do they work well for when you want to preview text? Like show the first 100 characters of a paragraph and then click to expand?

zahlman 11 hours ago | parent | next [-]

Yes. For example, on Codidact (https://codidact.com), limited HTML access is offered along with Markdown when making posts, and the details and summary tags in particular are whitelisted. I've made extensive use of this in some of my content, for example https://software.codidact.com/posts/289251/289252#answer-289... . If you have NoScript you can easily verify that the expanding sections work perfectly well without JavaScript. They can even be nested, as they are here; and the summary text can contain some other forms of markup without issue. (When crafting the post, however, I had to do some tricky things with whitespace to avoid confusing the Markdown parser.)

veqq 11 hours ago | parent | prev [-]

Of course. That's the summary part

crooked-v 11 hours ago | parent | prev | next [-]

You can't actually control the open state properly from markup (the `open` attribute only sets the default state), which is why I haven't bothered with them.

bikeshaving 11 hours ago | parent | next [-]

I’m not sure this is correct. The DOM class HTMLDetailsElement has the `open` property, which you can use to read/write the details element’s state. If you’re using setAttribute/getAttribute just switch to the property.

https://developer.mozilla.org/en-US/docs/Web/API/HTMLDetails...

crooked-v 6 hours ago | parent [-]

Having to use the property on the element instance, rather than the actual HTML attribute, is exactly the kind of wrapper code I want to avoid if I'm using a built-in.

WickyNilliams 2 hours ago | parent | next [-]

You need some JS to change an attribute as much as you need JS to change a property. What am I missing?

I hope the command attribute (https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/...) will eventually support this out of the box. In the meanwhile you can write a single custom --toggle command which is generic and works with any toggleable element

_heimdall 2 hours ago | parent | prev [-]

What kind of control are you looking for?

`open` works just like checked for a checkbox input. You can set the initial state in HTML and CSS can respond to changes in the attribute if a user clicks it. Markup won't have programmatic control over the attribute by design, that's always done in JS by modifying the element instance.

rhdunn 7 hours ago | parent | prev | next [-]

If you specify the same name on each `details` element they behave like an accordion automatically [1], no need for JavaScript. If you set one of them to open that one will be initially open.

[1] https://developer.mozilla.org/en-US/blog/html-details-exclus...

6510 44 minutes ago | parent | next [-]

different things with the same name? O_O

crooked-v 6 hours ago | parent | prev [-]

It's not about using it as an accordion, it's about controlling the open/closed state from other interactions.

subdavis 11 hours ago | parent | prev [-]

Out of curiosity, why have you needed to? This has never come up for me.

crooked-v 6 hours ago | parent [-]

For a simple example, imagine buttons that opens a modal with a particular arrangement of open/closed accordions for each button.

chiefalchemist 3 hours ago | parent | prev | next [-]

Last I checked that without JavaScript details / summary has accessibility issues. That is, you need JS to add aria-open or similar.

It’s odd and frustrating that such an essential tag is not defined to be accessible, afaik.

asdfaoeu 3 hours ago | parent [-]

Why would you need aria attributes if it's summary tag?

chiefalchemist 2 hours ago | parent [-]

I presume it has to do with AT and how it typically interprets the tag. TBH IDK other than I’ve seen it come up in accessibility discussions / groups.

rado 8 hours ago | parent | prev [-]

You can’t force it to be always open on desktop and collapsible on mobile. That was a deal breaker for me.