如果你曾经尝试在使用宽屏显示器的浏览器中管理 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。架构基础正在积极奠定。对于每天都在浏览器标签丛林中耕耘的任何人来说,这是一个值得为之做准备的改变。
No comment for this article.