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 團隊正在花時間 —— 構建基礎、收集遙測、為擴充功能相容性做準備 —— 而不是發布一個快速的駭客程式。這表明這不僅僅是一個實驗:它很可能會以有意義的方式提供給使用者。

總之:垂直分頁即將登陸 Chromium。架構基礎正在積極奠定。對於每天耕耘瀏覽器分頁叢林的任何人來說,這都是一個值得為之準備的改變。

CHROME VERTICAL TABS CHROMIUM CHROME DEV FEATURE VERTICAL TABS

  RELATED

  COMMENTS

0

No comment for this article.