为啥在将html元素的不透明度更改为0.5后,我不能将h1元素的不透明度改回1? [复制]

Posted

技术标签:

【中文标题】为啥在将html元素的不透明度更改为0.5后,我不能将h1元素的不透明度改回1? [复制]【英文标题】:Why can't I change the opacity of h1 element back to 1 after changing opacity of html element to 0.5? [duplicate]为什么在将html元素的不透明度更改为0.5后,我不能将h1元素的不透明度改回1? [复制] 【发布时间】:2016-12-06 07:10:45 【问题描述】:

我在 css 中为我的 html 元素添加了一个背景图像,以便它随着网络浏览器的大小而扩展。我将此 html 元素中的不透明度更改为 0.5。我想将子元素(特别是 h1 和段落元素)改回不透明度为 1,因此文本不透明。它不起作用。请帮忙:)

HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Title</title>
    <link rel = "stylesheet" href = "style.css">
</head>

<body>

    <p id ="topBar"></p>

    <h1>Heading</h1>

    <h3>Name</h3>

    <p> 
        Paragraph
    </p>

    <h3>Heading</h3>

    <p>More text</p>

    <h3>Send us an email!</h3>

    <form>
        <input style ="width:200px" type="email" placeholder ="Email" name="email"><br><br>
        <textarea style ="height:100px;width:200px"placeholder = "Message" name="message"></textarea><br><br>
        <input type="submit" value ="Send" name="send">
    </form>

    <p id ="bottomBar"></p>
</body>
 </html>

CSS:

html 

background: url(pen.jpg) no-repeat center fixed;
background-size: cover;


font-family: Garamond;
text-align: center;

opacity: 0.5;



h1 

opacity: 1;
 

【问题讨论】:

@LaurIvan 不。 h1 规则比 html 规则更具体,因此适用。 整个 html 文档都有一个 opacity 指令,它会影响所有内容,而不管具体性或优先级。 @LaurIvan 添加 !important 什么都不做。您只需要在特定元素上设置较低的不透明度。 @SLowLoris 但是怎么做? h1 嵌套在 html 中,因此根据 css 优先级,h1 的规则应该覆盖 html 的规则 @geeksal opacity 不能被覆盖。如果您有一个不透明度为 0.5 的元素和该元素中的一个不透明度为 0.5 的子元素,则该子元素的不透明度将为 0.25。它已经降低了其父级的不透明度,并进一步降低了其自身的指令。很简单 @SLowLoris 谢谢我不知道 【参考方案1】:

如果您将父元素的不透明度设置为 0.5 ,则所有子元素都将获得该不透明度。我建议您使用透明的 img 作为背景,或者您可以将该背景赋予伪元素。

(我使用背景颜色作为示例,但您可以使用 background-imageopacity:0.5 代替。它仍然有效)

html 




font-family: Garamond;
text-align: center;


position:relative;



html:before 
  height:100%;
  width:100%;
  position:absolute;
  top:0;
  left:0;
  margin:0 auto;
  background:rgba(0,0,0,0.5);
   
  content:"";
  z-index:-1;


h1 

opacity: 1;
 
 <p id ="topBar"></p>

    <h1>Heading</h1>

    <h3>Name</h3>

    <p> 
        Paragraph
    </p>

    <h3>Heading</h3>

    <p>More text</p>

    <h3>Send us an email!</h3>

    <form>
        <input style ="width:200px" type="email" placeholder ="Email" name="email"><br><br>
        <textarea style ="height:100px;width:200px"placeholder = "Message" name="message"></textarea><br><br>
        <input type="submit" value ="Send" name="send">
    </form>

    <p id ="bottomBar"></p>

【讨论】:

进一步澄清:在父 div 上将不透明度设置为 0.5,在该 div 内的段落上设置为 0.4 将导致子段落上的不透明度为 0.5*0.4=0.2。【参考方案2】:

不透明度在这种特殊情况下不起作用,因为它继承自他的父级并且不能被覆盖。

我通过background: rgba(0, 0, 0, .5);更改了您的背景,然后不再需要更改文本的不透明度。

这是最简单的改变方法,只使用背景的不透明度。

JS fiddle here

html 

background: url(pen.jpg) no-repeat center fixed;
background-size: cover;


font-family: Garamond;
text-align: center;

background: rgba(0, 0, 0, .5);



 
<body>

    <p id ="topBar"></p>

    <h1>Heading</h1>

    <h3>Name</h3>

    <p> 
        Paragraph
    </p>

    <h3>Heading</h3>

    <p>More text</p>

    <h3>Send us an email!</h3>

    <form>
        <input style ="width:200px" type="email" placeholder ="Email" name="email"><br><br>
        <textarea style ="height:100px;width:200px"placeholder = "Message" name="message"></textarea><br><br>
        <input type="submit" value ="Send" name="send">
    </form>

    <p id ="bottomBar"></p>
</body>

【讨论】:

【参考方案3】:

默认情况下,如果父元素应用了不透明度,那么所有子元素也采用相同的不透明度。即使您将子元素设置为 opacity:1 它也不起作用。 在您的情况下,“html”具有不透明度:0.5,因此其子级即“h1”具有不透明度:1 仍将具有 0.5 不透明度。

对于您的问题,有 2 个解决方案:- 1.通过Photoshop等照片编辑软件将背景图片(即“pen.jpg”)稍微透明。 2.在'after'伪代码中使用背景图像。即

html::after 
      content: "";
      background: url(pen.jpg);
      opacity:0.5;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
      position: absolute;
      z-index: -1;   

以上任何一种都适合你。

【讨论】:

我的答案不正确吗?为什么投反对票? Downvote 不是来自我,但我认为是因为这句话:In your case 'html' has opacity:0.5 so its child i.e 'h1' having opacity:1 won't do any difference. 但实际上如果你在另一个不透明度 0.5 元素内有一个不透明度 0.5 元素,效果将是 0.25 不透明度,所以它们是有区别的。也许你可以编辑那句话... 谢谢@gregn3。我编辑了我的句子 我认为这是正确的,所以我投了赞成票。【参考方案4】:

您还可以将背景应用于正文元素而不是 html。因为所有可见的内容都在body标签里面

body
 background:rgba(255,0,0,0.5);


font-family: Garamond;
text-align: center;

opacity: 0.5;


h1 

opacity: 1;
 <p id ="topBar"></p>

    <h1>Heading</h1>

    <h3>Name</h3>

    <p> 
        Paragraph
    </p>

    <h3>Heading</h3>
 
    <p>More text</p>

    <h3>Send us an email!</h3>

    <form>
        <input style ="width:200px" type="email" placeholder ="Email" name="email"><br><br>
        <textarea style ="height:100px;width:200px"placeholder = "Message" name="message"></textarea><br><br>
        <input type="submit" value ="Send" name="send">
    </form>

    <p id ="bottomBar"></p>

【讨论】:

以上是关于为啥在将html元素的不透明度更改为0.5后,我不能将h1元素的不透明度改回1? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

悬停动画淡入不透明度 0.5 悬停不透明度 1

使用弹出式效果将文本的不透明度从 0 更改为 1

淡入图像,直到单击另一个图像

如何使用 Javascript 获取元素的不透明度?

通过过渡更改图像不透明度

CSS如何只改变父元素背景透明度不改变子元素透明度