提前感谢您的帮助。
我花了很多时间在网上和这个论坛上寻找一个解决方案,让我的导航按钮有一个斜角底。这是一个例子:
我想尽可能避免使用图片。我想知道如何在CSS的每个导航选择的示例图像中创建这样的框。此导航代码将进入Wordpress安装。我非常欣赏这些专业知识。再次感谢你!
答案 0 :(得分:2)
好消息,坏消息......
除了CSS之外,使用其他任何东西都可以做到最好 对于足够新的浏览器(即:您不需要IE< = 8来维护Chrome 42所具有的所有样式),这可以在不使用额外DOM元素的情况下完成。
这也可以使用CSS ...等待它......
buuuut 仅限CSS的版本只能使角度达到设定的宽度。
它不能使角度在任意宽度上伸展,因此按钮必须是相同的长度,或者角度的宽度/高度必须在所有按钮上相同(意味着底部的一部分将是平的,在较长的按钮上。)
nav {
background-color: green;
padding: 20px;
}
nav > button {
background-color: rgb(60, 60, 60);
color: rgb(120, 120, 120);
position: relative;
border-radius: none;
border: none;
padding: 20px;
}
nav > button:after {
content: "";
width: 0;
height: 0;
right: 0;
bottom: 0;
position: absolute;
border-left: 60px solid transparent;
border-bottom: 15px solid blue;
}
<nav >
<button >About</button>
<button >Bios</button>
</nav>
由于某种原因,我把颜色变得明显。
为了充分体验作弊,我会通过改变左边框的颜色来使解决方案更加明显:
nav {
background-color: green;
padding: 20px;
}
nav > button {
background-color: rgb(60, 60, 60);
color: rgb(120, 120, 120);
position: relative;
border-radius: none;
border: none;
padding: 20px;
}
nav > button:after {
content: "";
width: 0;
height: 0;
right: 0;
bottom: 0;
position: absolute;
border-left: 60px solid red;
border-bottom: 15px solid blue;
}
<nav >
<button >About</button>
<button >Bios</button>
</nav>
正如您所看到的,我使用边框底部(蓝色)和边框左侧(透明)创建的三角形非常完美。
border-left的宽度决定了这个效果的宽度,border-bottom的高度决定了它的高度;只是碰巧左边的那个是看不见的
如果那个蓝色设置为与<nav>
本身相同的绿色,那么它看起来就像按钮上缺少一个缺口,而不是画了一个角落。
如果你想让这款ES6-8变得友好,你只需要为每个按钮添加1个div(在每个按钮或其他任何按钮之后),然后调整尺寸并使用它的边框。
真的,你需要添加一个div来包含div和按钮(所以容器相对定位,按钮占据了100%的空间,并且油漆芯片绝对位于里面)。登记/>
如果您不关心旧浏览器获取完全相同的视图, ,您实际上不需要自己执行此操作 。
这大部分解决了......
如果你可以说“我的主题最小的按钮是60px,那么一个60px的三角形就可以了”,那就太好了。改变颜色,你就完成了。
如果没有,你可以做多一点。
它并不理想,它并不像它那样美观(比那里更漂亮)但是如果你可以使用JS来做到这一点,你可以保证所有的按钮都会出现在页面之前代码运行,它们的宽度不会改变,你可以这样做:
(function () {
var nav;
var buttons;
var style;
var styleText;
function getElWidth (el) { return el.getBoundingClientRect().width; }
function borderLeftText (width, i) {
return ["nav > button:nth-child(", i + 1, "):after { border-left: ", width, "px solid transparent; }"].join("");
}
function getStyleEntries (els) {
return els.map(getElWidth).map(borderLeftText);
}
try {
nav = document.querySelector("nav");
buttons = [].slice.call(nav.querySelectorAll("button"));
style = document.createElement("style");
styleText = getStyleEntries(buttons).join("\n");
style.textContent = styleText;
document.head.appendChild(style);
}
catch (err) {
// because the same browsers that will blow up won't support the CSS anyway;
// don't fix it, just move on
// good code shouldn't do this, but that's another story
}
}());
nav {
background-color: green;
padding: 20px;
}
nav > button {
background-color: rgb(60, 60, 60);
color: rgb(120, 120, 120);
position: relative;
border-radius: none;
border: none;
padding: 20px;
}
nav > button:after {
content: "";
width: 0;
height: 0;
right: 0;
bottom: 0;
position: absolute;
border-left: 60px solid transparent;
border-bottom: 15px solid green;
}
<nav >
<button >About</button>
<button >Bios</button>
</nav>
这里我基本上抓住了目前存在的所有按钮,并编写了我自己的CSS文件,
nav > button:nth-child(1):after { /*...*/ }
nav > button:nth-child(2):after { /*...*/ }
然后将<style>
标记附加到<head>
内,并附上该文字。
每个选择器中只有一个规则; border-left
宽度将设置为按钮的实际宽度(以像素为单位)。
现在你已经拥有了你想要的东西,但它需要JS并且要求在代码运行之前按钮位于页面上,并要求宽度不会改变(通过样式,或通过媒体查询等)。如果其中任何一个发生,并且您希望更新角落,则需要再次运行该代码。
如果是这种情况,则应特别注意缓存和重用style
标记,以便页面上没有8个具有相同规则的标记。
如果你对大多数人都很好,那就去CSS吧 如果您知道修补程序不必实时响应,或者应用于越来越多动态添加的按钮,那么请转到JS + CSS。 如果这些都不够好,请使用.svg或.png
答案 1 :(得分:1)
变换:skewY(deg);
会像这样扭曲一个div,你可能需要在图层中构建它,然后将文本-deg倾斜以解开文本
简单示例: https://jsfiddle.net/uex2umac/
.wrapper{
width:500px;
height:300px;
background-color:#000;
overflow:hidden;
}
.tobeskew{
width:280px;
height:220px;
margin-bottom:0px;
background-color:#f1f;
text-align:center;
transform:skewY(-15deg);
}
p{
transform:skewY(15deg);
line-height:220px;
font-size:40px;
color:#fff;
}
<Div class="wrapper">
<div class="tobeskew">
<p>Hello</p>
</div>
</div>
答案 2 :(得分:1)
这是使用SVG背景图像的解决方案。请注意,使用SVG需要IE9 +,但是......
BODY
{
background-color: #333;
}
.button
{
float:left;
float: left;
font-family: sans-serif;
font-weight: bold;
font-size: 44px;
background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 115' preserveAspectRatio='none'><polygon points='0 0 100 0 100 100 0 115' fill='%23282828'/></svg>");
background-size: 100% 100%;
color: #999;
height: 110px;
line-height: 96px;
padding: 0 50px;
margin-right: 10px;
}
.button.selected
{
color: #fbac31;
background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 115' preserveAspectRatio='none'><polygon points='0 0 100 0 100 100 0 115' fill='black'/></svg>");
}
<div class="button">
<div>ABOUT</div>
</div>
<div class="button selected">
<div>BIOS</div>
</div>