วิธีทำให้พื้นหลังมืดโดยใช้ CSS


104

ฉันมีองค์ประกอบที่มีข้อความอยู่ในนั้น เมื่อใดก็ตามที่ฉันลดความทึบฉันจะลดความทึบของร่างกายทั้งหมด มีวิธีใดบ้างที่ฉันสามารถทำให้background-imageสีเข้มขึ้นไม่ใช่อย่างอื่น?

background-image:url('http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png');

คำตอบ:


202

เพียงเพิ่มรหัสนี้ใน css ภาพของคุณ

 body{
 background:
        /* top, transparent black, faked with gradient */ 
        linear-gradient(
          rgba(0, 0, 0, 0.7), 
          rgba(0, 0, 0, 0.7)
        ),
        /* bottom, image */
        url(http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png);
    }

อ้างอิง: linear-gradient () - CSS | นพ

อัปเดต: ไม่ใช่ทุกเบราว์เซอร์ที่รองรับ RGBa ดังนั้นคุณควรมี 'สีสำรอง' สีนี้มักจะเป็นสีทึบ (ทึบแสงเต็มที่) เช่น: background:rgb(96, 96, 96). อ้างอิงถึงบล็อกนี้สำหรับการสนับสนุนเบราว์เซอร์ RGBa


มีปัญหาข้ามเบราว์เซอร์กับสิ่งนี้หรือไม่
Jon P

9
คุณสมบัติคืออะไรถ้าเราต้องการระบุภาพพื้นหลังแยกกันและสิ่งนี้?
Petruza

2
@Petruza ดูเหมือนว่าเราไม่มีทางเลือกอื่นนอกจากใช้ไวยากรณ์นี้ อ่านข้อมูลอ้างอิง : "เนื่องจาก <gradient> อยู่ในประเภทข้อมูล <image> จึงสามารถใช้ได้เฉพาะในกรณีที่สามารถใช้ <image> s ได้ด้วยเหตุนี้ linear-gradient () จะไม่ทำงานกับสีพื้นหลัง และคุณสมบัติอื่น ๆ ที่ใช้ประเภทข้อมูล <color> "
Marco Panichi

18

ใช้ an: after psuedo-element:

.overlay {
    position: relative;
    transition: all 1s;
}

.overlay:after {
    content: '\A';
    position: absolute;
    width: 100%; 
    height:100%;
    top:0; 
    left:0;
    background:rgba(0,0,0,0.5);
    opacity: 1;
    transition: all 0.5s;
    -webkit-transition: all 0.5s;
    -moz-transition: all 0.5s;
}
.overlay:hover:after {
    opacity: 0;
}

ตรวจสอบปากกาของฉัน>

http://codepen.io/craigocurtis/pen/KzXYad


ดี แต่ใช้งานไม่ได้ใน Firefox 47.0.1 บน windows 10 แต่ใช้ได้กับ IE คุณมีการแก้ไขสำหรับ firefox หรือไม่?
John Max

2
@JohnMax Firefox ทำงานได้ดีในขณะนี้ แค่ต้องรออีกไม่กี่ปี
Craig O. Curtis

11

การตั้งค่าbackground-blend-modeเพื่อdarkenที่จะเป็นวิธีที่สุดตรงและสั้นที่สุดเพื่อให้บรรลุวัตถุประสงค์ตามที่คุณจะต้องตั้งค่าbackground-colorครั้งแรกสำหรับโหมดการผสมผสานการทำงาน
นอกจากนี้ยังเป็นวิธีที่ดีที่สุดหากคุณต้องการปรับแต่งค่าในจาวาสคริปต์ในภายหลัง

background: rgba(0, 0, 0, .65) url('http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png');
background-blend-mode: darken;

ฉันสามารถใช้สำหรับพื้นหลังผสมผสาน


1
edge หรือ IE11 ไม่ใช่เบราว์เซอร์จริงๆ
stackdave

6

อาจเป็นไปได้ที่จะทำเช่นนี้กับ box-shadow

อย่างไรก็ตามฉันไม่สามารถนำไปใช้กับรูปภาพได้จริง บนพื้นหลังสีทึบเท่านั้น

