{"id":4395,"date":"2026-03-12T13:54:25","date_gmt":"2026-03-12T06:54:25","guid":{"rendered":"https:\/\/wpdesign.vn\/painting-order-stacking-context-va-compositing-layer\/"},"modified":"2026-05-04T16:09:55","modified_gmt":"2026-05-04T09:09:55","slug":"painting-order-stacking-context-va-compositing-layer","status":"publish","type":"post","link":"https:\/\/wpdesign.vn\/vi\/painting-order-stacking-context-va-compositing-layer\/","title":{"rendered":"Painting Order, Stacking Context V\u00e0 Compositing Layer"},"content":{"rendered":"\n<p>\u0110\u1ec3 t\u1ea1o ra m\u1ed9t tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng hi\u1ec7n \u0111\u1ea1i v\u1edbi c\u00e1c hi\u1ec7u \u1ee9ng \u0111\u1ed5 b\u00f3ng, modal ch\u1ed3ng l\u1edbp hay c\u00e1c chuy\u1ec3n \u0111\u1ed9ng m\u01b0\u1ee3t m\u00e0, tr\u00ecnh duy\u1ec7t ph\u1ea3i gi\u1ea3i quy\u1ebft m\u1ed9t b\u00e0i to\u00e1n ph\u1ee9c t\u1ea1p h\u01a1n nhi\u1ec1u: <strong>Tr\u1ee5c Z (Z-axis)<\/strong> v\u00e0 <strong>Hi\u1ec7u n\u0103ng Render<\/strong>.<\/p>\n\n<h4 class=\"wp-block-heading\">1. Browser Rendering Pipeline: T\u1eeb M\u00e3 Ngu\u1ed3n \u0110\u1ebfn \u0110i\u1ec3m \u1ea2nh<\/h4>\n\n<p>\u0110\u1ec3 hi\u1ec3u t\u1ea1i sao ba kh\u00e1i ni\u1ec7m tr\u00ean l\u1ea1i t\u1ed3n t\u1ea1i, ch\u00fang ta c\u1ea7n nh\u00ecn v\u00e0o &#8220;d\u00e2y chuy\u1ec1n s\u1ea3n xu\u1ea5t&#8221; (Pipeline) c\u1ee7a m\u1ed9t tr\u00ecnh duy\u1ec7t hi\u1ec7n \u0111\u1ea1i (nh\u01b0 Chrome hay Safari):<\/p>\n\n<ul start=\"1\" class=\"wp-block-list\">\n<li><strong>DOM &amp; CSSOM:<\/strong> Chuy\u1ec3n \u0111\u1ed5i HTML\/CSS th\u00e0nh c\u1ea5u tr\u00fac c\u00e2y.<\/li>\n\n\n\n<li><strong>Layout (Reflow):<\/strong> T\u00ednh to\u00e1n v\u1ecb tr\u00ed h\u00ecnh h\u1ecdc ($x, y, width, height$) c\u1ee7a t\u1eebng node.<\/li>\n\n\n\n<li><strong>Paint Setup (Recording):<\/strong> \u0110\u00e2y l\u00e0 n\u01a1i <strong>Painting Order<\/strong> v\u00e0 <strong>Stacking Context<\/strong> \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh. Tr\u00ecnh duy\u1ec7t ghi l\u1ea1i m\u1ed9t danh s\u00e1ch c\u00e1c l\u1ec7nh v\u1ebd (Display Items). <\/li>\n\n\n\n<li><strong>Tiling &amp; Rasterization:<\/strong> Chuy\u1ec3n c\u00e1c l\u1ec7nh v\u1ebd th\u00e0nh pixel (bitmap).<\/li>\n\n\n\n<li><strong>Compositing:<\/strong> \u0110\u00e2y l\u00e0 n\u01a1i <strong>Compositing Layer<\/strong> xu\u1ea5t hi\u1ec7n. C\u00e1c bitmap \u0111\u01b0\u1ee3c g\u1eedi l\u00ean GPU \u0111\u1ec3 ch\u1ed3ng x\u1ebfp v\u00e0 hi\u1ec3n th\u1ecb l\u00ean m\u00e0n h\u00ecnh. <\/li>\n<\/ul>\n\n<h4 class=\"wp-block-heading\">2. Painting Order: Thu\u1eadt to\u00e1n &#8220;C\u1ecd v\u1ebd&#8221; c\u1ee7a Tr\u00ecnh duy\u1ec7t<\/h4>\n\n<h6 class=\"wp-block-heading\">2.1. Kh\u00e1i ni\u1ec7m v\u00e0 Quy t\u1eafc &#8220;Stacking Level&#8221;<\/h6>\n\n<p><strong>Painting Order<\/strong> l\u00e0 th\u1ee9 t\u1ef1 c\u01a1 b\u1ea3n nh\u1ea5t m\u00e0 tr\u00ecnh duy\u1ec7t s\u1eed d\u1ee5ng \u0111\u1ec3 \u0111\u1ed5 m\u00e0u l\u00ean canvas. H\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng b\u1ea1n \u0111ang v\u1ebd m\u1ed9t b\u1ee9c tranh s\u01a1n d\u1ea7u: b\u1ea1n v\u1ebd n\u1ec1n tr\u01b0\u1edbc, sau \u0111\u00f3 l\u00e0 c\u00e1c chi ti\u1ebft xa, v\u00e0 cu\u1ed1i c\u00f9ng l\u00e0 c\u00e1c chi ti\u1ebft \u0111\u00e8 l\u00ean tr\u00ean. <\/p>\n\n<p>N\u1ebfu kh\u00f4ng c\u00f3 b\u1ea5t k\u1ef3 thu\u1ed9c t\u00ednh CSS \u0111\u1eb7c bi\u1ec7t n\u00e0o (nh\u01b0 <code>position<\/code> hay <code>z-index<\/code>), tr\u00ecnh duy\u1ec7t tu\u00e2n theo th\u1ee9 t\u1ef1 m\u1eb7c \u0111\u1ecbnh c\u1ee7a Spec CSS 2.1:<\/p>\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>Background &amp; Borders<\/strong> c\u1ee7a ph\u1ea7n t\u1eed g\u1ed1c (Root element).<\/li>\n\n\n\n<li><strong>Non-positioned Blocks:<\/strong> C\u00e1c kh\u1ed1i <code>div<\/code>, <code>p<\/code>, <code>section<\/code> n\u1eb1m trong lu\u1ed3ng t\u00e0i li\u1ec7u (normal flow) theo th\u1ee9 t\u1ef1 xu\u1ea5t hi\u1ec7n trong HTML.<\/li>\n\n\n\n<li><strong>Floats:<\/strong> C\u00e1c ph\u1ea7n t\u1eed c\u00f3 thu\u1ed9c t\u00ednh <code>float<\/code>.<\/li>\n\n\n\n<li><strong>Inlines &amp; Inline-blocks:<\/strong> V\u0103n b\u1ea3n, h\u00ecnh \u1ea3nh, c\u00e1c ph\u1ea7n t\u1eed n\u1ed9i d\u00f2ng.<\/li>\n\n\n\n<li><strong>Positioned Elements:<\/strong> C\u00e1c ph\u1ea7n t\u1eed c\u00f3 <code>position: relative, absolute, fixed, sticky<\/code>.<\/li>\n<\/ol>\n\n<h6 class=\"wp-block-heading\">2.2. T\u1ea1i sao Inline l\u1ea1i n\u1eb1m tr\u00ean Block?<\/h6>\n\n<p>M\u1ed9t \u0111i\u1ec3m th\u00fa v\u1ecb \u00edt ng\u01b0\u1eddi nh\u1eadn ra: Theo Painting Order, v\u0103n b\u1ea3n (inline) th\u01b0\u1eddng \u0111\u01b0\u1ee3c v\u1ebd sau kh\u1ed1i bao quanh (block) \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o n\u1ed9i dung lu\u00f4n hi\u1ec3n th\u1ecb r\u00f5 r\u00e0ng tr\u00ean n\u1ec1n c\u1ee7a kh\u1ed1i \u0111\u00f3. \u0110\u00e2y l\u00e0 l\u00fd do t\u1ea1i sao m\u1ed9t <code>div<\/code> c\u00f3 m\u00e0u n\u1ec1n xanh l\u00e1 c\u00e2y n\u1eb1m sau trong HTML c\u00f3 th\u1ec3 che khu\u1ea5t m\u1ed9t <code>div<\/code> \u0111\u1ecf ph\u00eda tr\u01b0\u1edbc, nh\u01b0ng ch\u1eef b\u00ean trong <code>div<\/code> \u0111\u1ecf \u0111\u00f4i khi l\u1ea1i c\u00f3 h\u00e0nh vi hi\u1ec3n th\u1ecb kh\u00e1c bi\u1ec7t n\u1ebfu c\u00f3 s\u1ef1 can thi\u1ec7p c\u1ee7a <code>float<\/code>. <\/p>\n\n<h4 class=\"wp-block-heading\">3. Stacking Context: &#8220;V\u0169 tr\u1ee5 song song&#8221; c\u1ee7a Z-Index<\/h4>\n\n<h6 class=\"wp-block-heading\">3.1. \u0110\u1ecbnh ngh\u0129a Stacking Context<\/h6>\n\n<p>N\u1ebfu Painting Order l\u00e0 m\u1ed9t danh s\u00e1ch ph\u1eb3ng, th\u00ec <strong>Stacking Context<\/strong> l\u00e0 m\u1ed9t c\u1ea5u tr\u00fac c\u00e2y. M\u1ed9t Stacking Context l\u00e0 m\u1ed9t m\u00f4i tr\u01b0\u1eddng kh\u00e9p k\u00edn. C\u00e1c ph\u1ea7n t\u1eed con b\u00ean trong context \u0111\u00f3 s\u1ebd \u0111\u01b0\u1ee3c s\u1eafp x\u1ebfp z-index v\u1edbi nhau, nh\u01b0ng t\u1ed5ng th\u1ec3 c\u1ea3 context \u0111\u00f3 s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1ed1i x\u1eed nh\u01b0 m\u1ed9t &#8220;kh\u1ed1i duy nh\u1ea5t&#8221; so v\u1edbi c\u00e1c ph\u1ea7n t\u1eed b\u00ean ngo\u00e0i.  <\/p>\n\n<h6 class=\"wp-block-heading\">3.2. C\u01a1 ch\u1ebf h\u00ecnh th\u00e0nh: Nh\u1eefng &#8220;k\u1ebb g\u00e2y nhi\u1ec5u&#8221; th\u1ea7m l\u1eb7ng<\/h6>\n\n<p>Sai l\u1ea7m l\u1edbn nh\u1ea5t l\u00e0 tin r\u1eb1ng ch\u1ec9 c\u00f3 <code>z-index<\/code> m\u1edbi t\u1ea1o ra Stacking Context. Th\u1ef1c t\u1ebf, trong CSS hi\u1ec7n \u0111\u1ea1i, r\u1ea5t nhi\u1ec1u thu\u1ed9c t\u00ednh v\u00f4 t\u00ecnh k\u00edch ho\u1ea1t c\u01a1 ch\u1ebf n\u00e0y: <\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>V\u1ecb tr\u00ed truy\u1ec1n th\u1ed1ng:<\/strong> <code>position: absolute\/relative<\/code> k\u1ebft h\u1ee3p v\u1edbi <code>z-index<\/code> kh\u00e1c <code>auto<\/code>.<\/li>\n\n\n\n<li><strong>\u0110\u1ed9 trong su\u1ed1t:<\/strong> <code>opacity<\/code> nh\u1ecf h\u01a1n 1.<\/li>\n\n\n\n<li><strong>Bi\u1ebfn \u0111\u1ed5i h\u00ecnh h\u1ecdc:<\/strong> <code>transform<\/code> (ngay c\u1ea3 <code>translate(0)<\/code>).<\/li>\n\n\n\n<li><strong>B\u1ed9 l\u1ecdc:<\/strong> <code>filter<\/code> (blur, brightness, v.v.).<\/li>\n\n\n\n<li><strong>C\u1ed1 \u0111\u1ecbnh:<\/strong> <code>position: fixed<\/code> ho\u1eb7c <code>sticky<\/code>.<\/li>\n\n\n\n<li><strong>T\u00ednh ch\u1ea5t m\u1edbi:<\/strong> <code>will-change<\/code>, <code>contain<\/code>, <code>isolation: isolate<\/code>.<\/li>\n<\/ul>\n\n<h6 class=\"wp-block-heading\">3.3. Quy t\u1eafc &#8220;Nguy\u00ean t\u1eed&#8221; (Atomicity)<\/h6>\n\n<p>M\u1ed9t khi m\u1ed9t ph\u1ea7n t\u1eed \u0111\u00e3 t\u1ea1o ra Stacking Context, n\u00f3 tr\u1edf th\u00e0nh m\u1ed9t th\u1ef1c th\u1ec3 nguy\u00ean t\u1eed trong m\u1eaft c\u1ee7a context cha.<\/p>\n\n<p><strong>V\u00ed d\u1ee5 kinh \u0111i\u1ec3n:<\/strong><\/p>\n\n<ul class=\"wp-block-list\">\n<li>Ph\u1ea7n t\u1eed A (z-index: 1).<\/li>\n\n\n\n<li>Ph\u1ea7n t\u1eed B (z-index: 2).\n<ul class=\"wp-block-list\">\n<li>Ph\u1ea7n t\u1eed B1 (n\u1eb1m trong B, z-index: 9999).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n<p>D\u00f9 B1 c\u00f3 <code>z-index<\/code> l\u1edbn \u0111\u1ebfn \u0111\u00e2u, n\u00f3 c\u0169ng kh\u00f4ng bao gi\u1edd n\u1eb1m d\u01b0\u1edbi A, v\u00ec n\u00f3 b\u1ecb &#8220;giam c\u1ea7m&#8221; trong Context c\u1ee7a B. N\u1ebfu B n\u1eb1m tr\u00ean A, th\u00ec m\u1ecdi th\u1ee9 c\u1ee7a B \u0111\u1ec1u n\u1eb1m tr\u00ean A.<\/p>\n\n<h4 class=\"wp-block-heading\">4. Compositing Layer: Khi GPU ti\u1ebfp qu\u1ea3n<\/h4>\n\n<h6 class=\"wp-block-heading\">4.1. T\u1ea1i sao c\u1ea7n Compositing?<\/h6>\n\n<p>Trong c\u00e1c trang web c\u0169, m\u1ed7i khi c\u00f3 m\u1ed9t chuy\u1ec3n \u0111\u1ed9ng (animation), tr\u00ecnh duy\u1ec7t ph\u1ea3i th\u1ef1c hi\u1ec7n l\u1ea1i b\u01b0\u1edbc <strong>Layout<\/strong> v\u00e0 <strong>Paint<\/strong> cho to\u00e0n b\u1ed9 trang ho\u1eb7c m\u1ed9t ph\u1ea7n l\u1edbn trang. \u0110i\u1ec1u n\u00e0y c\u1ef1c k\u1ef3 t\u1ed1n CPU v\u00e0 g\u00e2y ra hi\u1ec7n t\u01b0\u1ee3ng gi\u1eadt lag (jank). <\/p>\n\n<p><strong>Compositing Layer<\/strong> ra \u0111\u1eddi \u0111\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y. Tr\u00ecnh duy\u1ec7t t\u00e1ch m\u1ed9t ph\u1ea7n t\u1eed ra th\u00e0nh m\u1ed9t &#8220;l\u1edbp&#8221; ri\u00eang bi\u1ec7t (gi\u1ed1ng nh\u01b0 m\u1ed9t layer trong Photoshop) v\u00e0 g\u1eedi n\u00f3 v\u00e0o b\u1ed9 nh\u1edb c\u1ee7a GPU. Khi ph\u1ea7n t\u1eed n\u00e0y di chuy\u1ec3n ho\u1eb7c thay \u0111\u1ed5i \u0111\u1ed9 trong su\u1ed1t, GPU ch\u1ec9 vi\u1ec7c d\u1ecbch chuy\u1ec3n c\u00e1i &#8220;bitmap&#8221; \u0111\u00e3 c\u00f3 s\u1eb5n m\u00e0 kh\u00f4ng c\u1ea7n b\u1ea3o CPU v\u1ebd l\u1ea1i.  <\/p>\n\n<h6 class=\"wp-block-heading\">4.2. C\u00e1c \u0111i\u1ec1u ki\u1ec7n k\u00edch ho\u1ea1t (Triggering)<\/h6>\n\n<p>Tr\u00ecnh duy\u1ec7t s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u01b0a m\u1ed9t ph\u1ea7n t\u1eed l\u00ean &#8220;t\u1ea7ng th\u01b0\u1ee3ng&#8221; (Compositing Layer) n\u1ebfu:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>C\u00f3 c\u00e1c thu\u1ed9c t\u00ednh 3D: <code>transform: translate3d<\/code>, <code>rotateZ<\/code>.<\/li>\n\n\n\n<li>S\u1eed d\u1ee5ng <code>&lt;video&gt;<\/code>, <code>&lt;iframe&gt;<\/code>, <code>&lt;canvas&gt;<\/code>.<\/li>\n\n\n\n<li>S\u1eed d\u1ee5ng CSS Animation cho thu\u1ed9c t\u00ednh <code>opacity<\/code> ho\u1eb7c <code>transform<\/code>.<\/li>\n\n\n\n<li>S\u1eed d\u1ee5ng <code>will-change: transform<\/code>.<\/li>\n<\/ul>\n\n<h6 class=\"wp-block-heading\">4.3. Layer Explosion: Con dao hai l\u01b0\u1ee1i<\/h6>\n\n<p>M\u1eb7c d\u00f9 Compositing gi\u00fap m\u01b0\u1ee3t m\u00e0, nh\u01b0ng m\u1ed7i layer l\u1ea1i chi\u1ebfm b\u1ed9 nh\u1edb VRAM c\u1ee7a GPU. N\u1ebfu b\u1ea1n t\u1ea1o qu\u00e1 nhi\u1ec1u layer (v\u00ed d\u1ee5 d\u00f9ng <code>* { will-change: transform; }<\/code>), tr\u00ecnh duy\u1ec7t s\u1ebd c\u1ea1n ki\u1ec7t b\u1ed9 nh\u1edb, d\u1eabn \u0111\u1ebfn hi\u1ec7u n\u0103ng gi\u1ea3m s\u00fat nghi\u00eam tr\u1ecdng ho\u1eb7c crash tr\u00ecnh duy\u1ec7t. <\/p>\n\n<h4 class=\"wp-block-heading\">5. M\u1ed1i quan h\u1ec7 t\u01b0\u01a1ng h\u1ed7: T\u1ed5ng h\u1ee3p Pipeline<\/h4>\n\n<p>\u0110\u1ec3 t\u1ed1i \u01b0u h\u00f3a m\u1ed9t trang web, b\u1ea1n c\u1ea7n hi\u1ec3u c\u00e1ch ba kh\u00e1i ni\u1ec7m n\u00e0y l\u1ed3ng gh\u00e9p v\u00e0o nhau:<\/p>\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><td><strong>Ti\u00eau ch\u00ed<\/strong><\/td><td><strong>Painting Order<\/strong><\/td><td><strong>Stacking Context<\/strong><\/td><td><strong>Compositing Layer<\/strong><\/td><\/tr><\/thead><tbody><tr><td><strong>M\u1ee5c ti\u00eau<\/strong><\/td><td>X\u00e1c \u0111\u1ecbnh ai v\u1ebd tr\u01b0\u1edbc\/sau theo m\u1eb7c \u0111\u1ecbnh.<\/td><td>Qu\u1ea3n l\u00fd logic ch\u1ed3ng l\u1edbp (Z-axis).<\/td><td>T\u1ed1i \u01b0u h\u00f3a hi\u1ec7u n\u0103ng b\u1eb1ng ph\u1ea7n c\u1ee9ng (GPU).<\/td><\/tr><tr><td><strong>\u0110\u01a1n v\u1ecb qu\u1ea3n l\u00fd<\/strong><\/td><td>Element \u0111\u01a1n l\u1ebb.<\/td><td>M\u1ed9t nh\u00f3m c\u00e1c Element (Sub-tree).<\/td><td>M\u1ed9t Texture (Bitmap) trong GPU.<\/td><\/tr><tr><td><strong>\u1ea2nh h\u01b0\u1edfng<\/strong><\/td><td>Ch\u1ec9 \u1ea3nh h\u01b0\u1edfng hi\u1ec3n th\u1ecb t\u0129nh.<\/td><td>\u1ea2nh h\u01b0\u1edfng logic l\u1ed3ng gh\u00e9p CSS.<\/td><td>\u1ea2nh h\u01b0\u1edfng t\u1ed1c \u0111\u1ed9 Animation &amp; Scrolling.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n<p><strong>M\u1ed1i quan h\u1ec7:<\/strong> <\/p>\n\n<ul class=\"wp-block-list\">\n<li><strong>Stacking Context<\/strong> x\u00e1c \u0111\u1ecbnh logic c\u1ee7a <strong>Painting Order<\/strong>.<\/li>\n\n\n\n<li>M\u1ed9t <strong>Compositing Layer<\/strong> b\u1eaft bu\u1ed9c ph\u1ea3i l\u00e0 m\u1ed9t <strong>Stacking Context<\/strong>.<\/li>\n\n\n\n<li>Nh\u01b0ng m\u1ed9t <strong>Stacking Context<\/strong> <em>kh\u00f4ng nh\u1ea5t thi\u1ebft<\/em> ph\u1ea3i l\u00e0 m\u1ed9t <strong>Compositing Layer<\/strong>.<\/li>\n<\/ul>\n\n<h4 class=\"wp-block-heading\">6. C\u00e1c l\u1ed7i th\u1ef1c t\u1ebf v\u00e0 Gi\u1ea3i ph\u00e1p chuy\u00ean gia<\/h4>\n\n<h6 class=\"wp-block-heading\">6.1. L\u1ed7i &#8220;Z-index v\u00f4 d\u1ee5ng&#8221; (The Stacking Context Trap)<\/h6>\n\n<p><strong>Tri\u1ec7u ch\u1ee9ng:<\/strong> B\u1ea1n \u0111\u1eb7t <code>z-index: 999999<\/code> cho m\u1ed9t Sidebar nh\u01b0ng n\u00f3 v\u1eabn b\u1ecb che b\u1edfi m\u1ed9t Image \u1edf Content.<\/p>\n\n<p><strong>Nguy\u00ean nh\u00e2n:<\/strong> M\u1ed9t ph\u1ea7n t\u1eed cha c\u1ee7a Sidebar \u0111\u00e3 b\u1ecb k\u00edch ho\u1ea1t Stacking Context (c\u00f3 th\u1ec3 do <code>opacity<\/code> ho\u1eb7c <code>transform<\/code>) v\u00e0 ph\u1ea7n t\u1eed cha \u0111\u00f3 c\u00f3 <code>z-index<\/code> th\u1ea5p h\u01a1n Image kia.<\/p>\n\n<p><strong>Gi\u1ea3i ph\u00e1p:<\/strong> S\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 <strong>Layers<\/strong> trong Chrome DevTools \u0111\u1ec3 ki\u1ec3m tra c\u00e2y Stacking Context. \u0110\u00f4i khi gi\u1ea3i ph\u00e1p l\u00e0 d\u00f9ng <code>isolation: isolate<\/code> \u0111\u1ec3 ch\u1ee7 \u0111\u1ed9ng t\u1ea1o m\u1ed9t context m\u1edbi ho\u1eb7c di chuy\u1ec3n ph\u1ea7n t\u1eed ra kh\u1ecfi cha hi\u1ec7n t\u1ea1i (Portal trong React). <\/p>\n\n<h6 class=\"wp-block-heading\">6.2. L\u1ed7i &#8220;Nh\u00e1y m\u00e0n h\u00ecnh&#8221; (Flickering)<\/h6>\n\n<p><strong>Tri\u1ec7u ch\u1ee9ng:<\/strong> Khi b\u1eaft \u0111\u1ea7u m\u1ed9t animation, ph\u1ea7n t\u1eed b\u1ecb nh\u00e1y nh\u1eb9 ho\u1eb7c ch\u1eef b\u1ecb m\u1edd \u0111i.<\/p>\n\n<p><strong>Nguy\u00ean nh\u00e2n:<\/strong> Tr\u00ecnh duy\u1ec7t \u0111ang chuy\u1ec3n ph\u1ea7n t\u1eed t\u1eeb &#8220;Paint Layer&#8221; (CPU) sang &#8220;Compositing Layer&#8221; (GPU). Qu\u00e1 tr\u00ecnh rasterization l\u1ea1i \u1edf GPU \u0111\u00f4i khi l\u00e0m thay \u0111\u1ed5i c\u00e1ch l\u00e0m m\u1ecbn ch\u1eef (antialiasing). <\/p>\n\n<p><strong>Gi\u1ea3i ph\u00e1p:<\/strong> \u00c9p ph\u1ea7n t\u1eed \u0111\u00f3 n\u1eb1m \u1edf GPU ngay t\u1eeb \u0111\u1ea7u b\u1eb1ng <code>will-change: transform<\/code> ho\u1eb7c <code>transform: translateZ(0)<\/code>.<\/p>\n\n<h6 class=\"wp-block-heading\">6.3. Hi\u1ec7u \u1ee9ng &#8220;Z-index l\u1ed3ng nhau&#8221; trong Complex UI<\/h6>\n\n<p>Khi x\u00e2y d\u1ef1ng c\u00e1c UI ph\u1ee9c t\u1ea1p nh\u01b0 Modal l\u1ed3ng Modal, h\u00e3y lu\u00f4n tu\u00e2n th\u1ee7 nguy\u00ean t\u1eafc: <strong>Ph\u1ea7n t\u1eed Overlay c\u1ea5p cao nh\u1ea5t n\u00ean \u0111\u01b0\u1ee3c \u0111\u1eb7t tr\u1ef1c ti\u1ebfp d\u01b0\u1edbi <code>&lt;body&gt;<\/code><\/strong>. \u0110i\u1ec1u n\u00e0y \u0111\u1ea3m b\u1ea3o n\u00f3 thu\u1ed9c Stacking Context c\u1ee7a Root, gi\u00fap vi\u1ec7c qu\u1ea3n l\u00fd <code>z-index<\/code> tr\u1edf n\u00ean to\u00e0n c\u1ee5c v\u00e0 d\u1ec5 \u0111o\u00e1n. <\/p>\n\n<h4 class=\"wp-block-heading\">7. K\u1ebft lu\u1eadn<\/h4>\n\n<p>\u0110\u1ec3 tr\u1edf th\u00e0nh m\u1ed9t Senior Frontend Developer, b\u1ea1n c\u1ea7n ng\u1eebng nh\u00ecn CSS nh\u01b0 nh\u1eefng d\u00f2ng code trang tr\u00ed v\u00e0 b\u1eaft \u0111\u1ea7u nh\u00ecn n\u00f3 nh\u01b0 nh\u1eefng ch\u1ec9 th\u1ecb cho b\u1ed9 m\u00e1y Render.<\/p>\n\n<ul class=\"wp-block-list\">\n<li>H\u00e3y d\u00f9ng <strong>Painting Order<\/strong> \u0111\u1ec3 hi\u1ec3u lu\u1ed3ng m\u1eb7c \u0111\u1ecbnh.<\/li>\n\n\n\n<li>H\u00e3y d\u00f9ng <strong>Stacking Context<\/strong> \u0111\u1ec3 thi\u1ebft k\u1ebf logic ch\u1ed3ng l\u1edbp b\u1ec1n v\u1eefng.<\/li>\n\n\n\n<li>H\u00e3y d\u00f9ng <strong>Compositing Layer<\/strong> m\u1ed9t c\u00e1ch ti\u1ebft ki\u1ec7m \u0111\u1ec3 \u0111\u1ea1t hi\u1ec7u n\u0103ng 60fps.<\/li>\n<\/ul>\n\n<p>Hi\u1ec3u r\u00f5 s\u1ef1 kh\u00e1c bi\u1ec7t gi\u1eefa ba kh\u00e1i ni\u1ec7m n\u00e0y kh\u00f4ng ch\u1ec9 gi\u00fap b\u1ea1n fix bug nhanh h\u01a1n m\u00e0 c\u00f2n gi\u00fap b\u1ea1n x\u00e2y d\u1ef1ng \u0111\u01b0\u1ee3c nh\u1eefng \u1ee9ng d\u1ee5ng web c\u00f3 ki\u1ebfn tr\u00fac hi\u1ec3n th\u1ecb chu\u1ea9n m\u1ef1c, m\u01b0\u1ee3t m\u00e0 v\u00e0 chuy\u00ean nghi\u1ec7p.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0110\u1ec3 t\u1ea1o ra m\u1ed9t tr\u1ea3i nghi\u1ec7m ng\u01b0\u1eddi d\u00f9ng hi\u1ec7n \u0111\u1ea1i v\u1edbi c\u00e1c hi\u1ec7u \u1ee9ng \u0111\u1ed5 b\u00f3ng, modal ch\u1ed3ng l\u1edbp hay [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":4394,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[25],"tags":[],"class_list":["post-4395","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-publishing"],"acf":[],"_links":{"self":[{"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/posts\/4395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/comments?post=4395"}],"version-history":[{"count":1,"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/posts\/4395\/revisions"}],"predecessor-version":[{"id":4396,"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/posts\/4395\/revisions\/4396"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/media\/4394"}],"wp:attachment":[{"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/media?parent=4395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/categories?post=4395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wpdesign.vn\/vi\/wp-json\/wp\/v2\/tags?post=4395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}