Chromium’s Quiet Move Toward Native Vertical Tabs

English 简体中文 繁体中文 Tiếng Việt
Summary

Chromium is actively laying the architectural groundwork for native vertical tabs, a significant shift from its long-standing horizontal-only UI model. Evidence for this development includes recent commit activity, the introduction of feature flags, preference keys like `vertical_tabs.enabled`, and foundational layout code changes to support an `TabStripOrientation` enum. This refactoring is substantial, as Chromium's UI stack was built around horizontal tabs, necessitating adjustments to layout, event handling, and extension APIs. The move aims to provide power users with improved tab management, full title visibility, and better grouping, especially on widescreen monitors. While further work is needed for UI behaviors and extension compatibility, the current progress indicates a robust, orientation-agnostic tab system is being carefully implemented.

如果你曾经尝试在使用宽屏显示器的浏览器中管理 30-40 个打开的标签页,你可能就会理解将标签栏侧过来放的吸引力。多年来,这一直是 Microsoft Edge、Vivaldi 等浏览器的标准配置。与此同时,基于 Chromium 的浏览器(包括 Google Chrome)一直在使用水平标签条。直到现在。

Chromium 最近的提交活动表明,开发团队正在为垂直标签页奠定坚实的基础:功能标志、偏好设置键、布局分支 —— 所有这些基础性的准备工作都必须到位,然后才能为用户启用该功能。其中一些隐藏在内部问题和早期的 CL 中,但公开的指标清楚地表明了这一方向。例如,Chromium 问题跟踪器上的问题 #420041296 的标题是添加共享选项和垂直标签列表显示

为什么花了这么长时间

垂直标签页没有更早出现的原因归结为架构。Chromium 的 UI 堆栈是围绕浏览器窗口顶部的水平标签条这一假设而构建的。布局代码、事件处理(标签的拖放、溢出行为)、扩展 API、主题 —— 所有这些都假定窗口宽度上只有一行标签。

要翻转这一点 —— 允许标签位于侧边栏中、垂直堆叠、以不同的方式滚动、以不同的方式调整大小 —— 意味着要重构许多组件。这也意味着要保持与旧行为(扩展、窗口、配置文件)的兼容性,并引入一个可切换的路径(以便水平模式仍然有效)。因此,该团队似乎没有交付一个零敲碎打的版本,而是首先构建基础设施:标志、方向抽象、指标。

代码显示的内容

几个可观察到的变化暗示了方向。首先:一个偏好设置键。在 Chromium 源代码中,chrome/common/pref_names.h 中有一个常量,它保留了一个类似布尔值的 vertical_tabs.enabled 偏好设置。仅此一点就表明预计会有垂直标签页的用户状态。

其次:标志注册。在 chrome/browser/about_flags.cc 中,你可以看到如何枚举标志以通过 chrome://flags 公开。虽然我发现的公共快照中没有立即显示确切的垂直标签页条目,但模式是明确无误的。

第三:布局代码显示了标签条当前如何使用水平假设。例如,在 chrome/browser/ui/views/tabs/tab_strip.cc 中,有以下代码段:

void TabStrip::UpdateNewTabButtonBorder() {
  const int extra_vertical_space = GetLayoutConstant(TAB_HEIGHT) -
                                   GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP) -
                                   NewTabButton::kButtonSize.height();
  constexpr int kHorizontalInset = 8;
  new_tab_button_->SetBorder(
      views::CreateEmptyBorder(gfx::Insets(
          extra_vertical_space / 2, kHorizontalInset, 0, kHorizontalInset)));
}

在这里,代码显式地计算垂直间距,假设标签条是水平的 —— 说明了有多少 UI 逻辑需要为垂直布局进行调整。

将这些放在一起,一个关键的内部更改可能看起来像这样:

// In tab_strip_model.h or equivalent:
enum class TabStripOrientation {
  kHorizontal,
  kVertical,
};

// In the constructor:
TabStripModel::TabStripModel(Profile* profile, Browser* browser)
   : orientation_(TabStripOrientation::kHorizontal),
     browser_(browser) {
  if (base::FeatureList::IsEnabled(features::kVerticalTabs) ||
      profile->GetPrefs()->GetBoolean(prefs::kVerticalTabsEnabled)) {
    orientation_ = TabStripOrientation::kVertical;
  }
}

在 UI 布局的其他地方:

if (orientation_ == TabStripOrientation::kVertical) {
  // use SidePanelTabStripView for vertical layout
  view_ = std::make_unique(...);
} else {
  // existing HorizontalTabStripView
  view_ = std::make_unique(...);
}

虽然我无法在这篇文章中指出公共提交哈希值(这些 CL ID 是内部/私有的),但问题跟踪器 (#420041296) 和媒体报道足以确认正在进行此类更改。

这实现了什么 —— 以及仍然需要做什么

通过方向抽象和功能标志,Chromium 可以开始支持两种工作流程:为大多数用户保留经典的水平标签栏,并允许高级用户切换到垂直侧边栏布局。该侧边栏将提供堆叠的标签(具有完整的标题可见)、更轻松的标签分组、改进的许多打开标签的扫描 —— 尤其是在超宽显示器上。

但前进的道路仍然需要努力。UI 需要支持调整侧边栏的大小、折叠/展开行为、与水平 UI 同步的主题、垂直堆栈中的拖放、溢出处理(垂直滚动而不是水平滚动)以及扩展 API 兼容性(许多扩展都假定标签位于顶部行中)。遥测必须收集有关使用情况和性能的数据,以确保该功能可以广泛推广而不会引入回归。

目前还不清楚面向用户的切换开关何时会出现在稳定版本中。在这个阶段,该标志可能只存在于早期版本(例如,Chromium Canary)或内部版本中,并且尚未宣布公开发布日期。

为什么这很重要

对于开发人员、浏览器高级用户以及保持打开数十个标签的人来说,这是一个受欢迎的转变。垂直标签布局减少了认知负荷:你可以阅读完整的标题、以可视方式对标签进行分组,并使用否则在宽屏幕上未使用的侧面空间。从工程的角度来看,这很有趣,因为它反映了一个基本的 UI 架构变化:曾经仅限水平的模型现在正在转变为与方向无关的布局。这在像 Chromium 这样庞大且跨平台的代码库中并非易事。

功能标志和方向逻辑的存在表明 Chromium 团队正在花时间 —— 构建基础、收集遥测数据、为扩展兼容性做准备 —— 而不是发布一个快速的 hack。这表明这不仅仅是一个实验:它很可能会以有意义的方式提供给用户。

总而言之:垂直标签页即将进入 Chromium。架构基础正在积极奠定。对于每天都在浏览器标签丛林中耕耘的任何人来说,这是一个值得为之做准备的改变。

CHROME VERTICAL TABS CHROMIUM CHROME DEV FEATURE VERTICAL TABS

  RELATED

  COMMENTS

0

No comment for this article.