css
  • css3
  • css-selectors
  • 2017-08-26 104 views 0 likes 
    0

    一個CSS按鈕與Safari瀏覽器的截圖再次更新:@ LGSon的答案後的樣式尖左邊緣和圓角右邊緣

    enter image description here

    更新:

    謝謝您的回答,但以下代碼不會產生正確的效果,人們可以清楚地看到SVG與標籤之間因高度差異而分開:

    .divsclass { 
     
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 146 206'%3E%3Cdefs%3E%3Cstyle%3E.c1%7Bfill:%23fff;%7D.c2%7Bfill:none;stroke:%23a0310f;stroke-linecap:round;stroke-miterlimit:10;stroke-width:10px;%7D%3C/style%3E%3C/defs%3E%3Cpath d='M146 0H98.53l-1 .47-94 94a12 12 0 0 0 0 17l94 94L99 206h47z' class='c1'/%3E%3Cpath d='M113.18 28.2l-73 74.8 73 74.81' class='c2'/%3E%3C/svg%3E"); 
     
        background-repeat: no-repeat; 
     
    } 
     
    
     
    .divsclass a { 
     
        color: red; 
     
        text-transform: uppercase; 
     
        background-color: white; 
     
        margin-left: .75em; 
     
        border-bottom-right-radius: 10px; 
     
        border-top-right-radius: 10px; 
     
        font-size: 75%; 
     
    }
    <div style="padding: 1em; background: black"> 
     
        <div class="divsclass"><a role="button">BACK</a></div> 
     
    </div>

    我試圖創建以下按鈕,其中裏面的文本(BACK在下面的示例)可以是可變長度的。我正在嘗試左側的背景圖片和右側的邊框半徑,但它不起作用(使用:before)。有任何想法嗎?

    P.S.如果有幫助,我確實將左三角形圖像作爲單獨的SVG。

    enter image description here

    +0

    你能分享你的CSS代碼嗎? – Geff

    +0

    如果左邊的三角形是一個SVG,爲什麼不把整個按鈕的形狀變成一個SVG(或者至少是左邊的那一部分,其餘部分可能是一個正常的右邊有圓角的div,所以它由於內容可以輕鬆拉伸)?否則,試圖用CSS在左邊生成舍入點需要類似clip-path(https://developer.mozilla.org/en-US/docs/Web/CSS/clip-path)或其他奇怪的黑客。 SVG對此非常完美 – diopside

    +0

    我更新了我的問題以反映問題,即使在使用SVG時也是如此。 – Sammy

    回答

    1

    這可以結合單獨使用CSS來實現與僞元素

    a { 
     
        position: relative; 
     
        display: inline-block; 
     
        padding: 2px 10px 2px 20px; 
     
        border-top-right-radius: 10px; 
     
        border-bottom-right-radius: 10px; 
     
        overflow: hidden; 
     
        text-decoration: none; 
     
    } 
     
    a::before, 
     
    a::after { 
     
        position: absolute; 
     
        content: ''; 
     
        left: 0; 
     
        top: 50%; 
     
        width: 100%; 
     
        padding-bottom: 100%; 
     
        background: lightgray; 
     
        transform: rotate(-45deg); 
     
        transform-origin: left top; 
     
        z-index: -1; 
     
    } 
     
    a::after { 
     
        left: 5px; 
     
        border: 1px solid black; 
     
    }
    <a href="#">BACK</a>


    更新

    這裏是使用現有的SVG和僞版本

    span { 
     
        display: inline-block; 
     
        background-color: black; 
     
        padding: 2px 10px 2px 20px; 
     
    } 
     
    a { 
     
        position: relative; 
     
        display: block; 
     
        color: red; 
     
        padding: 2px 10px 2px 0; 
     
        text-transform: uppercase; 
     
        background-color: white; 
     
        border-bottom-right-radius: 10px; 
     
        border-top-right-radius: 10px; 
     
        font-size: 75%; 
     
    } 
     
    
     
    a::before { 
     
        content: ''; 
     
        position: absolute; 
     
        top: 0; 
     
        left: -14px; 
     
        height: 100%; 
     
        width: 15px; 
     
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 146 206'%3E%3Cdefs%3E%3Cstyle%3E.c1%7Bfill:%23fff;%7D.c2%7Bfill:none;stroke:%23a0310f;stroke-linecap:round;stroke-miterlimit:10;stroke-width:10px;%7D%3C/style%3E%3C/defs%3E%3Cpath d='M146 0H98.53l-1 .47-94 94a12 12 0 0 0 0 17l94 94L99 206h47z' class='c1'/%3E%3Cpath d='M113.18 28.2l-73 74.8 73 74.81' class='c2'/%3E%3C/svg%3E"); 
     
        background-repeat: no-repeat; 
     
        background-size: 100%; 
     
        background-position: center; 
     
    }
    <span><a role="button">BACK</a></span>

    +0

    謝謝,看起來很完美!而不是'div',我可以使用'a'還是不行? – Sammy

    +0

    @Sammy更新我的答案,而不是使用錨點 – LGSon

    +0

    謝謝......所以這工作得很好,除了在Safari瀏覽器! – Sammy

    0

    如果使用DIV作爲一個按鈕和圖像作爲背景,你可以讓你的CSS是這樣的:

    div.divsclass { 
    border-radius: 15px 50px 30px 5px: 
    } 
    

    所以,你可以設置邊框半徑在所有的4個角落,如果你只想用CSS。或者如前所述編輯你的SVG。

    +0

    問題(正如你可以看到,如果你運行上面的代碼)是,這取決於字體的大小,並顯示在不同的高度在每個瀏覽器。我無法對齊'a'標籤和背景的像素。 – Sammy

    相關問題