Html5 Border-Radius Обратное заполнение - PullRequest
0 голосов
/ 27 декабря 2018

Я хочу получить кнопку раскрывающегося списка в соответствии со следующим изображением дизайна.Смотрите раскрывающееся меню начинается сразу после середины кнопки.Моя проблема в том, что кнопка имеет прозрачный фон для использования фонового изображения от корневого родительского div.

enter image description here

До сих пор я добился следующего изображения.Как я уже говорил выше, я хочу получить белые края за пределами радиуса границы.

enter image description here

    .dropdown-header {
      border-top-left-radius: 20px;
      border-top-right-radius: 20px;
      width: 210px;
      height: 185px;
      margin: auto;
    }
    
    
    .div-user-header {
      width: 210px;
      margin: auto;
      position: relative;
    
      border-top-left-radius: 20px;
      border-top-right-radius: 20px;
    
    }
    
    .div-user-header-1 {
      width: 206px;
      height: 24px;
      border: 2px solid #9CB2C7;
      border-radius: 20px;
      display: inline-block;
      text-align: center;
      padding-top: 5px;
    
    }
    
    .div-user-header-1 a {
      text-decoration: none;
      color: #FCCC00;
      display: block;
    
    }
    
    
    .div-user-header-list {
      position: absolute;
      background-color: white;
      height: 170px;
      width: 210px;
    
    
    }
    
    .div-user-header-2 a {
      text-decoration: none;
      font-size: 12px;
      color: #8C8C8C;
    }
    
    .div-user-header-2 {
      height: 40px;
      padding: 12px 15px;
    
    
    }
    
    .div-user-header-3 a {
      text-decoration: none;
      font-size: 12px;
      color: #8C8C8C;
    }
    
    .div-user-header-3 {
      height: 40px;
      padding: 12px 15px;
    
    }
    
    .div-add-profile-card {
    
      padding: 0px 15px;
    }
    
    .div-add-profile-card a {
      text-decoration: none;
      color: #8C8C8C;
      font-size: 10px;
      padding: 12px;
      display: block;
      border-top: 1px solid #D6D6D6;
    }
    <div class="dropdown-header">
        <div class="div-user-header">
          <div class="div-user-header-1">
            <a href="#profileuser01">ProfileUser 01</a>
          </div>
          <div class="div-user-header-list">
            <div class="div-user-header-2">
              <img src="../../../assets/images/avtar2.png" width="34px" height="34px" style="padding-right: 5px; vertical-align: middle" />
              <a href="#profileuser02">ProfileUser 01</a>
            </div>
            <div class="div-user-header-3">
              <img src="../../../assets/images/user-02.png" width="30px" height="30px" style="padding-right:5px; vertical-align: middle" />
              <a href="#profileuser03">ProfileUser 02</a>
            </div>
            <div class="div-add-profile-card">
              <a href="add profile card"> + Add Profile Cards</a>
            </div>
          </div>
        </div>

Любое предложение будет очень полезным.

Ответы [ 4 ]

