如何创建一个切换箭头,当您单击箭头时“打开”一个部分以显示文本?

Posted

技术标签:

【中文标题】如何创建一个切换箭头,当您单击箭头时“打开”一个部分以显示文本?【英文标题】:How do I create a Toggle arrow that "opens up" a section to show text as you click on the arrow? 【发布时间】:2020-08-23 10:00:09 【问题描述】:

Toggle when closed

Toggle when opened

我的目标是创建一个如图所示的切换箭头。 “关闭”状态包括一行文本,旁边有一个图标以及触发切换的箭头。 “打开”状态包括几行文本和一张图片(与屏幕截图中显示的有点不同,但我真正纠结的只是动画部分)。

我正在使用来自 html5 Up 的模板,该模板在菜单栏中包含类似的切换,因此我尝试复制不起作用的相应 HTML 和 CSS 代码。没有错误消息,网站上也没有出现切换开关(请参阅下面的 sn-p 了解 CSS)。

<span class="opener">Text that appears next to toggle arrow</span>

有没有办法用 HTML 和 CSS 来做到这一点,还是需要 javascript

 #menu ul a.opener, #menu ul span.opener 
      -moz-transition: color 0.2s ease-in-out;
      -webkit-transition: color 0.2s ease-in-out;
      -ms-transition: color 0.2s ease-in-out;
      transition: color 0.2s ease-in-out;
      text-decoration: none;
      -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
      position: relative; 
      
      #menu ul a.opener:before, #menu ul span.opener:before 
        -moz-osx-font-smoothing: grayscale;
        -webkit-font-smoothing: antialiased;
        display: inline-block;
        font-style: normal;
        font-variant: normal;
        text-rendering: auto;
        line-height: 1;
        text-transform: none !important;
        font-family: 'Font Awesome 5 Free';
        font-weight: 900; 
        
      #menu ul a.opener:before, #menu ul span.opener:before 
        -moz-transition: color 0.2s ease-in-out, -moz-transform 0.2s ease-in-out;
        -webkit-transition: color 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;
        -ms-transition: color 0.2s ease-in-out, -ms-transform 0.2s ease-in-out;
        transition: color 0.2s ease-in-out, transform 0.2s ease-in-out;
        color: #9fa3a6;
        content: '\f078';
        position: absolute;
        right: 0; 
        
      #menu ul a.opener:hover:before, #menu ul span.opener:hover:before 
        color: #015a9d; 
        
      #menu ul a.opener.active + ul, #menu ul span.opener.active + ul 
        display: block; 
        
      #menu ul a.opener.active:before, #menu ul span.opener.active:before 
        -moz-transform: rotate(-180deg);
        -webkit-transform: rotate(-180deg);
        -ms-transform: rotate(-180deg);
        transform: rotate(-180deg); 

【问题讨论】:

【参考方案1】:

您可以使用名为 &lt;details&gt; 的 html5 元素轻松完成此操作

<details>
    <summary>Click here to see something</summary>
    Here's more stuff below :)
</details>

【讨论】:

嘿,非常感谢,这很好用!不敢相信我以前从未遇到过这个元素。【参考方案2】:

详细信息标签应该是首选的方式。但是如果你想让它更花哨或其他原因你不能使用 details 标签,你可以自己创建这样一个下拉列表。

可能是这样的:

CSS

.dropdown 
  postion: relative;


.dropdown-content 
  display: flex;
  flex-direction: column;
  width: fit-content;
  border: 1px solid transparent;
  position: absolute;
  opacity: 0;
  background: white;
  z-index: 9;
  transition: height 0.5s ease;
  transition: opacity 0.3s ease;
  height: 0;
  overflow: hidden;


.dropdown.active .dropdown-content 
  opacity: 1;
  height: fit-content;
  border-color: gray;


.dropdown-trigger > i > svg 
  width: 0.7rem;
  height: 0.7rem;
  transform: rotate(90deg);
  transition: all 0.3s ease;


.dropdown.active .dropdown-trigger > i > svg 
  width: 0.7rem;
  height: 0.7rem;
  transform: rotate(-90deg);

HTML

<div class="dropdown">
  <button class="dropdown-trigger"> <i><svg xmlns="http://www.w3.org/2000/svg"   viewBox="0 0 24 24">
        <path d="M5 3l3.057-3 11.943 12-11.943 12-3.057-3 9-9z" /></svg></i> Open</button>
  <span class="dropdown-content">
    <p>lorem ipsum</p>
    <p>lorem ipsum</p>
    <p>lorem ipsum</p>
    <p>lorem ipsum</p>
  </span>
</div>

https://codepen.io/bluebrown/pen/qBZRaVX?editors=0100

【讨论】:

您好,非常感谢您的建议!可悲的是,无论是在我的网页上还是在 codepen 中,您编写的代码都不会触发切换——我可以按下按钮,但没有任何反应,没有展开,也没有显示文本。我错过了什么吗?第一个 CSS 代码行的“position”中缺少一个“i”,但这并没有解决。

以上是关于如何创建一个切换箭头,当您单击箭头时“打开”一个部分以显示文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获AutoCompleteTextView箭头单击事件

arcgis编辑状态下如何把黑箭头变成十字架

Microsoft Access 组合框箭头隐藏的矩形再次出现

怎样切换打印机?

如何在 Xamarin IOS 自定义渲染器中单击 UITextField Rightview 打开 UIPickerView

在Vue js中单击每个表头时如何显示升序和降序箭头图像?