作为@ 的 利斯特先生 强> 在评论中提到,看起来像Chrome的一个错误。找一台Mac机,看看它是否与safari相同。这样我就可以为两者提出一个bug。
这似乎是一个普遍的错误。它不仅出现在Chrome(最新的FF有它)中,尽管不同的浏览器/引擎有不同的症状和规模。
例如,如果你放一个“直边”,模糊的边缘会增长?线性梯度在一个非常大的元素上。
在jsfiddle上查看我的测试用例: http://jsfiddle.net/matvey_andreyev/ufadpo1n/ Chrome使用非常高的元素表现得非常奇怪。
代码本身:
<div class="padding"> <div id="gradient"></div> <div class="controls"> <div class="part"> <h3>Demo of a blurry edge where a straight one is expected</h3> <strong>linear-gradient</strong>( to bottom, transparent, <br />transparent <input class="tool" type="text" id="edge1" value="50px" />, <input type="text" class="tool" id="color2_1" value="#d00" /> <input type="text" class="tool" id="edge2" value="50px" />, <input type="text" class="tool" id="color2_2" value="#d00" /> <input type="text" class="tool" id="edgeLast" value="100%" />) <br/> <strong>height:</strong> <input type="text" class="tool2" id="height" value="300px" /> </div> <div class="part"> <h4>Some preset examples</h4> <p><span class="preset" id="default">default values</span> </p> <p><span class="preset" id="bigLast">10000px position of the last color stop</span> </p> <p><span class="preset" id="edge1greater">1st color stop greater than second</span> </p> <p><span class="preset" id="skyscraper">Set great height to the #gradient</span> </p> <p>Don't forget viewing in different browsers.</p> </div> </div> </div> <style type="text/css"> html, body { min-height:100%; margin:0; padding:0; } .padding { padding:20px; background-color:#ddd; position:relative; height:calc(100%); } #gradient { height:300px; background-position:0 0; background-image: linear-gradient(to bottom, transparent, transparent 50px, #d00 50px, #d00 100%); border-style:dotted; border-width:1px; border-color:#fff; } .controls { background-color:#fff; padding:30px 30px 15px; font-size:13px; color:#444; box-shadow:1px 1px 3px rgba(0, 0, 0, 25); max-width:500px; position:absolute; top:30px; right:30px; } h3 { margin:0 0 .5em; } h4 { margin:0; } .tool, .tool2 { width:40px; } .preset { cursor:pointer; color:#00d; border-style:dashed; border-width:0 0 1px; } .preset:hover { color:#d00; } .part { margin:0 0 15px; } </style> <script type="text/javascript"> $(document).ready(function () { var $edge1 = $('#edge1'), $edge2 = $('#edge2'), $color2_1 = $('#color2_1'), $color2_2 = $('#color2_2'), $edgeLast = $('#edgeLast'), $gradient = $('#gradient'), $height = $('#height'), defaultGrad = $gradient.css('background-image'), defaultHeight = $gradient.css('height'), setDefaultValues, changeGrad, changeHeight; setDefaultValues = function setDefaultValues() { $gradient.css({ 'background-image': defaultGrad, 'height': defaultHeight }); $edge1.val('50px'); $edge2.val('50px'); $edgeLast.val('100%'); $color2_1.val('#d00'); $color2_2.val('#d00'); $height.val(defaultHeight); } changeGrad = function changeGrad() { $gradient.css({ 'background-image': 'linear-gradient(to bottom, transparent, transparent ' + $edge1.val() + ', ' + $color2_1.val() + ' ' + $edge2.val() + ', ' + $color2_2.val() + ' ' + $edgeLast.val() + ')' }); } changeHeight = function changeHeight() { $gradient.css({ 'height': $height.val() }); } $('.tool').on('focus blur keyup change', changeGrad); $('.tool2').on('focus blur keyup change', changeHeight); $('#default').click(function () { setDefaultValues(); changeGrad(); }); $('#bigLast').click(function () { setDefaultValues(); $edgeLast.val('10000px'); changeGrad(); }); $('#edge1greater').click(function () { setDefaultValues(); $edge1.val('55px'); changeGrad(); }); $('#skyscraper').click(function () { $height.val(50000 + 'px'); changeHeight(); }); }); </script>
目前似乎没有真正的答案。我最终使用背景图像而不是末端的线性渐变。