Элементы выпадающего меню с fontawesome имеют разный размер (семейное древо CSS3) - PullRequest
1 голос
/ 28 февраля 2020

У меня есть семейное дерево css3, которое, когда вы нажимаете на поле, появляется раскрывающееся меню.

Элементы div в раскрывающемся меню по какой-то причине имеют разный размер.

Например:

При открытии меню подотдела отдела 3 опция редактирования больше, чем добавить. С другой стороны, если вы откроете меню объекта или отдела 3. Похоже, он будет того же размера.

Как я могу это исправить?

HTML:

<div class="col-md-12">
      <div class="tree d-flex justify-content-center">
        <!-- BEGIN ORGANIGRAM-->
        <ul>
          <li>
            <div class="dropdown">
              <a class="dropdown-toggle" data-toggle="dropdown">Entity<hr>User 1<br> User2</a>
              <div class="dropdown-menu">          
                <div>              
                  <a title="Add new" data-toggle="modal" href="#modal_organigram" data-id="1" data-type="1" data-select="undefined" data-title="Entity">
                    <i class="fas fa-plus"></i>              
                  </a>            
                </div>            
                <div class="mt-1">              
                  <a title="Modify" data-toggle="modal" href="#modal_modify" data-id="1" data-type="1" data-parent="undefined" data-select="undefined" data-title="Entity">                
                    <i class="fas fa-pencil-alt"></i>           
                  </a>            
                </div>          
              </div>              
            </div>
            <ul>
              <li>
                <div class="dropdown">
                  <a class="dropdown-toggle" data-toggle="dropdown">Department 3<hr>User 1<br></a>          
                  <div class="dropdown-menu">            
                    <div>              
                      <a title="Add new" data-toggle="modal" href="#modal_organigram" data-id="4" data-type="2" data-select="3" data-title="Department 3">                
                        <i class="fas fa-plus"></i>              
                      </a>            
                    </div>            
                    <div class="mt-1">              
                      <a title="Modify" data-toggle="modal" href="#modal_modify" data-id="4" data-type="2" data-parent="1" data-select="3" data-title="Department 3">                
                        <i class="fas fa-pencil-alt"></i>              
                      </a>            
                    </div>          
                  </div>

                </div>
                <ul>
                  <li>
                    <div class="dropdown">
                      <a class="dropdown-toggle" data-toggle="dropdown">Subdepartment<hr>User 6 <br> User 3</a>          
                      <div class="dropdown-menu">            
                        <div>              
                          <a title="Add new" data-toggle="modal" href="#modal_organigram" data-id="6" data-type="3" data-select="" data-title="Subdepartment">                
                            <i class="fas fa-plus"></i>              
                          </a>            
                        </div>            
                        <div class="mt-1">              
                          <a title="Modify" data-toggle="modal" href="#modal_modify" data-id="6" data-type="3" data-parent="4" data-select="" data-title="Subdepartment">
                            <i class="fas fa-pencil-alt"></i>           
                          </a>            
                        </div>          
                      </div>

                    </div>

                  </li>

                </ul>

              </li>
              <li>
                <div class="dropdown">
                  <a class="dropdown-toggle" data-toggle="dropdown">Department 4<hr>User 7<br></a>          
                  <div class="dropdown-menu">            
                    <div>              
                      <a title="Add new" data-toggle="modal" href="#modal_organigram" data-id="5" data-type="2" data-select="4" data-title="Department 4">                
                        <i class="fas fa-plus"></i>              
                      </a>            
                    </div>            
                    <div class="mt-1">              
                      <a title="Modify" data-toggle="modal" href="#modal_modify" data-id="5" data-type="2" data-parent="1" data-select="Futbol" data-title="Department 4">                
                        <i class="fas fa-pencil-alt"></i>            
                      </a>            
                     </div>          
                  </div>

                </div>

              </li>

            </ul>

          </li>

        </ul>
        <!-- END ORGANIGRAM-->
      </div>
    </div>

CSS:

.tree ul {
  display: flex;
  overflow-x: unset;
  padding-top: 20px; 
  position: relative;
  transition: all 0.5s;
  -webkit-transition: all 0.5s;
  -moz-transition: all 0.5s;
}

.tree li {
    float: left; 
    text-align: center;
    list-style-type: none;
    position: relative;
    padding: 20px 6px 0 5px;
    transition: all 0.5s;
    -webkit-transition: all 0.5s;
    -moz-transition: all 0.5s;
}

/*We will use ::before and ::after to draw the connectors*/

.tree li::before, 
.tree li::after{
    content: '';
    position: absolute; 
    top: 0; 
    right: 50%;
    border-top: 1px solid #ccc;
    width: 50%; 
    height: 20px;
}

.tree li::after{
    right: auto; 
    left: 50%;
    border-left: 1px solid #ccc;
}

/*We need to remove left-right connectors from elements without 
any siblings*/
.tree li:only-child::after, 
.tree li:only-child::before {
    display: none;
}

/*Remove space from the top of single children*/
.tree li:only-child{ 
  padding-top: 0;
}

/*Remove left connector from first child and 
right connector from last child*/
.tree li:first-child::before, 
.tree li:last-child::after{
    border: 0 none;
}

/*Adding back the vertical connector to the last nodes*/
.tree li:last-child::before{
    border-right: 1px solid #ccc;
    border-radius: 0 5px 0 0;
    -webkit-border-radius: 0 5px 0 0;
    -moz-border-radius: 0 5px 0 0;
}
.tree li:first-child::after{
    border-radius: 5px 0 0 0;
    -webkit-border-radius: 5px 0 0 0;
    -moz-border-radius: 5px 0 0 0;
}

/*Time to add downward connectors from parents*/
.tree ul ul::before{
    content: '';
    position: absolute; top: 0; left: 50%;
    border-left: 1px solid #ccc;
    width: 0; height: 20px;
}

.tree li a{
    border: 1px solid #ccc;
    padding: 6px 10px;
    text-decoration: none;
    color: #666;
    font-family: arial, verdana, tahoma;
    font-size: 11px;
    display: inline-block;
    cursor: pointer;
    border-radius: 5px;
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;

    transition: all 0.5s;
    -webkit-transition: all 0.5s;
    -moz-transition: all 0.5s;
}

/*Time for some hover effects*/
/*We will apply the hover effect the the lineage of the element also*/
.tree li a:hover, 
.tree li div:hover+ul li a {
    background: #c8e4f8; 
    color: #000 !important; 
    border: 1px solid #94a0b4;
}

/*Connector styles on hover*/
.tree li div:hover+ul li::after, 
.tree li div:hover+ul li::before, 
.tree li div:hover+ul::before, 
.tree li div:hover+ul ul::before{
  border-color:  #94a0b4;
}

.tree li a hr{
  margin-top:0.5rem;
  margin-bottom:0.5rem;
}

.tree div.dropdown { 
  display:inline-block; 
}

.tree .dropdown-toggle::after{
  content:none;
 }

.tree div.dropdown-menu{
  border: none;
  background-color: unset;
  box-shadow: none;
  min-width: 0;
  padding: 0;
  margin: 0;
  left: unset !important;
  right: -37px;
  transform: translate3d(0, 0, 0) !important;
}

CodePen

enter image description here

Спасибо

ОБНОВЛЕНИЕ:

Добавление стиля min-width: к тегам a решает проблему.

1 Ответ

1 голос
/ 28 февраля 2020

Проблема, с которой вы столкнулись, вызвана тем, что во втором div есть pt-1 class, а в первом div.

* 1007 такого class нет. *pt-1 имеет правило
.pt-1, .py-1 {
    padding-top: .25rem!important;
}

, которое вызывает проблему, поскольку из-за этого padding-top необходим больший размер для правильного отображения элемента. Измените правило на

.pt-1, .py-1 {
    margin-top: .25rem!important;
}

Использование mt-1 вместо pt-1

enter image description here

РЕДАКТИРОВАТЬ

enter image description here

enter image description here

...