Close Menu
  • Trang chủ
  • Đời sống
    • Người nổi tiếng
    • Sức khỏe
    • Thể dục & Tập luyện
  • Khám phá
    • Cách làm đẹp
    • Công nghệ
    • Hướng dẫn du lịch
    • Kinh doanh
    • Thời trang
  • Thủ thuật Web
    • Hosting & Máy chủ
    • Hướng dẫn Blogger
    • WordPress & Plugin
  • Tiếng Việt
    • Tiếng Việt
    • Hmoob
    • English
Facebook YouTube X (Twitter) Instagram
Trending
  • CPU Performance API: Chọn giao diện nhẹ hơn cho máy yếu
  • Di chuyển XSLT khỏi trình duyệt trước khi Chrome 158 tắt hỗ trợ
  • Tạo thanh tiêu đề kéo thả cho PWA desktop bằng `window-drag`
  • Thiết kế pipeline cảnh báo package độc hại có thể phát hiện và hoàn tác
  • Lập kế hoạch dự phòng GitHub Actions khi GitHub ngừng hoạt động nhiều giờ
  • Giảm thông báo web rác: kiểm tra quyền trước khi gửi bằng Chrome và FCM
  • Bật cảnh báo mã độc Dependabot cho 8 hệ sinh thái trên GitHub
  • Vì sao nên xem thế giới thủ công của Olivia Rodrigo tại GRAMMY Museum?
Facebook YouTube X (Twitter) Instagram
SaibABCSaibABC
Chú thích cho quảng cáo
  • Trang chủ
  • Đời sống
    1. Người nổi tiếng
    2. Sức khỏe
    3. Thể dục & Tập luyện
    4. View All

    Triển lãm thời trang Michael Jackson: Khi trang phục kể lại sân khấu

    13/09/2026

    Mua vé concert an toàn: 7 bước tránh vé giả trên mạng xã hội

    13/09/2026

    Messi ghi bao nhiêu bàn tại World Cup? Bảng theo từng kỳ đến 2026

    13/09/2026

    Messi và sáu kỳ World Cup: từ thất bại 2014 đến đỉnh cao 2022

    13/09/2026

    Trẻ em ăn nhiều muối từ thực phẩm nào? Cách đọc nhãn để giảm natri

    12/09/2026

    Ghi “tejocote root” chưa chắc là rễ tejocote an toàn

    12/09/2026

    Kê kháng sinh ngoại trú không chỉ là chọn đúng thuốc

    11/09/2026

    Tiêm glutathione có an toàn không? Đừng nhầm bột thực phẩm với nguyên liệu tiêm

    11/09/2026

    Bài tập 5 phút tại văn phòng: Lịch vận động snack-sized

    23/08/2026

    Bài tập core hiệu quả: Từ người mới đến nâng cao

    16/01/2024

    Triển lãm thời trang Michael Jackson: Khi trang phục kể lại sân khấu

    13/09/2026

    Mua vé concert an toàn: 7 bước tránh vé giả trên mạng xã hội

    13/09/2026

    Messi ghi bao nhiêu bàn tại World Cup? Bảng theo từng kỳ đến 2026

    13/09/2026

    Messi và sáu kỳ World Cup: từ thất bại 2014 đến đỉnh cao 2022

    13/09/2026
  • Khám phá
    1. Cách làm đẹp
    2. Công nghệ
    3. Hướng dẫn du lịch
    4. Kinh doanh
    5. Thời trang
    Featured

    CPU Performance API: Chọn giao diện nhẹ hơn cho máy yếu

    By Nuj Coom13/09/2026
    Recent

    CPU Performance API: Chọn giao diện nhẹ hơn cho máy yếu

    13/09/2026

    Tạo thanh tiêu đề kéo thả cho PWA desktop bằng `window-drag`

    13/09/2026

    Thiết kế pipeline cảnh báo package độc hại có thể phát hiện và hoàn tác

    13/09/2026
  • Thủ thuật Web
    1. Hosting & Máy chủ
    2. Hướng dẫn Blogger
    3. WordPress & Plugin
    4. View All

    Cài Let’s Encrypt trên Vultr: Bật HTTPS và tự động gia hạn chứng chỉ

    09/09/2026

    Cài WordPress trên VPS Vultr chi tiết và đưa website chạy HTTPS an toàn

    08/09/2026

    Kết nối tên miền với VPS Vultr và xác minh website hoạt động

    08/09/2026

    Đăng ký và triển khai VPS Ubuntu trên Vultr qua SSH

    07/09/2026

    Phân quyền Blogger cho nhóm cộng tác mà vẫn giữ quyền kiểm soát

    07/09/2026

    Thêm nút Báo cáo nội dung Blogger cho blog tùy biến

    07/09/2026

    Tối ưu ảnh Blogger cho Google Images: Từ tên file đến trang đích

    07/09/2026

    Lazy loading ảnh Blogger có làm mất SEO? Cách kiểm tra Googlebot

    04/09/2026

    WordPress 7.1: Chuyển GIF sang video để giảm dung lượng

    11/09/2026

    Cài WordPress trên VPS Vultr chi tiết và đưa website chạy HTTPS an toàn

    08/09/2026

    WordPress 7.1 xử lý AVIF và HEIC trên trình duyệt ra sao?

    02/09/2026

    WordPress 7.1: Vì sao breakpoint không chỉnh được trong Site Editor?

    02/09/2026

    CPU Performance API: Chọn giao diện nhẹ hơn cho máy yếu

    13/09/2026

    Di chuyển XSLT khỏi trình duyệt trước khi Chrome 158 tắt hỗ trợ

    13/09/2026

    WordPress 7.1: Chuyển GIF sang video để giảm dung lượng

    11/09/2026

    WebMCP cho website: Biến HTML form thành công cụ AI agent có thể gọi

    11/09/2026
  • Tiếng Việt
    • Tiếng Việt
    • Hmoob
    • English
