Skip to content

🎨 Palette: μ™ΈλΆ€ 링크 μƒˆ μ°½ μ—΄κΈ° μ‹œκ°μ  μ•„μ΄μ½˜ μΆ”κ°€ - #101

Closed
seonghobae wants to merge 1 commit into
mainfrom
palette-external-link-icon-5720050565696081532
Closed

🎨 Palette: μ™ΈλΆ€ 링크 μƒˆ μ°½ μ—΄κΈ° μ‹œκ°μ  μ•„μ΄μ½˜ μΆ”κ°€#101
seonghobae wants to merge 1 commit into
mainfrom
palette-external-link-icon-5720050565696081532

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

πŸ’‘ What:

target="_blank" 속성을 κ°€μ§„ μ™ΈλΆ€ 링크 μ˜†μ— μž‘μ€ 'μƒˆ μ°½' μ•„μ΄μ½˜μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

🎯 Why:

μ‚¬μš©μžκ°€ 링크λ₯Ό ν΄λ¦­ν–ˆμ„ λ•Œ μ˜ˆμΈ‘ν•˜μ§€ λͺ»ν•˜κ²Œ μƒˆ 창이 μ—΄λ¦¬λŠ” 것은 λ‹Ήν˜ΉμŠ€λŸ¬μ›€μ„ 쀄 수 μžˆμŠ΅λ‹ˆλ‹€. μ‹œκ°μ  인디케이터λ₯Ό 톡해 탐색 κ²½ν—˜μ„ κ°œμ„ ν•˜κ³  인지 λΆ€ν•˜λ₯Ό μ€„μ˜€μŠ΅λ‹ˆλ‹€.

πŸ“Έ Before/After:

PR μŠ€ν¬λ¦°μƒ·κ³Ό λΉ„λ””μ˜€λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. HTML을 λ³€κ²½ν•˜μ§€ μ•Šκ³  CSS ::after와 SVG λ§ˆμŠ€ν¬λ§Œμ„ μ‚¬μš©ν•˜μ—¬ κΉ”λ”ν•˜κ²Œ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

β™Ώ Accessibility:

μ‹œκ°μ  λ‹¨μ„œλ₯Ό μΆ”κ°€ν•˜μ—¬ 링크 λ™μž‘μ˜ 예츑 κ°€λŠ₯성을 λ†’μ˜€μŠ΅λ‹ˆλ‹€. (WCAG 2.0 SC 3.2.5 κ΄€λ ¨). 슀크린 λ¦¬λ”λŠ” 보톡 target="_blank"λ₯Ό 자체적으둜 μ•Œλ €μ£Όμ§€λ§Œ, 인지적 μ ‘κ·Όμ„± μΈ‘λ©΄μ—μ„œ λͺ¨λ“  μ‚¬μš©μžμ—κ²Œ 도움이 λ©λ‹ˆλ‹€.


PR created automatically by Jules for task 5720050565696081532 started by @seonghobae

- `target="_blank"`인 링크 μ˜†μ— μƒˆ μ°½ μ•„μ΄μ½˜μ„ CSS둜 μΆ”κ°€ν•˜μ—¬ μ‹œκ°μ  예츑 κ°€λŠ₯μ„± ν–₯상
- κ΄€λ ¨ UX/μ ‘κ·Όμ„± ν•™μŠ΅ λ‚΄μš©μ„ .jules/palette.md에 기둝
- CHANGELOG μ—…λ°μ΄νŠΈ
@google-labs-jules

Copy link
Copy Markdown

πŸ‘‹ Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a πŸ‘€ emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

Copilot AI review requested due to automatic review settings July 23, 2026 14:16

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a visual β€œopens in new tab/window” indicator for links using target="_blank" to improve user predictability on this static site, implemented purely in CSS (no HTML changes).

Changes:

  • Add a ::after icon (SVG mask) for a[target="_blank"] in styles.css.
  • Record the user-facing change in CHANGELOG.md.
  • Add a palette learning-journal entry (but currently introduces a casing-duplicate file path).

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 4 comments.

File Description
styles.css Adds a masked SVG pseudo-element icon after target="_blank" links.
CHANGELOG.md Documents the new external-link indicator under [Unreleased] (format needs to match existing bullets).
.jules/palette.md Adds a learning entry, but duplicates existing .Jules/palette.md via case-only path difference.

