How to make radial gradients work in Safari?

后端 未结 1 832
终归单人心
终归单人心 2020-11-29 14:18

I\'m using radial-gradients on a new site that i\'m building, but the colours are rendering differently (much darker) in Safari on desktop. Is there a better cross-browser s

相关标签:
1条回答
  • 2020-11-29 14:23

    To start with, your gradient can be simplified like below.

    .box{
     background: 
      radial-gradient( farthest-side at bottom left, rgba(218, 218, 216, 0.5), transparent), 
      radial-gradient( farthest-corner at bottom right, rgba(253, 253, 253, 0.5), transparent 300px);
     height:200px;
    }
    
    body {
     background:blue;
    }
    <div class="box">
    
    </div>

    Now the issue is that safari don't support the syntax used with at as you can see in the MDN page:

    You can change your syntax like below. I will split the gradient to better see the result, then you can easily combine them.

    The first gradient:

    .box{
     background: 
      radial-gradient( farthest-side at bottom left, rgba(218, 218, 216, 0.5), red);
     height:200px;
    }
    
    .box2{
     background: 
      radial-gradient( farthest-side, rgba(218, 218, 216, 0.5), red) top right/200% 200%;
     height:200px;
    }
    <div class="box">
    
    </div>
    <div class="box2">
    
    </div>

    The second gradient

    .box{
     background:  
      radial-gradient( farthest-corner at bottom right, rgba(253, 253, 253, 0.5), red 300px);
     height:200px;
    }
    
    .box2{
     background:  
      radial-gradient( farthest-corner, rgba(253, 253, 253, 0.5), red 300px) top left/200% 200%;
     height:200px;
    }
    <div class="box">
    
    </div>
    <div class="box2">
    
    </div>

    The trick is that if you remove the at, the gradient will by default start from the center and when starting from the center we need an X distance to reach either the corner or the sides unlike when we start from a corner when we will need twice the X distance. That's why I made the gradient to have a size of 200% 200% and the I simply adjust the background position to have the same visual.

    Here is the final background:

    .box{
     background: 
      radial-gradient( farthest-side, rgba(218, 218, 216, 0.5) , transparent) top right/200% 200%, 
      radial-gradient( farthest-corner, rgba(253, 253, 253, 0.5), transparent 300px) top left/200% 200%;
     height:200px;
    }
    
    body {
     background:blue;
    }
    <div class="box">
    
    </div>

    Related question: How to animate a radial-gradient using CSS?

    0 讨论(0)
提交回复
热议问题