0 голосов
/ 27 декабря 2018
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://fonts.googleapis.com/css?family=Varela+Round" rel="stylesheet">
  <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">

    <style>
    body{
        background-color: grey;
    }
        .dropdown-header {
      border-top-left-radius: 20px;
      border-top-right-radius: 20px;
      width: 210px;
      height: 203px;
      margin: auto;
      overflow: hidden;
      /*background-color: #fff;*/
    }

    .div-user-header-list:before,
    .div-user-header-list:after {
        content: "";
        position: absolute;

        height: 10px;
        width: 20px;

        bottom: 0;
    }
        .div-user-header-list:before {
        /*right: -20px;*/
        left: 1px;
        top: -10px;
        border-radius: 0 0 0 10px;
        -moz-border-radius: 0 0 0 10px;
        -webkit-border-radius: 0 0 0 10px;

        -webkit-box-shadow: -10px 0 0 0 #fff;
        box-shadow: -10px 0 0 0 #fff;
    }

    .div-user-header-list:after {
        /*left: -20px;*/
        right: 1px;
        top: -10px;
        border-radius: 0 0 10px 0;
        -moz-border-radius: 0 0 10px 0;
        -webkit-border-radius: 0 0 10px 0;

        -webkit-box-shadow: 10px 0 0 0 #fff;
        box-shadow: 10px 0 0 0 #fff;
    }
    .div-user-header {
      width: 210px;
      margin: auto;
      position: relative;

      border-radius: 20px;      

    }

    .div-user-header-1 {
      width: 206px;
      height: 24px;
      border: 2px solid #9CB2C7;
      border-radius: 20px;
      display: inline-block;
      text-align: center;
      padding-top: 5px;

    }

    .div-user-header-1 a {
      text-decoration: none;
      color: #FCCC00;
      display: block;

    }


    .div-user-header-list {
      position: absolute;
      background-color: white;
      height: 170px;
      width: 210px;
        /*margin-top: -14px;
    z-index: -9;
    padding-top: 14px;*/

    }

    .div-user-header-2 a {
      text-decoration: none;
      font-size: 12px;
      color: #8C8C8C;
    }

    .div-user-header-2 {
      height: 40px;
      padding: 12px 15px;


    }

    .div-user-header-3 a {
      text-decoration: none;
      font-size: 12px;
      color: #8C8C8C;
    }

    .div-user-header-3 {
      height: 40px;
      padding: 12px 15px;

    }

    .div-add-profile-card {

      padding: 0px 15px;
    }

    .div-add-profile-card a {
      text-decoration: none;
      color: #8C8C8C;
      font-size: 10px;
      padding: 12px;
      display: block;
      border-top: 1px solid #D6D6D6;
    }   


    </style>

</head>    

<body>

<div class="dropdown-header">
        <div class="div-user-header">
          <div class="div-user-header-1">
            <a href="#profileuser01">ProfileUser 01</a>
          </div>
          <div class="div-user-header-list">
            <div class="div-user-header-2">
              <img src="../../../assets/images/avtar2.png" width="34px" height="34px" style="padding-right: 5px; vertical-align: middle" />
              <a href="#profileuser02">ProfileUser 01</a>
            </div>
            <div class="div-user-header-3">
              <img src="../../../assets/images/user-02.png" width="30px" height="30px" style="padding-right:5px; vertical-align: middle" />
              <a href="#profileuser03">ProfileUser 02</a>
            </div>
            <div class="div-add-profile-card">
              <a href="add profile card"> + Add Profile Cards</a>
            </div>
          </div>
        </div>
</body>
</html> 
0 голосов
/ 27 декабря 2018

Это очень просто.Вы достигли почти 99%.Просто добавьте следующие стили к вашему CSS .div-user-header-list, как показано ниже:

.div-user-header-list {
    position: absolute;
    background-color: white;
    height: 170px;
    width: 210px;
    padding-top: 20px;
    margin-top: -20px;
    z-index: -1;
}

См. Обновленную скрипку здесь: https://jsfiddle.net/8ukj3wy1/1/

0 голосов
/ 27 декабря 2018

Проверьте это: enter image description here https://jsfiddle.net/sLy7fnzg/

В основном используйте отрицательное поле для перемещения .div-user-header-list вверх и относительное позиционирование для включения z-индексов.

Кроме того, чтобы решить проблему с половиной границы, удалите границу из .div-user-header-1 и добавьте целый элемент как ::before к .div-user-header следующим образом:

.div-user-header::before {
    content: "";
    background: #9CB2C7;
    width: 210px;
    height: 30px;
    display:block;
    position: absolute;
    top: 0;
    left: 0;
    border-radius: 20px;
    z-index: 1;
}
0 голосов
/ 27 декабря 2018

enter image description here

Используйте ::after ::before псевдоэлементы для раскрывающегося списка и примените отдельные background-image, как отмечено на изображении.Примените position:absolute и выровняйте затем по верхнему левому и правому углам в зависимости от дизайна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...