【问题标题】:How to apply normal CSS to an Angular component如何将普通 CSS 应用于 Angular 组件
【发布时间】:2020-10-15 14:09:50
【问题描述】:

我是 Angular 的新手,我正在尝试创建一个带有下拉菜单的导航栏。我找到了一个相关的代码,它是

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
body {
  font-family: Arial, Helvetica, sans-serif;
}

.navbar {
  overflow: hidden;
  background-color: #333;
}

.navbar a {
  float: left;
  font-size: 16px;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

.dropdown {
  float: left;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;  
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: inherit;
  font-family: inherit;
  margin: 0;
}

.navbar a:hover, .dropdown:hover .dropbtn {
  background-color: red;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #ddd;
}

.dropdown:hover .dropdown-content {
  display: block;
}
</style>
</head>
<body>

<div class="navbar">
  <a href="#home">Home</a>
  <a href="#news">News</a>
  <div class="dropdown">
    <button class="dropbtn">Dropdown 
      <i class="fa fa-caret-down"></i>
    </button>
    <div class="dropdown-content">
      <a href="#">Link 1</a>
      <a href="#">Link 2</a>
      <a href="#">Link 3</a>
    </div>
  </div> 
</div>

<h3>Dropdown Menu inside a Navigation Bar</h3>
<p>Hover over the "Dropdown" link to see the dropdown menu.</p>

</body>
</html>

在单个 html 文件中运行时效果很好。

但我想把它放在我的Angular项目中。所以我创建了一个单独的组件作为标题并将html部分放在“header.component.html”文件中

 首页
  新闻
  

并将css部分放入“header.component.css”文件中

body {
  font-family: Arial, Helvetica, sans-serif;
}

.navbar {
  overflow: hidden;
  background-color: #333;
}

.navbar a {
  float: left;
  font-size: 16px;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

.dropdown {
  float: left;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;  
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: inherit;
  font-family: inherit;
  margin: 0;
}

.navbar a:hover, .dropdown:hover .dropbtn {
  background-color: red;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #ddd;
}

.dropdown:hover .dropdown-content {
  display: block;
}

但问题是,尽管按预期应用了某些样式,但下拉菜单不起作用。

.dropdown:hover .dropdown-content {
  display: block;
}

可能不适用于html文件。所以请帮助我。我想知道我应用css的方式是否正确。如果不是,请告诉我正确的做法。

标签: html css angular


【解决方案1】:

由于 Angular 默认使用 ViewEncapsulation.Emulatedheader.component.css 中的样式仅适用于 header.component.html 中的元素。由于您的 body.navbar 元素不在 header.component.html 内,因此不会应用样式。将这些样式移动到正确的组件样式表中,或者将它们移动到 angular 创建的全局样式表中。要测试您的问题是否与ViewEncapsulation.Emulated 有关,您可以使用ViewEncapsulation.None 关闭ViewEncapsulation 或将整个CSS 移至全局样式表。

ViewEncapsulation

【讨论】:

    猜你喜欢
    • 2017-11-21
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    • 2020-08-16
    • 2021-11-26
    • 1970-01-01
    • 2020-09-09
    • 2019-03-22
    相关资源
    最近更新 更多