/** * SyntaxHighlighterComponent CSS * CSS สำหรับการแสดงผลโค้ดแบบมีสีสันตามไวยากรณ์ */ /* พื้นฐานของ wrapper */ .highlighted-code { position: relative; border: 1px solid #e0e0e0; border-radius: 6px; margin: 1.5em 0; font-family: 'Consolas', 'Monaco', 'Courier New', monospace; font-size: 14px; line-height: 1.5; overflow: hidden; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); background-color: #f8f8f8; color: #333; } /* ส่วนหัวของโค้ด */ .highlighted-code .code-header { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; background-color: #f0f0f0; border-bottom: 1px solid #e0e0e0; } /* ป้ายภาษา */ .highlighted-code .language-label { background-color: #e0e0e0; color: #555; font-size: 12px; padding: 2px 8px; border-radius: 3px; font-weight: 500; text-transform: uppercase; } /* ปุ่มคัดลอกโค้ด */ .highlighted-code .copy-button { background: none; border: 1px solid #ccc; border-radius: 4px; padding: 4px 10px; font-size: 12px; display: flex; align-items: center; gap: 5px; cursor: pointer; transition: all 0.2s ease; color: #555; outline: none; } .highlighted-code .copy-button:hover { background-color: #e9e9e9; border-color: #bbb; } .highlighted-code .copy-button:active { background-color: #d9d9d9; transform: translateY(1px); } .highlighted-code .copy-button svg { width: 14px; height: 14px; fill: currentColor; } /* เนื้อหาโค้ด */ .highlighted-code .code-content { display: flex; overflow: auto; max-height: 500px; } /* ส่วนเลขบรรทัด */ .highlighted-code .line-numbers { display: flex; flex-direction: column; padding: 12px 0; background-color: #f0f0f0; border-right: 1px solid #e0e0e0; min-width: 40px; height: 100%; text-align: right; user-select: none; } .highlighted-code .line-number { padding: 0 10px; color: #999; font-size: 12px; cursor: pointer; transition: all 0.2s ease; } .highlighted-code .line-number:hover { color: #555; background-color: rgba(0, 0, 0, 0.05); } /* เนื้อหาของโค้ด */ .highlighted-code .code-body { flex: 1; padding: 12px; tab-size: 2; -moz-tab-size: 2; } /* แต่ละบรรทัดของโค้ด */ .highlighted-code .line { position: relative; white-space: pre; padding: 0 2px; } .highlighted-code .line, .highlighted-code .line-number { min-height: 1.5rem; line-height: 1.5rem; } .highlighted-code .line:hover { background-color: rgba(0, 0, 0, 0.02); } /* การเน้นบรรทัด */ .highlighted-code .line.highlighted { background-color: rgba(100, 150, 255, 0.1); border-left: 3px solid #4d90fe; padding-left: 5px; } .highlighted-code .line-number.highlighted { background-color: rgba(100, 150, 255, 0.2); color: #4d90fe; font-weight: bold; } /* ตัวบ่งชี้การพับโค้ด */ .highlighted-code .fold-marker { display: inline-block; width: 15px; text-align: center; cursor: pointer; user-select: none; color: #999; padding: 0 3px; margin-right: 3px; font-weight: bold; transition: all 0.2s ease; } .highlighted-code .fold-marker:hover { color: #555; } /* ตัวบ่งชี้ส่วนที่พับ */ .highlighted-code .fold-indicator { padding: 4px 15px; background-color: rgba(100, 100, 100, 0.08); color: #999; font-style: italic; cursor: pointer; text-align: center; transition: all 0.2s ease; border-radius: 3px; margin: 2px 0; } .highlighted-code .fold-indicator:hover { background-color: rgba(100, 100, 100, 0.15); color: #555; } /* ซ่อนบรรทัดที่พับ */ .highlighted-code .line.folded, .highlighted-code .line-number.folded { display: none; } /* สไตล์สำหรับข้อความผิดพลาด */ .syntax-error { color: #e74c3c; background-color: #fef2f0; padding: 12px 15px; border: 1px solid #f5d0c9; border-radius: 4px; margin: 10px 0; font-family: system-ui, -apple-system, sans-serif; } /* สไตล์ของ token ต่างๆ - ธีม Light */ .highlighted-code .token.keyword { color: #0000ff; } .highlighted-code .token.string { color: #a31515; } .highlighted-code .token.comment { color: #008000; } .highlighted-code .token.function { color: #795e26; } .highlighted-code .token.number { color: #098658; } .highlighted-code .token.operator { color: #000000; } .highlighted-code .token.variable { color: #001080; } .highlighted-code .token.property { color: #001080; } .highlighted-code .token.tag { color: #800000; } .highlighted-code .token.attribute { color: #ff0000; } .highlighted-code .token.builtin { color: #267f99; } .highlighted-code .token.punctuation { color: #000000; } .highlighted-code .token.boolean { color: #0000ff; } .highlighted-code .token.entity { color: #704214; } .highlighted-code .token.selector { color: #800000; } .highlighted-code .token.value { color: #098658; } .highlighted-code .token.unit { color: #098658; } .highlighted-code .token.color { color: #0451a5; } .highlighted-code .token.constant { color: #0070c1; } .highlighted-code .token.parameter { color: #001080; } .highlighted-code .token.command { color: #0070c1; } .highlighted-code .token.path { color: #a31515; } .highlighted-code .token.phpTag { color: #800080; } /* สไตล์สำหรับธีม Dark */ [data-theme="dark"] .highlighted-code { background-color: #1e1e1e; color: #d4d4d4; border-color: #3e3e3e; } [data-theme="dark"] .highlighted-code .code-header { background-color: #252526; border-bottom-color: #3e3e3e; } [data-theme="dark"] .highlighted-code .language-label { background-color: #333333; color: #cccccc; } [data-theme="dark"] .highlighted-code .copy-button { color: #cccccc; border-color: #555555; } [data-theme="dark"] .highlighted-code .copy-button:hover { background-color: #2c2c2c; border-color: #666666; } [data-theme="dark"] .highlighted-code .copy-button:active { background-color: #3e3e3e; } [data-theme="dark"] .highlighted-code .line-numbers { background-color: #252526; border-right-color: #3e3e3e; } [data-theme="dark"] .highlighted-code .line-number { color: #858585; } [data-theme="dark"] .highlighted-code .line-number:hover { color: #cccccc; background-color: rgba(255, 255, 255, 0.05); } [data-theme="dark"] .highlighted-code .line:hover { background-color: rgba(255, 255, 255, 0.05); } [data-theme="dark"] .highlighted-code .line.highlighted { background-color: rgba(100, 150, 255, 0.15); border-left-color: #569cd6; } [data-theme="dark"] .highlighted-code .line-number.highlighted { background-color: rgba(100, 150, 255, 0.3); color: #569cd6; } [data-theme="dark"] .highlighted-code .fold-indicator { background-color: rgba(200, 200, 200, 0.1); color: #858585; } [data-theme="dark"] .highlighted-code .fold-indicator:hover { background-color: rgba(200, 200, 200, 0.15); color: #cccccc; } [data-theme="dark"] .highlighted-code .fold-marker { color: #858585; } [data-theme="dark"] .highlighted-code .fold-marker:hover { color: #cccccc; } /* สไตล์ของ token ต่างๆ - ธีม Dark */ [data-theme="dark"] .highlighted-code .token.keyword { color: #569cd6; } [data-theme="dark"] .highlighted-code .token.string { color: #ce9178; } [data-theme="dark"] .highlighted-code .token.comment { color: #6a9955; } [data-theme="dark"] .highlighted-code .token.function { color: #dcdcaa; } [data-theme="dark"] .highlighted-code .token.number { color: #b5cea8; } [data-theme="dark"] .highlighted-code .token.operator { color: #d4d4d4; } [data-theme="dark"] .highlighted-code .token.variable { color: #9cdcfe; } [data-theme="dark"] .highlighted-code .token.property { color: #9cdcfe; } [data-theme="dark"] .highlighted-code .token.tag { color: #569cd6; } [data-theme="dark"] .highlighted-code .token.attribute { color: #9cdcfe; } [data-theme="dark"] .highlighted-code .token.builtin { color: #4ec9b0; } [data-theme="dark"] .highlighted-code .token.punctuation { color: #d4d4d4; } [data-theme="dark"] .highlighted-code .token.boolean { color: #569cd6; } [data-theme="dark"] .highlighted-code .token.entity { color: #d7ba7d; } [data-theme="dark"] .highlighted-code .token.selector { color: #d7ba7d; } [data-theme="dark"] .highlighted-code .token.value { color: #ce9178; } [data-theme="dark"] .highlighted-code .token.unit { color: #b5cea8; } [data-theme="dark"] .highlighted-code .token.color { color: #4ec9b0; } [data-theme="dark"] .highlighted-code .token.constant { color: #4fc1ff; } [data-theme="dark"] .highlighted-code .token.parameter { color: #9cdcfe; } [data-theme="dark"] .highlighted-code .token.command { color: #4fc1ff; } [data-theme="dark"] .highlighted-code .token.path { color: #ce9178; } [data-theme="dark"] .highlighted-code .token.phpTag { color: #c586c0; } /* รองรับการแสดงผลบนมือถือ */ @media (max-width: 768px) { .highlighted-code { font-size: 13px; } .highlighted-code .code-header { padding: 6px 10px; } .highlighted-code .copy-button span { display: none; /* ซ่อนข้อความในปุ่มคัดลอกบนมือถือ แสดงเฉพาะไอคอน */ } .highlighted-code .code-body { padding: 10px 8px; } .highlighted-code .line-numbers { min-width: 32px; padding: 10px 0; } .highlighted-code .line-number { padding: 0 6px; font-size: 11px; } } /* การรองรับโหมด Print */ @media print { .highlighted-code { border: 1px solid #ddd !important; box-shadow: none !important; break-inside: avoid; } .highlighted-code .code-header { background-color: #f5f5f5 !important; color: #333 !important; } .highlighted-code .copy-button { display: none !important; } .highlighted-code .line-numbers { color: #999 !important; background-color: #f5f5f5 !important; } .highlighted-code .code-body { color: #000 !important; background-color: #fff !important; } .highlighted-code .fold-marker, .highlighted-code .fold-indicator { display: none !important; } .highlighted-code .line.folded, .highlighted-code .line-number.folded { display: block !important; /* แสดงส่วนที่พับไว้เมื่อพิมพ์ */ } } /* รองรับ Animation */ @keyframes highlight-flash { 0% { background-color: rgba(100, 150, 255, 0.3); } 100% { background-color: rgba(100, 150, 255, 0.1); } } .highlighted-code .line.flash { animation: highlight-flash 1s ease-out; } /* สำหรับการรองรับ DarkMode ของเบราว์เซอร์ */ @media (prefers-color-scheme: dark) { .highlighted-code:not(.light) { background-color: #1e1e1e; color: #d4d4d4; border-color: #3e3e3e; } .highlighted-code:not(.light) .code-header { background-color: #252526; border-bottom-color: #3e3e3e; } .highlighted-code:not(.light) .language-label { background-color: #333333; color: #cccccc; } .highlighted-code:not(.light) .copy-button { color: #cccccc; border-color: #555555; } .highlighted-code:not(.light) .line-numbers { background-color: #252526; border-right-color: #3e3e3e; } .highlighted-code:not(.light) .token.keyword { color: #569cd6; } .highlighted-code:not(.light) .token.string { color: #ce9178; } .highlighted-code:not(.light) .token.comment { color: #6a9955; } .highlighted-code:not(.light) .token.function { color: #dcdcaa; } .highlighted-code:not(.light) .token.number { color: #b5cea8; } } /* สำหรับสไตล์ตัวยกเว้นที่อาจต้องการเพิ่มเติม */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } /* สำหรับการจัดวางโค้ดใน RTL (Right-to-Left) languages */ [dir="rtl"] .highlighted-code .line-numbers { border-right: none; border-left: 1px solid #e0e0e0; } [dir="rtl"] .highlighted-code .line.highlighted { border-left: none; border-right: 3px solid #4d90fe; padding-left: 2px; padding-right: 5px; } /* เพิ่มเติมสำหรับการแสดงผลกับ Syntax ของภาษาเฉพาะ */ .highlighted-code .token.php-delimiter { color: #800080; } .highlighted-code .token.css-property { color: #005cc5; } .highlighted-code .token.css-selector { color: #800000; } .highlighted-code .token.html-doctype { color: #800080; } .highlighted-code .token.regex { color: #e90; } .highlighted-code .token.json-property { color: #0451a5; } .highlighted-code .token.markdown-heading { color: #0000ff; font-weight: bold; } .highlighted-code .token.markdown-list { color: #0451a5; } .highlighted-code .token.markdown-bold { font-weight: bold; } .highlighted-code .token.markdown-italic { font-style: italic; } [data-theme="dark"] .highlighted-code .token.php-delimiter { color: #c586c0; } [data-theme="dark"] .highlighted-code .token.css-property { color: #9cdcfe; } [data-theme="dark"] .highlighted-code .token.css-selector { color: #d7ba7d; } [data-theme="dark"] .highlighted-code .token.html-doctype { color: #c586c0; } [data-theme="dark"] .highlighted-code .token.regex { color: #d7ba7d; } [data-theme="dark"] .highlighted-code .token.json-property { color: #9cdcfe; } [data-theme="dark"] .highlighted-code .token.markdown-heading { color: #569cd6; font-weight: bold; } [data-theme="dark"] .highlighted-code .token.markdown-list { color: #ce9178; } [data-theme="dark"] .highlighted-code .token.markdown-bold { font-weight: bold; } [data-theme="dark"] .highlighted-code .token.markdown-italic { font-style: italic; }