【发布时间】:2017-12-14 23:25:33
【问题描述】:
当屏幕/视口的宽度超过 900 像素时,我试图隐藏图像。出于某种原因,这在一个非常基本的示例中不起作用。
我的页脚有一个非常简单的组件——它是功能性的,没有状态或方法,它只嵌套在 Main 组件下。
我在组件中包含了页脚的样式,因此它已完全本地化。出于某种原因,在这个最基本的示例中,@media 似乎不起作用。
当我打开 Chrome 开发工具时,我确实看到媒体查询在适当的断点处附加到我的元素,但即使我的屏幕宽度远远超过 900 像素,也没有应用样式。我的媒体查询中声明的样式被划掉了。所以我的元素是选择保持原始样式并出于某种原因阻止媒体查询。如果我在媒体查询中添加原始类中尚不存在的样式,则会应用它。
我在 index.html 的 head 中包含以下内容
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
我也在使用 React Router(如果这有什么不同的话)。
React 是否会阻止媒体查询工作?我在某个地方犯了一个非常愚蠢的错误吗?
这是我的组件 - 带有 className 'logo' 的 div 是我想要切换的:
import React from 'react';
import { Link } from 'react-router-dom';
import './footer.component.css';
function Footer(props) {
return (
<div className="footer">
<span className="column">
<div className="social-column-container">
<img className="logo" src="./images/logo.jpg" alt="kimbyarting logo" title="kimbyarting logo" />
<div className="social-icon-container">
<div className="social-icon"></div>
<div className="social-icon"></div>
<div className="social-icon"></div>
<div className="social-icon"></div>
<div className="social-icon"></div>
</div>
</div>
</span>
</div>
);
}
export default Footer;
这是相关的 CSS:
/* Small desktop */
@media only screen and (min-width: 900px) {
.footer
.column
.social-column-container
.logo {
display: none;
}
}
/* Mobile */
.footer
.column
.social-column-container
.logo {
width: 100px;
height: auto;
display: inline-block;
margin-left: 50px;
}
非常感谢任何帮助!
更新
如果常规类定义和媒体定义具有相同的类层次结构,则媒体样式总是被覆盖。但是,如果常规定义定义的类层次结构更少,则此方法有效。
我已经确认,通过删除所有父“显示”样式,似乎没有其他类立即导致样式被覆盖。
什么是覆盖样式?当我遵循最佳实践并为 CSS 类定义了良好的层次结构时,为什么会发生这种情况?
【问题讨论】:
-
将您的“移动”样式放在媒体查询上方。
标签: css reactjs media-queries