현록을 개발하면서 티스토리에 있던 포스트들을 markdown으로 변환하여 올리고 있는데,
간혹 이미지 가로 사이즈가 viewport width보다 크면 overflow되는 현상이 있었습니다.
사실 css로 해결하였지만, styled-components 환경에서 nesting하는 것을 꺼리기도 하고,
marked에서 직접 inline style을 넣는 방법이 궁금하기도 해서 찾아보았습니다.
marked에서는 renderer를 통해 markdown 문서를 html code로 변환합니다.
marked documentation
를 확인해보니 Renderer.image 함수를 사용하고 있다고 합니다.
사용법은 간단합니다.
아래와 같이 Renderer instance를 하나 만들어서 marked option에 제공해주면 됩니다.
const renderer = new marked.Renderer()
renderer.image = (href, title, text) => `<img src="${href}" title="${title}" alt=${text}" style="max-width: 100%;" />`
renderer.link = (href, title, text) => `<a href=${href} title="${title}" target="_blank" style="text-decoration: underline;">${text}<img src="/img/icons/link-variant.png" width="15" style="vertical-align: baseline" /></a>`
marked.setOptions({
renderer,
langPrefix: 'hljs language-',
highlight(code, lang) {
const _lang = lang || 'plaintext'
return hljs.highlight(code, { language: _lang, ignoreIllegals: true }).value
},
})