这里的第一张图片是由网页设计师创建的草稿。
这里的第二张图片是我为此创建正确的HTML / CSS布局的结果。
问题是:如何使用适当的HTML5和CSS在评级药片周围创建这个透明字段。解决方案必须是跨浏览器和超级兼容(包括IE7和更高版本)。
评级药丸宽度不固定,取决于其内部的数字,因此透明区域必须反映这一点。
这是我目前的布局:
<div class="evo-module-c4b style="background-image: url('/i/oranges.jpg');">
<div class="price">
<span class="icon"></span>
<span class="value">10,950</span>
</div>
<div class="die"></div>
<div class="rating-wrapper">
<div class="evo-rating">
<span class="value">+100500</span>
</div>
</div>
<div class="content">
<h2>Lorem ipsum dolor</h2>
<p class="author">Donec et</p>
<p class="data">24.08.2012 10:53</p>
<h3>Nunc pellentesque justo diam, sed dictum dolor.</h3>
</div>
</div>
LESS:
div.evo-module-c4b {
position: relative;
width: @module-big-width;
height: 250px;
background-color: @color-gray-1;
background-position: 0 0;
background-repeat: no-repeat;
overflow: hidden;
div.price {
position: absolute;
top: 18px;
right: 24px;
span.icon {
display: block;
float: left;
width: 16px;
height: 16px;
background-image: url('/i/evo/icons-imageset.png');
background-position: -20px 0;
background-repeat: no-repeat;
}
span.value {
display: block;
float: left;
margin-left: 4px;
font-size: 18px;
font-weight: bold;
color: @color-white;
}
}
div.die {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 108px;
background-color: @color-gray-10;
//background-image: url('/i/evo/modules/c4b/die.png');
background-position: 0 0;
background-repeat: no-repeat;
z-index: 0;
}
div.rating-wrapper {
position: absolute;
width: 100%;
top: 122px;
text-align: center;
div.evo-rating {
display: inline-block;
}
}
div.content {
position: absolute;
left: 0;
top: 172px;
width: 100%;
z-index: 1;
h2, h3, p {
margin: 0;
padding: 0;
line-height: normal;
text-align: center;
}
h2 {
font-size: 18px;
font-weight: bold;
}
p.author {
font-size: 12px;
font-weight: bold;
}
p.data {
font-size: 10px;
color: @color-gray-4;
}
h3 {
font-size: 12px;
color: @color-gray-4;
}
}
}
div.evo-rating {
span.value {
.evo-border-radius(@rating-height / 2 + 3px);
display: block;
height: @rating-height;
font-size: 18px;
font-weight: bold;
line-height: @rating-height;
color: @color-major;
background-color: @color-white;
border: 3px solid @color-major;
padding: 0 5px;
}
}
有什么建议吗? )
答案 0 :(得分:2)
更改灰色背景以获取孔的alpha图像并将其添加到图片上。您可能需要不同的尺寸,因为宽度可能会发生变化。
答案 1 :(得分:2)
来自comment提供的moopet我已经构建了这个答案并制作了一个jsFiddle来说明他的想法
我正在假设这是构建页面的HTML:
<div class="picture">
<div class="pill-wrapper">
<div class="pill">+1030</div>
</div>
<div class="content">
</div>
</div>
根据moopet给出我们comments的想法,您可以绝对定位.pill-wrapper(并使用LESS变量找到正确的中心位置*)。为此.pill-wrapper提供填充和边框半径,然后您可以使用背景创建虚拟透明边框。只需设置背景以匹配显示的图片,并使用background-position
来匹配评级药片在页面上的位置(再次,使用LESS变量可能会使这很简单)。
请研究下面提供的CSS。请注意,仅显示必要的CSS。任何字体样式都应该由你自己应用。
.picture {
position: absolute;
width: 100%;
height: 500px;
background: url('http://goo.gl/Zi4hw');
}
.pill {
box-sizing: border-box;
width: auto;
height: 36px;
padding: 5px;
background: #0066aa;
border-radius: 18px;
border: 2px solid #ffffff;
}
.pill-wrapper {
position: absolute;
top: 225px;
left: 100px;
height: 36px;
padding: 10px;
background: url('http://goo.gl/Zi4hw') -100px -225px;
border-radius: 36px;
}
.content {
height: 250px;
margin-top: 250px;
background: rgba(255,255,255,0.9);
}
这种方法存在一定的问题。首先要注意的是,即使LESS会对所有内容进行预处理,但它并不是动态的或流动的,例如,在水平浏览器调整大小期间,额外的Javascript可能会令人遗憾地解决这个问题。其次,可能存在一些应该考虑的兼容性问题。
但是你可以在这里找到基础知识。
您可以在此处查看提议的解决方案:http://jsfiddle.net/bakkerjoeri/R99NT/3/
**:我没有经验编码,所以我为我假设的任何错误道歉。随意纠正我。*
答案 2 :(得分:1)
至于我 - 没有真正简单的解决方案。但我会尝试使用几个div将一个块与评级结合起来。想法是你可以准备一些灰色背景的图像,其中下半部分是灰色的,顶部是透明的。药丸本身的问题可以通过组合3(?)div来解决。一个用于左边的圆形边框 - 可以是带边框,灰色背景等的图像和透明部分,其中底层图像将可见。一个用于评级本身,一个用于右侧圆角。所有人都会以并排放置的方式建立背景图像,他们会制作药丸。而现在你只需将这一切都转移到你的顶层图像上。
答案 3 :(得分:1)
我认为不可能完全实现,尽管最接近的解决方案可能涉及:
创建与药丸相同但更大的元素。绝对定位新元素,使其位于药丸下方,但使其更大。给它提供与主要“橘子”图片相同的背景图像,但是调整其背景位置以使其正确排列。这显然取决于你的其他css的实现。
答案 4 :(得分:0)
如果用选择器“:after”和“:before”制作药丸,你可以在左边创建一个灰色div,在右边创建另一个,然后在药丸附近输入边界半径,但在另一侧。在药丸下你可以放一个大灰色。