SaibABCSaibABC
Home»Khám phá»Công nghệ»Tạo thanh tiêu đề kéo thả cho PWA desktop bằng `window-drag`
Công nghệ 12 Mins ReadKhông có bình luận

Tạo thanh tiêu đề kéo thả cho PWA desktop bằng `window-drag`

Nuj CoomBy Nuj Coom
Facebook Twitter Pinterest LinkedIn Tumblr Email
Chú thích cho quảng cáo

Contents

  1. Chuẩn bị đúng môi trường trước khi viết CSS
  2. Bật Window Controls Overlay trong manifest
  3. Tạo cấu trúc thanh tiêu đề và vùng tương tác
  4. Chừa vùng an toàn cho nút điều khiển cửa sổ
  5. Phát hiện chế độ chạy và thay đổi hình học bằng JavaScript
  6. Cài đặt và xác minh theo đúng thứ tự
  7. Xử lý lỗi theo triệu chứng
    1. Thanh tiêu đề không kéo được
    2. Nút hoặc ô nhập liệu bị kéo thay vì nhận thao tác
    3. Nội dung bị che bởi nút đóng hoặc phóng to
    4. Chạy được trong Chrome 152 nhưng không dùng được ở trình duyệt khác
  8. Khả năng sử dụng, bảo mật và đường lui
  9. Nguồn tham khảo

Câu trả lời ngắn: để kéo được cửa sổ bằng giao diện tùy biến, bạn cần bật window-controls-overlay trong manifest, cài PWA trên máy tính, đặt window-drag: move cho vùng trống và đặt window-drag: none trực tiếp lên nút, ô nhập liệu cùng các phần tử tương tác. Nếu mở ứng dụng trong tab thông thường, thao tác kéo cửa sổ sẽ không hoạt động.

Trong phạm vi Chrome 152, window-drag là thuộc tính CSS dùng để đánh dấu vùng có thể di chuyển cửa sổ của ứng dụng web desktop. Cơ chế này không biến một trang web trong tab thành cửa sổ hệ điều hành; nó cần PWA đã cài và chế độ hiển thị hỗ trợ Window Controls Overlay (theo developer.chrome.com). Phần dưới dùng một ứng dụng ghi chú minh họa. Hãy thay tên ứng dụng, đường dẫn biểu tượng và nội dung theo dự án của bạn.

Chuẩn bị đúng môi trường trước khi viết CSS

