【问题标题】:Can I get span element to ignore columns?我可以让 span 元素忽略列吗?
【发布时间】:2017-09-11 22:03:58
【问题描述】:

我正在创建一个网络应用程序,其中用户将包含单词/短语的框拖到一个区域中。当用户将鼠标悬停在框上时,会显示一个带有单词定义的工具提示。当用户将框拖入区域时,我希望它们分为两列。但是,在使用列时,工具提示会在越过区域边缘时中断。有没有办法解决这个问题?

How tooltips are at the moment

How I would like them to be

#div1 {
  float: left;
  width: 328px;
  height: 400px;
  margin-left: 4px;
  padding: 10px;
  border: 1px solid black;
  border-radius: 6px;
  background-color: white;
  -webkit-columns: 2;
  -moz-columns: 2;
  columns: 2;
  -moz-column-fill: auto;
  column-fill: auto;
}

.box {
  height: 54px;
  width: 160px;
  text-align: center;
  background-color: white;
  color: purple;
  border: 1px solid black;
  border-radius: 4px;
  margin-bottom: 2px;
  position: relative;
  text-align: center;
}

.tooltiptext {
  visibility: hidden;
  width: 160px;
  background-color: purple;
  color: #fff;
  text-align: center;
  border-radius: 6px;
  padding: 5px 0;
  position: absolute;
  z-index: 1;
  top: 100%;
  left: 50%;
  margin-left: -80px;
}

.box:hover .tooltiptext {
  visibility: visible;
}
<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)">
  {% for c in cards1 %}
  <div id="drag{{c.id}}-{{c.carddata.position}}" class="box" draggable="true" ondragstart="drag(event)">
    <span class="tooltiptext">{{c.carddata.description}}</span>
    <div id="text{{c.id}}-{{c.carddata.position}}" class="text"><br>{{c.carddata.name}}</div>
  </div>
  {% endfor %}
</div>

【问题讨论】:

    标签: html css django tooltip css-multicolumn-layout


    【解决方案1】:

    如果您将.boxdisplay 重置为inline-block,它将不会跨越到下一列:

    #div1 {
      float: left;
      width: 328px;
      height: 250px;
      margin-left: 4px;
      padding: 10px;
      border: 1px solid black;
      border-radius: 6px;
      background-color: white;
      -webkit-columns: 2;
      -moz-columns: 2;
      columns: 2;
      -moz-column-fill: auto;
      column-fill: auto;
    }
    
    .box {
    display:inline-block;/* to keep in a single column */
      height: 54px;
      width: 160px;
      text-align: center;
      background-color: white;
      color: purple;
      border: 1px solid black;
      border-radius: 4px;
      margin-bottom: 2px;
      position: relative;
      text-align: center;
    }
    
    .tooltiptext {
      visibility: hidden;
      width: 160px;
      background-color: purple;
      color: #fff;
      text-align: center;
      border-radius: 6px;
      padding: 5px 0;
      position: absolute;
      z-index: 1;
      top: 100%;
      left: 50%;
      margin-left: -80px;
    }
    
    .box:hover .tooltiptext {
      visibility: visible;
    }
    <div id="div1">
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
    </div>

    由于您使用固定高度,您可能还需要考虑在父级上设置这些规则的 flex 方法

      display:flex;
      flex-flow:column wrap;
    

    (列 CSS 仍处于实验状态,似乎不再进化)

    #div1 {
      float: left;
      width: 328px;
      height: 250px;
      margin-left: 4px;
      padding: 10px;
      border: 1px solid black;
      border-radius: 6px;
      background-color: white;
       display:flex;
      flex-flow:column wrap; 
    }
    
    .box {
      height: 54px;
      width: 160px;
      margin:0 5px 0 0;
      text-align: center;
      background-color: white;
      color: purple;
      border: 1px solid black;
      border-radius: 4px;
      margin-bottom: 2px;
      position: relative;
      text-align: center;
    }
    
    .tooltiptext {
      visibility: hidden;
      width: 160px;
      background-color: purple;
      color: #fff;
      text-align: center;
      border-radius: 6px;
      padding: 5px 0;
      position: absolute;
      z-index: 1;
      top: 100%;
      left: 50%;
      margin-left: -80px;
    }
    
    .box:hover .tooltiptext {
      visibility: visible;
    }
    <div id="div1">
     
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
      <div  class="box">
        <span class="tooltiptext">c.carddata.description c.carddata.description c.carddata.description c.carddata.description c.carddata.description</span>
        <div class="text">c.carddata.name<br/>c.carddata.name</div>
      </div>
    </div>

    【讨论】:

    • 抱歉,没用。当我添加 display: inline-block 时,它会将框分成两行,并且工具提示仍然溢出列。
    • @Seamang64 是哪个浏览器? sn-p 是否具有您描述的相同行为? display:inline-block 是为了避免盒子打破并跨越到不同的列。列 CSS 从未最终确定,仍处于试验阶段(grid 和 flex 正在接管)。你会考虑使用 flex/flex-flow:column wrap 吗? codepen.io/gc-nomade/pen/vJQMja
    • 我一直在使用 chrome。我现在已经在 Firefox 上进行了测试,它确实在那里工作。您编写的 sn-p 代码适用于 Firefox,但不适用于 chrome。我会试试 flex/flex-flow: column wrap。
    • flex/flex-flow: 列对两者都有效。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多