如何使用 styled-components 将 Gatsby Link 组件的填充设置为 0px

How to set padding of Gatsby Link Component to 0px with styled-components

我使用 styled-components 对 Gatsby Link 组件进行了一些样式更改。但是出于某种原因,当我尝试应用 0px 的填充时,它仍然会留下微小的 space(几像素)above/below 文本(在文本和 top/bottom 边框之间)。我在 codesandbox 中使用 gatsby-default-starter 进行初始构建。

HTML/CSS 环境 (codepen.io): https://codepen.io/marti2221/pen/mNVJWZ

Gatsby 环境(codesandbox): https://codesandbox.io/s/gatsby-paddinglink-spacing-gedtq

我已经尝试在 Gatsby 环境以及正常的 html/css 环境中通过样式组件应用填充。当 css/html 环境中的 "a" 标签的 padding 设置为 0px 时,文本周围没有 space,正如预期的那样。但是,当我尝试将相同的填充添加到 gatsby Link 组件甚至是常规 a 标签时,在 gatsby 环境中,文本和边框之间有一个微小的 space。这导致我的 BtnLink 在 top/bottom 上的填充比预期的要大。我可以相应地调整我的填充,但我想知道这个问题的根本原因。

    const StyledLink = styled(Link)`
      display: inline-block;
      font-family: sans-serif;
      border-radius: 25px;
      padding: 0px;
      text-decoration: none;
      border: 2px solid green;
    `
    const StyledA = styled.a`
      display: inline-block;
      font-family: sans-serif;
      border-radius: 25px;
      padding: 0px;
      text-decoration: none;
      border: 2px solid green;
    `

    const BtnLink = props => (
      <StyledLink {...props}>{props.children}</StyledLink>
    )

    const IndexPage = () => (
      <Layout>
        <BtnLink to="page-2">Request Quote</BtnLink>
        <StyledA href="page-2">Request Quotes</StyledA>
        <Link to="page-2">Link</Link>
      </Layout>
    )

我想要的结果是一个 gatsby Link 组件,其样式可以与常规 link 元素相同(即 0px 填充)。我的结果是 link 文本,在 Gatsby 环境中周围有一些间距。使用常规 HTML/CSS 进行测试时,结果符合预期(当 padding 设置为 0px 时没有间距)

您已经创建了一个 styled(Link) styledComponent,并将其保存到 const StyledLink

const StyledLink = styled(Link)`
  display: inline-block;
  font-family: sans-serif;
  border-radius: 25px;
  padding: 0px;
  text-decoration: none;
  border: 2px solid green;

但是,这不会对常规 gatsby Link 组件产生任何影响。如果您想在页面上看到该样式的变体,您仍然需要呈现这个新的 StyledLink styledComponent 而不是 gatsby Link 组件。

const IndexPage = () => (
<Layout>
    <BtnLink to="page-2">Request Quote</BtnLink>
    <StyledA href="page-2">Request Quotes</StyledA>
    <StyledLink to="page-2">Link</StyledLink>
</Layout>
)