Ví dụ này giả định bạn đã có một ứng dụng web có thể chạy qua HTTPS hoặc localhost, có tệp manifest và các biểu tượng ứng dụng. Để trình duyệt nhận diện và cài đặt PWA, ứng dụng cũng cần đáp ứng các điều kiện cài đặt hiện hành của trình duyệt, chẳng hạn manifest được liên kết đúng và cơ chế cài đặt của ứng dụng đã sẵn sàng.

  • Dùng Chrome 152 trên hệ điều hành desktop; bài viết không giả định hỗ trợ tương đương trên mọi trình duyệt.
  • Phục vụ ứng dụng qua HTTPS hoặc localhost. Không dùng URL HTTP thông thường trên máy chủ công khai cho bước cài đặt.
  • Đảm bảo các tệp biểu tượng trong manifest thực sự tồn tại. Nếu dùng ví dụ dưới đây, tạo /icons/icon-192.png và /icons/icon-512.png, hoặc thay bằng đường dẫn biểu tượng hợp lệ của bạn.
  • Có quyền sửa HTML, CSS và manifest, đồng thời có thể mở DevTools để kiểm tra tệp và lỗi cú pháp.

Nếu ứng dụng chưa thể cài thành PWA, hãy giải quyết điều kiện cài đặt trước. window-drag không phải cách thay thế cho manifest hoặc cho một ứng dụng desktop đã cài.

Bật Window Controls Overlay trong manifest

Mở tệp manifest ở thư mục gốc của ứng dụng, thường là manifest.webmanifest. Đặt nội dung tương tự sau và thay các giá trị mẫu như tên ứng dụng, start_url, scope và đường dẫn biểu tượng:

