【问题标题】:CSS Grid automatically adding a ::before elementCSS Grid 自动添加 ::before 元素
【发布时间】:2017-12-19 06:17:18
【问题描述】:

总的来说,我是 CSS 新手,正在尝试简单的网格布局。这就是我所拥有的。

CSS

.layoutGrid {
    display: grid;
    grid-gap: 10px;
    grid-auto-rows: minMax(100px, auto);
}

.articleCard {
    display: grid;
    grid-template-rows: 100px 300px 100px;
    grid-template-areas: "article-title"
                         "article-body"
                         "article-footer";
    grid-auto-flow: row dense;
}

.articleHeader {
    grid-area: article-title;
}

.articleBody {
    grid-area: article-body;
}

.articleFooter {
    display: grid;
    grid-template-columns: 0.5fr 0.5fr;
    grid-template-areas: "articleDomain articleKeypoints";
    grid-area: article-footer;
    grid-auto-flow: row dense;
}

.articleKeypoints {
    grid-area: article-keypoints;
}

.articleDomain {
    grid-area: article-domain;
}

@media only screen and (min-width: 600px) {
    .layoutGrid {
        grid-template-columns: repeat(3, 1fr);
    }

}

@media only screen and (max-width: 600px) {

    .layoutGrid {
        grid-template-columns: repeat(1, 1fr);
    }
}

HTML

<div id="mainContent" className="container layoutGrid">
        <Card className={"articleCard"} style={{height:"500px", flex: "1 1 auto", padding: "1.25rem", boxSizing: "border-box"}}>

            <CardHeader className="articleHeader">
                <CardTitle>{props.articleDetails.Title}</CardTitle>
            </CardHeader>
            <CardBody className="articleBody">
                <CardText>{props.articleDetails.Summary}</CardText>
            </CardBody>
            <div className="row articleFooter">
                <div className="col-auto mr-auto">
                    <Button outline color="info">Read Keypoints</Button>
                </div>
                <div className="col-auto">
                    <CardSubtitle style={{verticalAlign: 'text-bottom'}}>
                        <small>{props.articleDetails.Domain}</small>
                    </CardSubtitle>
                </div>
            </div>
        </Card>
    </div>

这里没有添加 ::before 元素,但结果网格的第一个元素始终是 ::before 元素。即使是显示“读取关键点”的内部网格也有同样的问题。外部布局处于循环中,但我认为这不会影响任何事情。

谁能告诉我如何解决这个问题,以及任何关于如何改进布局整体结构的指针都将非常感激!

【问题讨论】:

  • 我认为这是浏览器的默认行为,因为一切都应该有它之前的东西!
  • @SaidbakR 我明白了,我该如何解决?
  • 这不是浏览器的默认行为。如果有的话,那就是 React 正在做的事情,但我也对此表示怀疑。如果您在检查元素中将屏幕截图稍微靠右一点,我们可能会看到导致选择器的原因。如果您无法绕过它,只需使用您自己的 css 将其设置为 display:none
  • 那是 bootstrap.css 它的 .container 选择器,它添加了之前和之后。如果您使用网格,则不应在此处使用 container 类(其他名称)或不使用引导程序。
  • 从我在这里看到的情况来看,您使用了不错的缩进,并且对于您所写的内容几乎坚持相同的命名约定(camelCase)。如果你问我,这是一个非常好的开始,剩下的只是大量的实践、学习和经验。

标签: html css reactjs css-grid


【解决方案1】:

写我的评论作为答案,因为它似乎可以解决问题。

这是 bootstrap.css 它的 .container 选择器,它添加了之前和 后。如果您使用的是网格,则不应该使用该类 此处的容器(其他名称)或不使用引导程序。

【讨论】:

    【解决方案2】:

    ::before::after 没有任何问题。这些是 CSS 伪元素/选择器,它们在每个选定元素的内容之前/之后插入一些东西。

    这里显示它们是因为在浏览器的开发者工具中动态查看代码。

    只需将其与页面的真实来源进行比较 - 右键单击​​页面并选择View page source(消息在网络浏览器中有所不同)。将出现一个空白选项卡,其中包含从服务器发送到 Web 浏览器的确切代码。

    【讨论】:

    • 我正在使用 React,所以查看源代码实际上不会给我源代码。我尝试了firefox和chrome,两者都保持不变。问题是我没有在元素之前指定任何要添加的内容。它是一个添加元素的 CSS Grid 东西,我该如何解决?
    • @SalmaanP 显示页面源代码时显示的代码。
    • “真实”源甚至永远不会显示用户定义的伪元素,因此这不是一个很好的比较。尤其是在使用像 React 这样的东西时,这样做几乎没有意义。它只会显示服务器渲染的 HTML
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2021-10-09
    • 2015-05-06
    • 2011-10-03
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多