body {
  background: #131418;
  color: #999;
  text-align: center;
}
.mycooldiv {
  width: 400px;
  height: 300px;
  margin: 2% auto;
  border-radius: 100%;
}
.red {
  background: red
}
.blue {
  background: blue
}
.yellow {
  background: yellow
}
.green {
  background: green
}
#darken {
  box-shadow: inset 0px 0px 400px 110px rgba(0, 0, 0, .7);
  /*darkness level control - change the alpha value for the color for darken/ligheter effect */
}
Red
<div class="mycooldiv red"></div>
Darkened Red
<div class="mycooldiv red" id="darken"></div>
Blue
<div class="mycooldiv blue"></div>
Darkened Blue
<div class="mycooldiv blue" id="darken"></div>
Yellow
<div class="mycooldiv yellow"></div>
Darkened Yellow
<div class="mycooldiv yellow" id="darken"></div>
Green
<div class="mycooldiv green"></div>
Darkened Green
<div class="mycooldiv green" id="darken"></div>


2

คุณสามารถใช้คอนเทนเนอร์สำหรับพื้นหลังของคุณวางเป็นดัชนี z สัมบูรณ์และค่าลบ: http://jsfiddle.net/2YW7g/

HTML

<div class="main">
    <div class="bg">         
    </div>
    Hello World!!!!
</div>

CSS

.main{
    width:400px;
    height:400px;
    position:relative;
    color:red;
    background-color:transparent;
    font-size:18px;
}
.main .bg{
    position:absolute;
      width:400px;
    height:400px;
    background-image:url("http://fc02.deviantart.net/fs71/i/2011/274/6/f/ocean__sky__stars__and_you_by_muddymelly-d4bg1ub.png");
    z-index:-1;
}

.main:hover .bg{
    opacity:0.5;
}

2

เพียงเพิ่มสิ่งที่มีอยู่แล้วให้ใช้สิ่งต่อไปนี้:

background: -moz-linear-gradient(rgba(0,0,0,.7),rgba(0,0,0,.7));
background: -webkit-linear-gradient(rgba(0,0,0,.7),rgba(0,0,0,.7));
background: linear-gradient(rgba(0,0,0,.7),rgba(0,0,0,.7));
filter: unquote("progid:DXImageTransform.Microsoft.gradient( startColorstr='#b3000000', endColorstr='#b3000000',GradientType=0 )");

... สำหรับการรองรับข้ามเบราว์เซอร์ของการซ้อนทับแบบไล่ระดับเชิงเส้น 70% เพื่อเพิ่มความสว่างของภาพคุณสามารถเปลี่ยนทุกคน0,0,0's เข้า255,255,255' s ถ้า 70% มากไปหน่อยให้เปลี่ยนไฟล์.7. และสำหรับข้อมูลอ้างอิงในอนาคตโปรดดูที่: http://www.colorzilla.com/gradient-editor/


2

เมื่อคุณต้องการให้สีพื้นหลังสว่างขึ้นหรือเข้มขึ้นคุณสามารถใช้รหัส css นี้ได้

.brighter-span {
  filter: brightness(150%);
}

.darker-span {
  filter: brightness(50%);
}

1
ขอบคุณฉันไม่ทราบเกี่ยวกับ CSS ฟิลเตอร์ ในกรณีที่มันช่วยใครได้นี่คือสถานะCan I Use (มีนาคม 2020)
Reed Dunkle

0

สำหรับฉันวิธีการกรอง / การไล่ระดับสีใช้ไม่ได้ (อาจเป็นเพราะ CSS ที่มีอยู่) ดังนั้นฉันจึงใช้:beforeเคล็ดลับการจัดแต่งทรงผมหลอกแทน:

.eventBannerContainer {
    position: relative;
}
.eventBannerContainer:before {
    background-color: black;
    height: 100%;
    width: 100%;
    content: "";
    opacity: 0.5;
    position: absolute;
    display: block;
}
/* make any immediate child elements above our darkening mask */
.eventBannerContainer > * {
    position: relative;
}

ตั้งแต่เริ่มต้นdisplayสำหรับการ::beforeคือinlineมันจะไม่ยอมรับและwidth height
คอนเน็กโซ

ขอบคุณ @connexo ดูเหมือนว่าฉันจะพลาดเมื่อคัดลอกสไตล์ที่เกี่ยวข้อง
Daniel Sokolowski

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.