Chú thích cho quảng cáo
{
  "name": "Desktop Notes",
  "short_name": "Notes",
  "start_url": "/",
  "scope": "/",
  "display_override": [
    "window-controls-overlay",
    "standalone"
  ],
  "display": "standalone",
  "background_color": "#111827",
  "theme_color": "#111827",
  "icons": [
    {
      "src": "/icons/icon-192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ]
}

Đặt đoạn HTML sau trong phần <head> của trang chính, rồi thay đường dẫn nếu manifest không nằm ở thư mục gốc:

<link rel="manifest" href="/manifest.webmanifest">

Chrome sẽ thử giá trị đầu tiên trong display_override; nếu không dùng được, trình duyệt có thể chuyển sang standalone. Thuộc tính display là đường lui cho môi trường không hỗ trợ cơ chế override. Sau khi sửa manifest, hãy tải lại ứng dụng và kiểm tra trong DevTools rằng tệp manifest trả về mã HTTP thành công, có nội dung JSON hợp lệ và các biểu tượng không trả về lỗi 404.

Tạo cấu trúc thanh tiêu đề và vùng tương tác

Trong HTML của trang ứng dụng, đặt thanh tiêu đề trước nội dung chính. Ví dụ dưới đây có thương hiệu, ô tìm kiếm và nút cài đặt:

<body>
  <header class="app-titlebar">
    <div class="titlebar-content">
      <div class="brand">
        <span class="brand-mark" aria-hidden="true">N</span>
        <span>Desktop Notes</span>
      </div>

      <label class="search-box">
        <span class="sr-only">Tìm ghi chú</span>
        <input type="search" placeholder="Tìm ghi chú">
      </label>

      <button class="settings-button" type="button">
        Cài đặt
      </button>
    </div>
  </header>

  <main class="page-content">
    <h1>Ghi chú của tôi</h1>
    <p>Nội dung ứng dụng nằm bên dưới thanh tiêu đề tùy biến.</p>
  </main>
</body>

Tiếp theo, thêm CSS vào tệp stylesheet đang được trang tải. Thuộc tính window-drag: move nằm trên thanh tiêu đề; các vùng có thể nhận thao tác người dùng được loại trừ bằng window-drag: none:

:root {
  --titlebar-height: 44px;
  --surface: #111827;
  --text: #f9fafb;
  --border: #374151;
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  min-height: 100%;
}

body {
  color: #111827;
  background: #f3f4f6;
  font: 15px/1.5 system-ui, sans-serif;
}

.app-titlebar {
  min-height: var(--titlebar-height);
  color: var(--text);
  background: var(--surface);
  window-drag: move;
}

.titlebar-content {
  min-height: var(--titlebar-height);
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 0 12px;
}

.brand {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  white-space: nowrap;
  window-drag: none;
}

.brand-mark {
  display: grid;
  width: 24px;
  height: 24px;
  place-items: center;
  border-radius: 6px;
  background: #2563eb;
  font-weight: 700;
}

.search-box {
  flex: 1;
  max-width: 420px;
  window-drag: none;
}

.search-box input {
  width: 100%;
  min-height: 30px;
  padding: 4px 10px;
  color: var(--text);
  background: #1f2937;
  border: 1px solid var(--border);
  border-radius: 6px;
}

.settings-button {
  min-height: 30px;
  padding: 4px 10px;
  color: var(--text);
  background: transparent;
  border: 1px solid var(--border);
  border-radius: 6px;
  cursor: pointer;
  window-drag: none;
}

.page-content {
  padding: 24px;
}

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

Trong ví dụ này, vùng trống còn lại của .app-titlebar là vùng kéo. Logo, nhãn tìm kiếm, ô nhập và nút được đánh dấu none để người dùng có thể chọn, nhập hoặc nhấn chúng thay vì vô tình di chuyển cửa sổ.

Chừa vùng an toàn cho nút điều khiển cửa sổ

Window Controls Overlay đưa nội dung web vào khu vực vốn dành cho thanh tiêu đề, nhưng các nút thu nhỏ, phóng to và đóng cửa sổ vẫn do hệ điều hành hiển thị. Vị trí vùng này thay đổi theo hệ điều hành, hướng giao diện, tỷ lệ hiển thị và kích thước cửa sổ. Các biến titlebar-area-x, titlebar-area-y, titlebar-area-width và titlebar-area-height mô tả hình chữ nhật vùng title bar khả dụng; chúng không nên được hiểu máy móc là cùng một khoảng đệm trái và phải (theo developer.mozilla.org).

Có thể dùng env() để tạo khoảng đệm ban đầu. Đặt đoạn này sau quy tắc CSS trước đó:

.app-titlebar {
  padding-block-start: env(titlebar-area-y, 0px);
}

.titlebar-content {
  min-height: max(
    var(--titlebar-height),
    env(titlebar-area-height, var(--titlebar-height))
  );
  padding-inline-start: max(
    12px,
    env(titlebar-area-x, 0px)
  );
  padding-inline-end: max(
    12px,
    calc(
      100% - env(titlebar-area-x, 0px) -
      env(titlebar-area-width, 100%)
    )
  );
}

Đây là cấu hình khởi đầu, không phải khoảng cách cố định đúng cho mọi thiết kế. Nếu thanh tiêu đề có bố cục phức tạp, hãy đọc hình chữ nhật thực tế bằng API và cập nhật biến CSS của ứng dụng sau khi hình học overlay thay đổi. Hàm env() cần có giá trị dự phòng để giao diện vẫn dùng được khi trình duyệt không cung cấp biến môi trường (theo developer.mozilla.org).

Phát hiện chế độ chạy và thay đổi hình học bằng JavaScript

Phát hiện chế độ chạy và thay đổi hình học bằng JavaScript

Không nên dùng User-Agent để kết luận ứng dụng đang chạy trong PWA. Đặt đoạn sau trong tệp JavaScript được tải sau khi tài liệu có document.documentElement. Đoạn mã chỉ cập nhật trạng thái giao diện và ghi thông tin chẩn đoán; chức năng chính của ứng dụng không được phụ thuộc vào API này:

const standaloneQuery = window.matchMedia(
  '(display-mode: standalone)'
);

function updateWindowMode() {
  const overlay = navigator.windowControlsOverlay;
  const isStandalone = standaloneQuery.matches;
  const isOverlayVisible = Boolean(overlay?.visible);

  document.documentElement.dataset.pwa =
    isStandalone ? 'true' : 'false';

  document.documentElement.dataset.titlebarOverlay =
    isOverlayVisible ? 'true' : 'false';

  if (overlay) {
    const rect = overlay.getTitlebarAreaRect();
    console.debug('Title bar area:', {
      x: rect.x,
      y: rect.y,
      width: rect.width,
      height: rect.height
    });
  }
}

updateWindowMode();

if (navigator.windowControlsOverlay) {
  navigator.windowControlsOverlay.addEventListener(
    'geometrychange',
    updateWindowMode
  );
}

standaloneQuery.addEventListener('change', updateWindowMode);

Khi chạy trong tab, isStandalone thường là false; khi mở từ trình khởi chạy dưới dạng PWA, trạng thái này có thể chuyển thành true. Nếu navigator.windowControlsOverlay không tồn tại, hãy giữ thanh tiêu đề như HTML thông thường thay vì cố mô phỏng kéo cửa sổ bằng JavaScript.

Cài đặt và xác minh theo đúng thứ tự

  1. Phục vụ ứng dụng: khởi động máy chủ phát triển hoặc máy chủ HTTPS của dự án. Mở đúng URL ứng dụng trong Chrome 152 trên máy tính.
  2. Kiểm tra manifest: trong DevTools, mở phần Application rồi kiểm tra manifest, display_override, display, biểu tượng và các đường dẫn. Sửa mọi lỗi JSON hoặc lỗi tải tệp trước khi tiếp tục.
  3. Cài PWA: dùng nút cài đặt PWA của Chrome, không chỉ ghim tab. Nếu ứng dụng đã cài từ trước, hãy đóng cửa sổ ứng dụng, tải lại manifest và cài lại khi cần để kiểm tra thay đổi.
  4. Mở đúng ứng dụng: đóng tab gốc, sau đó mở PWA từ shortcut hoặc trình khởi chạy của hệ điều hành.
  5. Kiểm tra vùng kéo: nhấn và kéo phần trống của .app-titlebar. Kết quả mong đợi là cửa sổ PWA di chuyển theo chuột.
  6. Kiểm tra vùng loại trừ: nhấn nút Cài đặt, đặt con trỏ vào ô tìm kiếm, nhập văn bản và thử chọn văn bản. Các thao tác này phải diễn ra trong trang, không kéo cửa sổ.
  7. Kiểm tra vùng hệ thống: thay đổi kích thước cửa sổ, thử trạng thái phóng to và kiểm tra khu vực gần các nút hệ thống. Logo, tiêu đề và nút ứng dụng không được bị che.
  8. Kiểm tra fallback: mở cùng URL trong tab thông thường hoặc môi trường không có Window Controls Overlay. Nội dung vẫn phải đọc được, điều khiển vẫn phải dùng được và thanh đầu trang không được tạo cảm giác là vùng kéo cửa sổ.

Nếu bước kiểm tra đầu tiên không kéo được cửa sổ, đừng chỉnh màu sắc hoặc kích thước trước. Hãy xác định ứng dụng có thực sự được cài, manifest có được đọc lại và API có hiện diện hay không.

Xử lý lỗi theo triệu chứng

Thanh tiêu đề không kéo được

  • Kiểm tra bạn đang mở cửa sổ PWA đã cài, không phải URL trong tab.
  • Kiểm tra manifest có chính xác window-controls-overlay, có standalone dự phòng và được liên kết từ trang hiện tại.
  • Kiểm tra DevTools không báo lỗi cú pháp CSS hoặc lỗi tải stylesheet.
  • Kiểm tra vùng cần kéo không bị một phần tử phủ lên và không bị áp dụng window-drag: none ngoài ý muốn.
  • Kiểm tra trình duyệt có cung cấp navigator.windowControlsOverlay và trạng thái hiển thị phù hợp. Nếu không, hành vi không kéo được có thể là fallback đúng, không phải lỗi CSS.

Nút hoặc ô nhập liệu bị kéo thay vì nhận thao tác

Đặt window-drag: none trực tiếp lên các phần tử nhận tương tác. Với thanh tiêu đề có nhiều loại điều khiển, có thể thêm quy tắc sau:

.titlebar-content button,
.titlebar-content input,
.titlebar-content select,
.titlebar-content textarea,
.titlebar-content a,
.titlebar-content label {
  window-drag: none;
}

Đừng chỉ loại trừ nút mà bỏ qua label bao quanh ô nhập hoặc phần tử phủ lên điều khiển. Sau khi sửa CSS, tải lại cửa sổ PWA rồi kiểm tra cả thao tác chuột và bàn phím.

Nội dung bị che bởi nút đóng hoặc phóng to

Không đặt logo hoặc nút ứng dụng cố định ở góc trên cùng mà không tính đến hình chữ nhật title bar. Kiểm tra giá trị rect được ghi trong Console, đối chiếu với vị trí thực tế của nội dung và điều chỉnh khoảng đệm. Nếu bố cục dùng RTL hoặc nhiều màn hình, kiểm tra thêm hướng giao diện và tỷ lệ hiển thị thực tế.

Chạy được trong Chrome 152 nhưng không dùng được ở trình duyệt khác

Không giả định mọi trình duyệt đều hỗ trợ cùng một thuộc tính hoặc API. Fallback sau đây tắt vùng kéo khi thuộc tính không được nhận diện và tắt khoảng đệm dành riêng cho overlay khi trạng thái overlay là false:

@supports not (window-drag: move) {
  .app-titlebar {
    window-drag: none;
  }
}

html[data-titlebar-overlay="false"] .app-titlebar {
  padding-block-start: 0;
}

Không dùng Pointer Events để mô phỏng việc di chuyển cửa sổ. Cách đó chỉ di chuyển nội dung trong viewport, không di chuyển cửa sổ cấp hệ điều hành.

Khả năng sử dụng, bảo mật và đường lui

  • Giữ tên ứng dụng, nhận diện nguồn gốc và điều hướng rõ ràng; giao diện gần như không có thanh tiêu đề hệ thống có thể khiến người dùng khó phân biệt vùng web với vùng cửa sổ.
  • Không biến toàn bộ màn hình thành vùng kéo. Người dùng vẫn phải chọn văn bản, cuộn nội dung và thao tác bằng bàn phím.
  • Đảm bảo mọi nút và ô nhập liệu có nhãn, thứ tự bàn phím và trạng thái tiêu điểm phù hợp.
  • Kiểm tra trạng thái phóng to, thu nhỏ, nhiều màn hình, tỷ lệ hiển thị lớn và RTL nếu ứng dụng hỗ trợ các trường hợp đó.
  • Chỉ giữ Window Controls Overlay khi lợi ích của thanh tiêu đề tùy biến đáng để kiểm thử trên các hệ điều hành và trình duyệt mục tiêu.

Nếu tính năng gây lỗi hoặc khó bảo trì, đường lui an toàn là xóa window-controls-overlay khỏi display_override, giữ display: "standalone" và đặt window-drag: none cho thanh tiêu đề. Ứng dụng vẫn có thể chạy như PWA standalone với cấu trúc HTML và các điều khiển thông thường.

Bạn có thể coi triển khai hoàn tất khi cả bốn điều kiện đều đúng: PWA đã cài trên desktop; vùng trống của thanh tiêu đề di chuyển được cửa sổ; nút và ô nhập liệu vẫn hoạt động; nội dung không bị che bởi vùng điều khiển hệ thống. Nếu thiếu một điều kiện, quay lại kiểm tra manifest, trạng thái cài đặt, vùng phủ phần tử và các quy tắc window-drag: none.

Nguồn tham khảo

  • Chrome 152 | Release notes | Chrome for Developers
  • Chrome 152 Release Notes – Chrome Platform Status
  • Window Controls Overlay API – Web APIs | MDN
  • env() CSS function – CSS | MDN
  • Window Controls Overlay

Chú thích cho quảng cáo
Chrome 152 CSS PWA ứng dụng web desktop Window Controls Overlay window-drag
Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
Bài trước đóThiết kế pipeline cảnh báo package độc hại có thể phát hiện và hoàn tác
Bài tiếp theo Di chuyển XSLT khỏi trình duyệt trước khi Chrome 158 tắt hỗ trợ
Nuj Coom
  • Website
  • Facebook
  • X (Twitter)
  • Instagram

I'm a doctor, for sure. But I also love writing and sharing knowledge, life experiences, web tricks, and useful lectures. Let's cheer for your passion.

Bài viết liên quan

CPU Performance API: Chọn giao diện nhẹ hơn cho máy yếu

13/09/2026

Thiết kế pipeline cảnh báo package độc hại có thể phát hiện và hoàn tác

13/09/2026

Lập kế hoạch dự phòng GitHub Actions khi GitHub ngừng hoạt động nhiều giờ

13/09/2026
Add A Comment
Leave A Reply Cancel Reply

Bài gần đây

Thiết lập kiểm duyệt bình luận Blogger để giảm spam

Triển lãm thời trang Michael Jackson: Khi trang phục kể lại sân khấu

SEO thời AI: Tối ưu nội dung cho AI Overviews và AI Mode

Bảo vệ doanh nghiệp nhỏ khỏi lừa đảo giả danh

Yoga cho người lớn tuổi: Lịch tập an toàn và cách điều chỉnh

Advertisement
Chú thích cho quảng cáo

ĐĂNG KÝ THÔNG BÁO

Nhận tin tức sáng tạo mới nhất từ ​​SaibABC.Com về các thủ thuật, thiết kế và kinh doanh trên web.

Copyright © 2024. Designed by NujCoom.
  • Trang chủ
  • Chính sách
  • Liên hệ
  • Hmoob
  • English

Type above and press Enter to search. Press Esc to cancel.