如何使用CSS(和JavaScript?)创建一个模糊,“磨砂”的背景?

前端之家收集整理的这篇文章主要介绍了如何使用CSS(和JavaScript?)创建一个模糊,“磨砂”的背景?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图创建一个iOS 7风格磨砂的外观与HTML5,CSS3和JavaScript,可以在webkit浏览器上工作。

技术上,给定以下HTML:

  1. <style>
  2. #partial-overlay {
  3. width: 100%;
  4. height: 20px;
  5. background: rgba(255,255,.2); /* TODO frost */
  6. position: fixed;
  7. top: 0;
  8. left: 0;
  9. }
  10. </style>
  11. <div id="main-view">
  12. <div style="width: 50px; height: 50px; background: #f00"></div>
  13. To my left is a red Box<br>
  14. Now there is just text<br>
  15. Text that goes on for a few pixels <br>
  16. or even more
  17. </div>
  18. <div id="partial-overlay">
  19. Here is some content
  20. </div>

我想对#main-view应用类似-webkit-filter:blur(5px)水平的第一个20px。

如果CSS被修改为#partial-overlay {width:20px;高度:100%; …}然后我需要应用-webkit-filter:blur(5px)垂直的第一个20px。

明显的解决方案是使用javascript来克隆#main-view,设置overflow:hidden,然后适当地更改宽度/高度,但是似乎在我看来很难推广到更复杂的页面/ CSS结构。

有没有更好的方法来实现这个最小的性能命中和最大的可泛化性?

编辑:这里是我想要实现的一个例子:

解决方法

感谢的灵感…它导致我这个 canvas plugin这是把戏

新的和改进:-webkit- and Firefox Working Example,现在可调大小/流体。

JS

  1. $(document).ready(function () {
  2. frost = function () {
  3. var w = $('#main-view').width();
  4. html2canvas(document.body,{
  5. onrendered: function (canvas) {
  6. document.body.appendChild(canvas);
  7. $('canvas').wrap('<div id="contain" />');
  8. },width: w,height: 30
  9. });
  10. $('canvas,#partial-overlay,#cover').hide();
  11. $('#cover').fadeIn('slow',function () {
  12. $('#partial-overlay').fadeIn('slow');
  13. });
  14. };
  15.  
  16. $('body').append('<div id="cover"></div><svg id="svg-image-blur"><filter id="blur-effect-1"><feGaussianBlur stdDeviation="2"/></filter></svg>');
  17.  
  18. $('#main-view').click(function () {
  19. frost();
  20. $('#partial-overlay').addClass('vis');
  21. $(window).resize(function () {
  22. $('canvas,#cover').hide();
  23. });
  24.  
  25. function onResize() {
  26. if ($('#partial-overlay').hasClass('vis')) {
  27. frost();
  28. }
  29. }
  30. var timer;
  31. $(window).bind('resize',function () {
  32. timer && clearTimeout(timer);
  33. timer = setTimeout(onResize,50);
  34. });
  35.  
  36. });
  37.  
  38. $('#partial-overlay').click(function () {
  39. $('#partial-overlay').removeClass('vis');
  40. $('canvas,#cover').hide();
  41. });
  42. });

CSS

  1. #main-view {
  2. width:75%;
  3. height:50%;
  4. Box-sizing: border-Box;
  5. margin:8px;
  6. }
  7. #partial-overlay {
  8. display:none;
  9. width: 100%;
  10. height: 20px;
  11. position: absolute;
  12. top: 0;
  13. left: 0;
  14. z-index:99;
  15. background: rgba(255,0.2);
  16. cursor:pointer;
  17. }
  18. canvas {
  19. position: absolute;
  20. top: 0;
  21. left: 0;
  22. -webkit-filter:blur(5px);
  23. filter: url(#blur-effect-1);
  24. }
  25. #cover {
  26. display:none;
  27. height:19px;
  28. width:100%;
  29. background:#fff;
  30. top:0;
  31. left:0;
  32. position:absolute;
  33. }
  34. #contain {
  35. height:20px;
  36. width:100%;
  37. overflow:hidden;
  38. position:absolute;
  39. top:0;
  40. left:0;
  41. }
  42. svg {
  43. height:0;
  44. width:0;
  45. }

HTML

  1. <div id="main-view">
  2. <div style="width: 10%; height: 20%; background: #f00; float: left"></div>To my left is a red Box
  3. <br>Now there is just text
  4. <br>Text that goes on for a few pixels
  5. <br>or even more</div>
  6. <div id="partial-overlay">Here is some content</div>

我把它放在一个点击功能,因为我认为这将是最可能的用例。它将在文档准备好工作。

虽然画布表示不会像素完美,我不认为它在大多数情况下真的很重要,因为它的模糊。

更新:根据要求现在可以调整大小。我也把cover div移动到JS中,并为Firefox添加了一个svg。调整大小需要在每次调整大小时重新绘制画布,因此在调整大小时将其设置为隐藏画布,叠加层等,然后在调整大小时将其替换。

猜你在找的CSS相关文章