πŸ’‘ Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread styles.css
Comment on lines +49 to +52
width: 0.8em;
height: 0.8em;
margin-left: 0.3em;
background-color: currentColor;
Comment thread styles.css
Comment on lines +54 to +58
-webkit-mask-size: contain;
-webkit-mask-repeat: no-repeat;
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E");
mask-size: contain;
mask-repeat: no-repeat;
Comment thread CHANGELOG.md
Comment on lines +15 to +17

### λ³€κ²½ 사항
* `target="_blank"` μ™ΈλΆ€ 링크에 μƒˆ μ°½ μ•„μ΄μ½˜ μΆ”κ°€ν•˜μ—¬ μ‹œκ°μ  인지 κ°œμ„ 
Comment thread .jules/palette.md
Comment on lines +1 to +3
## 2026-07-23 - μƒˆ μ°½μ—μ„œ μ—΄κΈ° 링크 인디케이터 μΆ”κ°€
**Learning:** νŽ˜μ΄μ§€ 내에 `target="_blank"` 속성을 κ°€μ§„ μ™ΈλΆ€ 링크가 λ‹€μˆ˜ μ‘΄μž¬ν•˜μ§€λ§Œ, 클릭 μ‹œ μƒˆ 탭이 μ—΄λ¦°λ‹€λŠ” μ‹œκ°μ  κ²½κ³ λ‚˜ μ•ˆλ‚΄κ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 예츑 λΆˆκ°€λŠ₯ν•œ 탐색 κ²½ν—˜μ„ μ£Όμ–΄ μ‚¬μš©μžμ—κ²Œ ν˜Όλž€μ„ μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
**Action:** CSS의 `::after` 가상 μš”μ†Œμ™€ SVG 마슀크λ₯Ό ν™œμš©ν•˜μ—¬ `target="_blank"` 링크 μ˜†μ— μž‘μ€ 'μƒˆ μ°½' μ•„μ΄μ½˜μ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 HTML ꡬ쑰λ₯Ό λ³΅μž‘ν•˜κ²Œ λ§Œλ“€μ§€ μ•Šκ³ λ„ μ‚¬μš©μžμ—κ²Œ λͺ…ν™•ν•œ μ‹œκ°μ  힌트λ₯Ό μ œκ³΅ν•˜μ—¬ 인지 λΆ€ν•˜λ₯Ό μ€„μ˜€μŠ΅λ‹ˆλ‹€.

Copy link
Copy Markdown
Contributor Author

Closing rather than rebasing this stale branch. Its global a[target="_blank"]::after rule conflicts with the current production .project-grid h3 a::after pseudo-element that expands project links across the full card; one ::after cannot safely serve both the icon and hit-area contracts. The embedded data: SVG mask is also incompatible with the current img-src 'self' deny-by-default CSP unless policy is deliberately widened, which is not justified for a decorative icon. Four unresolved review findings remain, including the case-colliding .jules/.Jules path. A future implementation should use non-conflicting markup or a dedicated child element, preserve the strict CSP, and include current-base accessibility and regression tests.

@seonghobae seonghobae closed this Aug 6, 2026
@google-labs-jules

Copy link
Copy Markdown

Closing rather than rebasing this stale branch. Its global a[target="_blank"]::after rule conflicts with the current production .project-grid h3 a::after pseudo-element that expands project links across the full card; one ::after cannot safely serve both the icon and hit-area contracts. The embedded data: SVG mask is also incompatible with the current img-src 'self' deny-by-default CSP unless policy is deliberately widened, which is not justified for a decorative icon. Four unresolved review findings remain, including the case-colliding .jules/.Jules path. A future implementation should use non-conflicting markup or a dedicated child element, preserve the strict CSP, and include current-base accessibility and regression tests.

μ΄ν•΄ν–ˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή μž‘μ—…μ΄ 더 이상 μœ νš¨ν•˜μ§€ μ•ŠμŒμ„ ν™•μΈν–ˆμœΌλ©° μž‘μ—…μ„ μ€‘λ‹¨ν•˜κ² μŠ΅λ‹ˆλ‹€.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants