Semantic-UI Float right of an elem in Segment

guillaumek picture guillaumek · Sep 26, 2016 · Viewed 11.2k times · Source

I have a problem with the Segments in Semantic UI. I have a dynamic list of elements where I put a segment class and inside, I display some data and some icons. My problem is I can't push the icons to the right after the title. (they are span to stay in the same line)

    .ui.segments.piled
      if currentUser
        .ui.segment
            form.new-list.ui.transparent.icon.input.fluid
                i.icon.edit
                input(type="text" name="text" placeholder="Add List")
      each lists
        .ui.segment.listitem.list-selected
          span.text #{text}
          if isOwner
            span#editlist
                i.fa.fa-edit
            span
                i.icon.delete.ui.red
            span.toggle-list-private
                if private
                    i.fa.fa-lock.private-lock
                else
                    i.fa.fa-unlock.public-lock
        .ui.teal.label
            span {{incompleteCount this._id}}

enter image description here

I tried .floated.right and .aligned.right but nothing is working ... I would like to push all the icons and stick it to the right side.

Thanks for the help

Answer

Sarthak picture Sarthak · Sep 26, 2016

If you can edit your structure, try the following approach:

JS Fiddle: https://jsfiddle.net/batrasoe/51o0hv12/

<div class="ui segment listitem block">
    <span class="text"> Text</span>
    <span class="others">
        <span class="editList">
            <i class="ui edit icon"></i>
        </span>
        <span>
            <i class="right icon delete ui red"></i>      
        </span>
        <span class="toggle-list-private">
            <i class="ui lock icon"></i>
        </span>
        <span class="ui teal label"></span>
    </span> 
</div>

If you wrap your other elements apart from text in a separate span, the problem simply becomes to align two spans inside a div so one floats left, and the other floats right.

With the following CSS:

.text {
  float: left;
}

.others { 
  float: right;
}

.block:after {
  content: ":"
}