Skip to content

Conversation

@ryanahamilton
Copy link
Contributor

@ryanahamilton ryanahamilton commented Oct 28, 2025

Refines the visual presentation of the global navigation

While some of the changes in this PR have a subjective nature to them, I believe the sum makes for an objectively better user experience.

  • Reduced the overall width of the nav bar from 80px to 64px wide. Airflow has many horizontally dense views and the current nav was using an unnecessarily large amount of it.
  • Improved the continuity and visual cadence of the navigation items. These changes make the presentation look more intentional:
    • The Airflow logo previously had different x and y margins surrounding it, making it appear smashed to the top of the bar.
    • The nav items previously had slightly different x and y paddings, making them rectangles. Now they are squares
  • Tightened the location of the Docs and User nav items closer to the bottom to make them appear pinned (which they are) instead of floating.
  • Tweaked the hover, focus, and active interaction states to be more polished.
Dark mode - Before Dark mode - After Light mode - Before Light mode - After
image image image image
Docs menu - Before Docs menu - After
image image
image image
User menu - Before User menu - After
image image
image image

Improves nav item accessibility

Observe how each nav item was receiving focus twice each time I pressed tab on my keyboard:

Nav item tabbing - Before Nav item tabbing - After
Zight Recording 2025-10-28 at 06 17 37 PM Zight Recording 2025-10-28 at 06 16 31 PM

This was due to undesirable markup nesting with anchors wrapping buttons. This was resolved so that each nav item is only an anchor or only button (where appropriate), utilizing Chakra's asChild prop to accomplish this aswell as some additional refactoring of the NavButton component.

Nav item markup - Before Nav item markup - After
image image

Testing

Added proper overflow handling and title tags for languages that might have overly long labels on them:

image

I confirmed no regressions with RTL languages:

image

^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named {pr_number}.significant.rst or {issue_number}.significant.rst, in airflow-core/newsfragments.

@boring-cyborg boring-cyborg bot added the area:UI Related to UI/UX. For Frontend Developers. label Oct 28, 2025
@potiuk
Copy link
Member

potiuk commented Oct 28, 2025

Nice

@ryanahamilton ryanahamilton changed the title Refines the visual design, interaction, and accessibility of the global navigation Refine the visual design, interaction, and accessibility of the global navigation Oct 28, 2025
@ryanahamilton ryanahamilton force-pushed the global_nav_refinement branch 2 times, most recently from ab1c359 to d7393cb Compare October 28, 2025 23:14
@ryanahamilton ryanahamilton marked this pull request as ready for review October 28, 2025 23:17
@bbovenzi bbovenzi added this to the Airflow 3.1.2 milestone Oct 28, 2025
@bbovenzi bbovenzi added the backport-to-v3-1-test Mark PR with this label to backport to v3-1-test branch label Oct 28, 2025
Copy link
Contributor

@bbovenzi bbovenzi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Love it!

@kaxil
Copy link
Member

kaxil commented Oct 29, 2025

Love it ❤️

Copy link
Member

@guan404ming guan404ming left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks really great!

@vatsrahul1001
Copy link
Contributor

This looks great. Love it

Copy link
Contributor

@phanikumv phanikumv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great!

Copy link
Collaborator

@sunank200 sunank200 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Amazing

Copy link
Member

@pierrejeambrun pierrejeambrun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thanks!

@kaxil kaxil force-pushed the global_nav_refinement branch from 58a26a6 to 939b813 Compare October 29, 2025 10:35
Copy link
Contributor

@amoghrajesh amoghrajesh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks nice!

@kaxil kaxil force-pushed the global_nav_refinement branch from 939b813 to 7504c6a Compare October 29, 2025 10:37
@ryanahamilton ryanahamilton merged commit 5076bbc into apache:main Oct 29, 2025
58 checks passed
@ryanahamilton ryanahamilton deleted the global_nav_refinement branch October 29, 2025 11:09
github-actions bot pushed a commit that referenced this pull request Oct 29, 2025
…of the global navigation (#57455)

(cherry picked from commit 5076bbc)

Co-authored-by: Ryan Hamilton <ryan@ryanahamilton.com>
@github-actions
Copy link

Backport successfully created: v3-1-test

Status Branch Result
v3-1-test PR Link

@jscheffl
Copy link
Contributor

Very cool... just one minor nit: As you had the example of german translation above with overflowing label... this is now hard to read. Could we use at least a line break to have a text in two lines? Or is it always cropping first line?

@TJaniF might we need / shall we adjust German translation for the change? WDYT
Also might affect other languages...

@ryanahamilton
Copy link
Contributor Author

Could we use at least a line break to have a text in two lines? Or is it always cropping first line?

@jscheffl It's intentionally always cropping to a single line. This is how we can enforce a consistent presentation across the navigation items, regardless of what value is entered in the translation file. Given there are only a handful of these nav items and they are persistently visible in the application, the icons really act as the primary identifiers since people can process symbols quicker than words and the labels are secondary.

FWIW, In your example, the label is Datensets (Assets), which is combining 2 languages. I would argue that it should only be Datensets, which in turn removes the truncation for this language:

image

Lzzz666 pushed a commit to Lzzz666/airflow that referenced this pull request Oct 30, 2025
kaxil added a commit that referenced this pull request Oct 31, 2025
…l navigation (#57455)(#57565)

* Refine the visual design, interaction, and accessibility of the global navigation (#57455)

* Add settings to auto-apply linting, fix linting errors (#57510)

* Fix static checks

---------

Co-authored-by: Kaxil Naik <kaxilnaik@gmail.com>
kaxil added a commit that referenced this pull request Oct 31, 2025
…l navigation (#57455)(#57565)

* Refine the visual design, interaction, and accessibility of the global navigation (#57455)

* Add settings to auto-apply linting, fix linting errors (#57510)

* Fix static checks

---------

Co-authored-by: Kaxil Naik <kaxilnaik@gmail.com>
@ephraimbuddy ephraimbuddy added the type:misc/internal Changelog: Misc changes that should appear in change log label Nov 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:UI Related to UI/UX. For Frontend Developers. backport-to-v3-1-test Mark PR with this label to backport to v3-1-test branch type:misc/internal Changelog: Misc changes that should appear in change log

Projects

None yet

Development

Successfully merging this pull request may close these issues.