整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          神奇的html錨點,讓你的網頁在內部自由的跳轉

          起html的錨點這個概念,你可能會感到會陌生,感覺自己沒有聽過。但是如果說起它的作用,你可能就恍然大悟了,就像你說起一個演員,可能不知道是誰,但是說起它演的一個角色可能立馬就知道那個人是誰了。

          那么,什么是錨點呢?

          錨點存在于html中,在默認情況下,可以快速的定位到指定元素,并將元素置于頁面最頂端。當然我們可以按照自己的需求來確定錨點的位置,不一定要讓其定位在頂部。現如今有無數多的頁面已經用上了錨點,比如Vue.js的官網,在我們點擊標題“Vue.js是什么”和標題“起步”的時候,標題都會自動移到頁面頂端。

          錨點的使用

          那接下來,我們就來看看幾種錨點的使用方法。

          • id定位

          最基本的使用方法如下,當點擊<a>標簽時,頁面會相應的將該div內容置頂

          錨點的id定位方法

          • name定位

          除了id,還可以通過name進行定位,不過需要主要的是,如果采用name屬性進行定位的話,只適用于a標簽,類似于p標簽等都不支持。

          錨點的name定位方法

          • javascript代碼進行定位

          在原生的javascript中,有一個scrollIntoView()方法,可以實現頁面的錨點

          javascript方法實現錨點

          • 一個綜合的例子

          講了三種實現方法后,接下來看一個實際運用的例子。首先是實際效果圖,在點擊左側欄時,頁面右邊會相應的顯示指定段落的內容

          錨點的實際使用

          首先看下html頁面的內容,左側的ul代碼

          左側的ul代碼

          右側的內容部分代碼

          右側內容部分代碼

          css部分的代碼

          css部分的代碼

          將上述的代碼寫在一個html文件中,便可實現左側欄點擊,右側欄顯示相應內容的效果。

          • 特殊情況

          在實際項目中,我們總會遇到這樣一種情況,在頁面頂部有固定頭內容的時候,如果直接使用上述方法,會得不到想要的效果

          直接使用錨點的效果圖

          通過該圖可以看出,第三段內容的標題被遮住了,實際應該往下再顯示一點

          那么,我們該怎么解決這個問題呢?在這里我想到了兩種方法,第一種是在每個內容div上加一個隱藏的p元素,給p元素一個定高,再向上偏移,這種方法會導致頁面出現很多個多余的p元素,不推薦使用。

          第二種是利用偽元素,偽元素可以占用實際的高度,這是推薦使用的方法

          偽元素的樣式

          通過給h3標簽添加偽元素樣式,可完美解決這個問題,效果圖如下

          使用偽元素后的效果圖

          • 總結

          今天的內容你會了么?如果還沒有掌握的話,可以按照文章中的代碼,進行實踐,代碼總是要多敲才更容易理解。

          如果喜歡的話,記得關注小編噢,小編后續會堅持出更多技術性的文章,如果有任何問題,也歡迎提問,小編都會盡力解答的。

          日常項目中,界面布局上經常使用到側邊欄的方式,在側邊欄放置控件進行復合使用,可以實現子功能界面的隱藏和滑出,效果展示如下:

            界面控件很簡單,主界面QWidget,側邊欄也用一個QWidget和一個按鈕QPushbutton來進行組合。通過點擊按鈕來顯示和隱藏側邊欄。主要用到的是控件的move()函數,配合QPropertyAnimation實現動畫效果滑動顯示隱藏。動畫滑出動畫效果使用到的是QPropertyAnimation類的setEasingCurve()函數,通過設置函數參數來實現不同的動畫效果,具體效果可以通過Qt Create的幫助文件查詢到。

          Qt開發必備技術棧學習路線和資料

          迎來到《真香,30天做一套wordpress主題》系列文章,我們的目標是(沒有蛀牙!)建立一套全新的wordpress主題,花上30天的時間閉關修煉,如果你看到的第一篇文章不是《基礎框架搭建》,建議你關注我們(數字江湖異志錄),從該系列的第一篇開始閱讀。

          我們將盡量保持文章的循序漸進和通俗易懂,請確保自己已經掌握了那一篇文章的全部內容時才選擇跳過,不然可能會錯過關鍵的信息噢~

          這里我們假定你已經知曉了以下基礎知識,這些基礎知識對理解文章內容是至關重要的:

          1. HTML/CSS/JS基礎

          2. PHP基礎

          3. 如何使用Wordpress

          4. 如何搭建web環境

          如果你已經知曉了以上基礎知識,恭喜你,本系列的任何文章內容對你而言都沒有什么難度。

          偉大的側邊欄

          今天我們開始制作主題的側邊欄(sidebar),wordpress可以把小工具(widgets)放到側邊欄里,我們先為主題開啟側邊欄功能,在functions.php里添加如下代碼:

          function?my_sidebar_registration()?{
          
          ????register_sidebar(array(
          
          ????????'name'?=>?__(?'Sidebar'),
          
          ????????'id'?=>?'sidebar-1',
          
          ????));
          
          }
          
          add_action(?'widgets_init',?'my_sidebar_registration'?);

          我們就可以后臺看到官方默認的一些widgets了,當然,我們還會需要自定義widgets,但是現在,我們先對這些默認widgets提供支持:

          看上去有點多,不過沒關系,只要把小工具的通用容器設計好了,很多內容都是重復的。我們首先配上一個Categories小工具,然后在首頁側邊欄的位置顯示出來。

          ????????????<aside?class="sidebar">
          
          ????????????????<?php?dynamic_sidebar('my-sidebar');??>
          
          ????????????</aside>

          這里對于官方的小工具,我們不去動它的DOM結構,只通過CSS進行樣式描述就可以了:

          還記得我們的my_sidebar_registration嗎?我們在里面把一些官方的小工具在我們的主題里去掉,比如image audio video這些,會破壞AMP的規則,其它的暫時沒用到的我們也屏蔽了:

          ????unregister_widget('WP_Widget_Media_Audio');???//?remove?audio
          
          ????unregister_widget('WP_Widget_Media_Video');???//?remove?video
          
          ????unregister_widget('WP_Widget_Media_Image');???//?remove?image
          
          ????unregister_widget('WP_Widget_Media_Gallery');???//?remove?galley
          
          ????unregister_widget('WP_Widget_Calendar');???//?remove?calendar
          
          ????unregister_widget('WP_Nav_Menu_Widget');???//?remove?nav?menu
          
          ????unregister_widget('WP_Widget_Pages');???//?remove?pages?menu
          
          ????unregister_widget('WP_Widget_RSS');???//?remove?rss
          
          ????unregister_widget('WP_Widget_Text');???//?remove?text
          
          ????unregister_widget('WP_Widget_Tag_Cloud');???//?remove?tag?cloud
          
          

          鑒于我們需要amp-form保證頁面的amp屬性,只能把搜索小工具也給移除了,然后我們來手寫一個自定義搜索小工具,這里我們為了偷懶直接從wordpress源文件里復制一個WP_Widget_Search修改使用。

          第一步,引入amp-form文件(header.php):

          <script?async?custom-element="amp-form"?src="https://cdn.ampproject.org/v0/amp-form-0.1.js"></script>

          第二步,建立自定義搜索小工具類(functions.php):

          class?my_search?extends?WP_Widget?{
          
          ????public?function?__construct()?{
          
          ????????$widget_ops?=?array(
          
          ????????????'classname'???????????????????=>?'widget_search',
          
          ????????????'description'?????????????????=>?__(?'A?search?form?for?your?site.'?),
          
          ????????????'customize_selective_refresh'?=>?true,
          
          ????????);
          
          ????????parent::__construct(?'search',?_x(?'Search',?'Search?widget'?),?$widget_ops?);
          
          ????}
          
          ????public?function?widget(?$args,?$instance?)?{
          
          ????????$title?=?!?empty(?$instance['title']?)???$instance['title']?:?'';
          
          ????????$title?=?apply_filters(?'widget_title',?$title,?$instance,?$this->id_base?);
          
          ????????echo?$args['before_widget'];
          
          ????????if?(?$title?)?{
          
          ????????????echo?$args['before_title']?.?$title?.?$args['after_title'];
          
          ????????}
          
          ????????echo?
          
          ????????'<form?target="_top"?role="search"?method="get"?class="search-form"?action="/">
          
          ????????????<input?type="text"?class="search-field"?placeholder="'?.?esc_attr_x(?'Search?…',?'placeholder'?)?.?'"?value="'?.?get_search_query()?.?'"?name="s"?/>
          
          ????????????<button?type="submit"?class="search-submit"></button>
          
          ????????</form>';
          
          ????????echo?$args['after_widget'];
          
          ????}
          
          ????public?function?form(?$instance?)?{
          
          ????????$instance?=?wp_parse_args(?(array)?$instance,?array(?'title'?=>?''?)?);
          
          ????????$title????=?$instance['title'];
          
          ?????????>
          
          ????????<p><label?for="<?php?echo?$this->get_field_id(?'title'?);??>"><?php?_e(?'Title:'?);??>?<input?class="widefat"?id="<?php?echo?$this->get_field_id(?'title'?);??>"?name="<?php?echo?$this->get_field_name(?'title'?);??>"?type="text"?value="<?php?echo?esc_attr(?$title?);??>"?/></label></p>
          
          ????????<?php
          
          ????}
          
          ????public?function?update(?$new_instance,?$old_instance?)?{
          
          ????????$instance??????????=?$old_instance;
          
          ????????$new_instance??????=?wp_parse_args(?(array)?$new_instance,?array(?'title'?=>?''?)?);
          
          ????????$instance['title']?=?sanitize_text_field(?$new_instance['title']?);
          
          ????????return?$instance;
          
          ????}
          
          }

          這里我們需要知道,__construct構造函數對這個小工具的基本信息進行了描述,form方法定義了后臺添加小工具時看到的選項,update方法定義了更新小工具設置時數據的更新,widget方法定義了小工具在前臺的展現結構。


          第三步,注冊這個小工具:

          register_widget('my_search');
          
          

          最后我們就可以在后臺使用我們自定義的搜索小工具了,添加后到頁面上看看:

          這里有一個要特別注意的地方,amp-form對action里的url是有要求的,雖然可以是完整的url也可以是絕對路徑,但是最終使用的action url必須是https協議的,否則無法通過amp checker的檢測。


          總結和預告

          今天我們完成了側邊欄的開發,并且創建了屬于我們的自定義小工具,通過定義通用css樣式,大多數的小工具都直接美化好了,對于不能用的官方小工具,我們先直接屏蔽了

          明天我們將稍加休整一下,完成頁面的通用底部,實現頂部菜單的二級展開,做一些細節上的優化。

          如果你喜歡這個系列的文章,趕快關注我們(數字江湖異志錄)吧,不要錯過后續的更多干貨噢。


          主站蜘蛛池模板: 国产一区麻豆剧传媒果冻精品| 亚洲中文字幕无码一区二区三区| 国产人妖视频一区二区破除| 综合久久一区二区三区 | 变态拳头交视频一区二区| 国产亚洲一区二区手机在线观看| 99在线精品一区二区三区| 538国产精品一区二区在线| 亚洲日本一区二区| 波多野结衣一区在线观看| 亚洲av鲁丝一区二区三区| 国产免费播放一区二区| 在线播放国产一区二区三区 | 国产91精品一区二区麻豆网站| 国产AV一区二区三区传媒| 久久久久人妻精品一区三寸蜜桃| 国产精品被窝福利一区 | 竹菊影视欧美日韩一区二区三区四区五区| 在线免费一区二区| 中日韩精品无码一区二区三区 | 亚洲一区二区三区夜色| 中文字幕AV一区二区三区人妻少妇 | 国产福利电影一区二区三区久久久久成人精品综合 | 久久一本一区二区三区| 国产伦精品一区二区三区女| 国产一区二区三区在线免费| 久久精品国产免费一区| 天堂Av无码Av一区二区三区| 一区二区三区四区国产| 91精品福利一区二区| 国产成人无码精品一区在线观看 | 精品久久久久中文字幕一区| 中字幕一区二区三区乱码| 在线观看国产区亚洲一区成人 | 在线观看精品视频一区二区三区 | 亚洲AV日韩综合一区尤物| 亚洲毛片αv无线播放一区| 日本高清天码一区在线播放| 日韩人妻无码一区二区三区99| 日本一区二区三区在线视频| 天堂va在线高清一区|