recherche

Maison  >  Questions et réponses  >  le corps du texte

Le titre réécrit est : CSS 3 formes : "Reverse Circle" ou "Cut Circle"

<p>Je souhaite créer une forme que je décrirais comme un "anti-cercle" : </p> <p>L'image est quelque peu inexacte car la ligne noire doit continuer le long de la bordure extérieure de l'élément div. </p> <p>Voici la démo que j'ai actuellement : http://jsfiddle.net/n9fTF/</p> <p>Est-il possible d'utiliser <code>CSS</code> </p>
P粉979586159P粉979586159504 Il y a quelques jours466

répondre à tous(2)je répondrai

  • P粉680087550

    P粉6800875502023-08-25 13:34:04

    Je ne peux pas vraiment dire d'après votre dessin quelle rondeur vous voulez que les points soient, mais il y a une possibilité : http://jsfiddle.net/n9fTF/6/

    Si les points doivent être plus arrondis, vous devrez placer quelques cercles aux extrémités pour qu'ils se fondent avec la cuillère.

    répondre
    0
  • P粉391677921

    P粉3916779212023-08-25 12:22:15

    Mise à jour : option de dégradé d'arrière-plan radial CSS3

    (Pour les navigateurs qui le prennent en charge - testés dans FF et Chrome - IE10, Safari devrait également fonctionner).

    L'un des "problèmes" avec ma réponse originale était ces situations sans expérience solide. Cette mise à jour crée le même effet, permettant un « espace » transparent entre le cercle et sa découpe inversée.

    Voir un exemple de violon.

    CSS

    .inversePair {
        border: 1px solid black;
        display: inline-block;    
        position: relative;    
        height: 100px;
        text-align: center;
        line-height: 100px;
        vertical-align: middle;
    }
    
    #a {
        width: 100px;
        border-radius: 50px;
        background: grey;
        z-index: 1;
    }
    
    #b {
        width: 200px;
        /* need to play with margin/padding adjustment
           based on your desired "gap" */
        padding-left: 30px;
        margin-left: -30px;
        /* real borders */
        border-left: none;
        -webkit-border-top-right-radius: 20px;
        -webkit-border-bottom-right-radius: 20px;
        -moz-border-radius-topright: 20px;
        -moz-border-radius-bottomright: 20px;
        border-top-right-radius: 20px;
        border-bottom-right-radius: 20px;
        /* the inverse circle "cut" */
        background-image: -moz-radial-gradient(
            -23px 50%, /* the -23px left position varies by your "gap" */
            circle closest-corner, /* keep radius to half height */
            transparent 0, /* transparent at center */
            transparent 55px, /*transparent at edge of gap */
            black 56px, /* start circle "border" */
            grey 57px /* end circle border and begin color of rest of background */
        );
        background-image: -webkit-radial-gradient(-23px 50%, circle closest-corner, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 55px, black 56px, grey 57px);
        background-image: -ms-radial-gradient(-23px 50%, circle closest-corner, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 55px, black 56px, grey 57px);
        background-image: -o-radial-gradient(-23px 50%, circle closest-corner, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 55px, black 56px, grey 57px);
        background-image: radial-gradient(-23px 50%, circle closest-corner, rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 55px, black 56px, grey 57px);
    }
    

    Réponse originale

    Il a fallu plus d'efforts que prévu pour que l'indexation z fonctionne correctement (Cela semble ignorer les z-index négatifs), cependant, Cela donne une belle apparence propre (dans IE9, FF, Chrome mi- test):

    HTML

    <div id="a" class="inversePair">A</div>
    <div id="b" class="inversePair">B</div>

    CSS

    .inversePair {
        border: 1px solid black;
        background: grey;
        display: inline-block;    
        position: relative;    
        height: 100px;
        text-align: center;
        line-height: 100px;
        vertical-align: middle;
    }
    
    #a {
        width: 100px;
        border-radius: 50px;
    }
    
    #a:before {
        content:' ';
        left: -6px;
        top: -6px;
        position: absolute;
        z-index: -1;
        width: 112px; /* 5px gap */
        height: 112px;
        border-radius: 56px;
        background-color: white;
    } 
    
    #b {
        width: 200px;
        z-index: -2;
        padding-left: 50px;
        margin-left: -55px;
        overflow: hidden;
        -webkit-border-top-right-radius: 20px;
        -webkit-border-bottom-right-radius: 20px;
        -moz-border-radius-topright: 20px;
        -moz-border-radius-bottomright: 20px;
        border-top-right-radius: 20px;
        border-bottom-right-radius: 20px;
    }
    
    #b:before {
        content:' ';
        left: -58px;
        top: -7px;
        position: absolute;
        width: 114px; /* 5px gap, 1px border */
        height: 114px;
        border-radius: 57px;
        background-color: black;
    } 
    

    répondre
    0
  • Annulerrépondre