天最近聽說,有天文學家首次觀測到了具有穩定周期的快速射電暴(FRB),這也是唯一已知的此類快速射電暴,以16天為周期循環出現,對該快速射電暴的發現和解釋一旦確認,或將會帶來革命性影響。聽起來這么厲害,自然要來解讀一番,聽聽國家天文臺陳學雷研究員怎么說~
Q:什么是快速射電暴?最早是什么時候發現的?
陳學雷:快速射電暴(英文簡稱FRB)是一種在天空中突然出現的射電爆發,短時間內可以達到相當高的亮度,但一般持續時間只有毫秒量級。
這種現象最初是美國天文學家洛里默(Lorimer)在分析澳大利亞帕克斯(Parkes)望遠鏡于2001年進行觀測記錄的數據時發現的。洛里默在2007年發表了這一結果,但因為當時只有一個孤例,因此人們對于其真實性還持懷疑態度。2012年到2013年前后,人們又發現了多起類似事件,特別是索頓(Thorton)等人在2013年的論文中公布了4例FRB后,人們認識到這應該是種常見現象,于是開始積極搜尋FRB,目前已經發現了很多。
圖1:由Duncan Lorimer發現的第一個快速射電暴FRB 010724 (Lorimer et al. 2007, Science, 318, 777L)
Q:這次發現的快速射電暴有哪些特點?
陳學雷:此前人們觀測到的大部分快速射電暴是不重復的,少數雖然重復爆發,但爆發的時間是隨機的,看不出明顯的規律性。這次的FRB是最早于2018年發現的,經過從2018年9月16日到2019年10月31日的持續觀測,加拿大CHIME FRB團隊發現其爆發中存在顯著的周期性,周期為16.35天。也就是說,每隔16.35天,就會有一段爆發比較頻繁發生的時間。
圖2:CHIME望遠鏡
Q:它的源頭是位于約5億光年外的一個漩渦星系中,科學家是如何判斷它的位置的?
陳學雷:對于快速射電暴,目前在首次發現的時候人們往往并不能精確定位,這是因為發現射電暴的望遠鏡往往追求大視場,相當于廣角鏡頭,角分辨率一般不是很高,只是粗略知道其方位。這時也可以從單次觀測數據中粗略估計其距離,因為電波在穿過宇宙空間中的等離子體時會發生色散現象,也就是說頻率高的信號會比頻率低的信號早一點到達,傳播的距離越遠,穿過的等離子體越多,色散就會越強烈。因此根據不同頻率信號到達的時間差,就可以估計出色散量,進而估計其距離,但是這種估計往往有較大誤差,因為等離子體的分布并不是完全均勻的,有的地方多一些,有的地方少一些。
圖3:不同頻率電磁波受色散影響,到達探測器的時間不同 圖片來自:https://phys.org/news/2018-04-fast-radio.html
對于重復射電暴,人們既然知道其頻繁發生,就可以調用角分辨率更高的望遠鏡進行監視,從而更精確地測定其方位。像這一個,人們對它的角測量精度就足夠高,從而能看出它在某個旋渦星系中。
Q:目前認為快速射電暴的產生與什么有關?為什么?
陳學雷:目前人們還不能完全確定快速射電暴的產生機制,學者們已經提出了幾十種不同的理論模型。不過,大部分理論模型與致密天體特別是中子星有關。這是因為,快速射電暴持續時間非常短,亮度又非常高,這要求有一種能在很短時間、很小的空間尺度上釋放大量能量的機制,而且我們往往看到射電輻射而沒有看到其它波段的輻射,說明這種輻射不是通常的高溫輻射,而是一種相干激發的電磁場輻射。
中子星體積小(半徑是幾十公里量級)、密度高、快速旋轉,并往往伴有極高強度的磁場,如果產生這種強烈的相干輻射是不太令人意外的。當然,目前這仍然還是一些假說,到底是不是由中子星產生的輻射,產生的具體機制,有沒有多種起源,這些問題都還需要進一步研究。
Q:研究快速射電暴有哪些難點?此次發現穩定周期快速射電暴有哪些意義?
陳學雷:現在已公布的重復快速射電暴已經有二十多個了,另外據說還有一些尚未公布。那些未重復的快速射電暴是真的完全不重復?還是其實也重復但只是因為發生頻率太低沒有被發現?目前我們還并不清楚。當然,研究快速射電暴的一個難點就在于從單個事件數據里能推測出的信息太少,所以重復暴具有很大價值,一方面更精確的定位使我們了解它所處的星系和在星系中的位置,另一方面從其重復爆發的亮度、時間等分布也可以分析其爆發機制。
此次發現的穩定周期當然很有意義。我們知道,天文學的起源其實就來自人類對周期性的認識:日出日落、月亮的盈缺、四季的變換、行星的會合等等,因此可以說周期性是天文學家最重要的觀測線索之一。就本次而言,如何產生這種十幾天的周期性?人們目前有一些不同的推測:有可能快速射電暴的源是處在雙星系統中的中子星,那么雙星的公轉就提供了一種周期性的起源;孤立的中子星也有可能存在轉動軸的進動,從而導致周期性。這些都有待進一步的研究驗證,但顯然這種周期性提供了重要的線索。(蔡琳)
受訪專家:陳學雷,中國科學院國家天文臺研究員,主要從事暗物質、暗能量、星系大尺度結構等宇宙學研究。
次向大家介紹一個checkbox和radio美化插件checkRadio.js, 為什么只有checkbox和radio美化? 因為input文本框,按鈕,文件選擇我們都可以通過簡單的css就可以美化,唯獨checkbox復選框,radio單選框,下拉菜單,滾動條不容易美化, 下拉菜單有了 easydropdown.js 就夠了 ,那么我們就只需要 checkbox和radio美化就行了。
該插件已經被用到項目中,比較不錯。
插件地址
http://www.qieban.cn/p/checkRadio.js/
切版qieban.cn,靠譜、高性價比前端切圖外包選擇。
adio、checkbox和switch應該是一個比較常用的html標簽,尤其是在中后臺ERP系統里面更為常見。不過瀏覽器自帶的樣式不怎么好看,而且不同瀏覽器效果也不一樣。出于美化和統一視覺效果的需求,自定義樣式就被提出來了。
純css實現的主要手段是利用label標簽的模擬功能。label的for屬性可以關聯一個具體的input元素,即使這個input本身不可被用戶可見,有個與它對應的label后,用戶可以直接通過和label標簽交互來替代原生的input——而這給我們的樣式模擬留下了空間。簡而言之就是:
隱藏原生input,樣式定義的過程留給label (那為什么不直接改變checkbox的樣式?因為checkbox作為瀏覽器默認組件,樣式更改上并沒有label那么方便,很多屬性對checkbox都是不起作用的,比如background,而label在樣式上基本和div一樣'任人宰割')
而在選擇事件上,由于css的“相鄰選擇符(E+F)”的存在,讓我們可以直接利用html的默認checkbox,免去了js模擬選擇的麻煩。
DEMO的部分CSS3屬性只寫了webkit前綴,所以建議用webkit內核的瀏覽器查看本頁案例,當然只要你給樣式補上對應的瀏覽器前綴,就可以實現更多樣式匹配
HTML代碼:
<!-- input的id必須有,這個是label進行元素匹配所必需的 --> <!-- 可以看到每個input的id和label的“for”屬性對應同一字符串 --> <input type="checkbox" id="checkbox01" /> <label for="checkbox01"></label> <input type="checkbox" id="checkbox02" /> <label for="checkbox02"></label> <input type="checkbox" id="checkbox03" /> <label for="checkbox03"></label> <input type="checkbox" id="checkbox04" /> <label for="checkbox04"></label>
HTML構建完成,接下來是對應的css:
/* 隱藏所有checkbox */ input[type='checkbox'] { display: none; } /* 對label進行模擬.背景圖片隨便拼湊的,不要吐槽品味*/ /* transition效果是做個背景切換效果,這里單純演示而已,實際上這個過渡不加更自然*/ label { display: inline-block; width: 60px; height: 60px; position: relative; background: url(//www.chitanda.me/images/blank.png); background-position: 0 0px; -webkit-transition: background 0.5s linear; } /* 利用相鄰選擇符和checkbox`:checked`的狀態偽類來模擬默認選中效果(就是點擊后那個勾號的效果) */ /*如果這段代碼注釋,點擊后將沒有任何反饋給用戶*/ /*因為label本身是沒有點擊后被選中的狀態的,checkbox被隱藏后,這個狀態只能手動模擬*/ input[type='checkbox']:checked+label { background-position: 0 -60px; }
上面代碼看起來好像也可以了。不過仔細想想,貌似缺了點什么:選項對應的提示文字
對css不了解的新人可能這時候第一反應就是在label后面用p標簽或者span標簽來添加文字。不過這種方式都不怎么優雅。個人建議用css的::before和::after偽元素(::before和:before是一個東西。不過為了把“偽元素”和“偽類”區分出來,W3C建議的寫法是偽元素用::而偽類用:)
/* 偽元素的生效很簡單,定義`content`就好,其余的屬性和普通div一樣 */ label::after { content: attr(data-name); /*利用attr可以減少css代碼量,data-name寫在html部分的label屬性里*/ display: inline-block; position: relative; width: 120px; height: 60px; left: 100%; vertical-align: middle; margin: 10px; }
當然既然可以用::after模擬label的文字,那也就可以用::before模擬label的checkbox樣式,這里就不做解析了。
這里提一下偽類和偽元素的區分:
1)偽類:存在的意義是為了通過選擇器找到那些不存在于DOM樹中的信息以及不能被常規CSS選擇器獲取到的信息。 偽類由一個冒號:開頭,冒號后面是偽類的名稱和包含在圓括號中的可選參數。
常用的偽類:
:active 向被激活的元素添加樣式。 :focus 向擁有鍵盤輸入焦點的元素添加樣式。 :hover 當鼠標懸浮在元素上方時,向元素添加樣式。 :link 向未被訪問的鏈接添加樣式。 :visited 向已被訪問的鏈接添加樣式。 :first-child 向元素的第一個子元素添加樣式。 :checked 向選中的控件元素添加樣式
2)偽元素:偽元素在DOM樹中創建了一些抽象元素,這些抽象元素是不存在于文檔語言里的(可以理解為html源碼);
注意: css3為了區分偽類和偽元素,規定偽類前面有一個冒號,偽元素前面有兩個冒號
常用偽元素:
關于偽元素的講解,可以參考CSS偽類與偽元素總是傻傻分不清,這份總結夠面試用了
::before 為作用元素的第一個子節點插入dom中 ::after 為作用元素的最后一個子節點插入dom中
自定義radio
html代碼:
<input type="radio" id="radio"> <label for="radio"></label>
css代碼:
input{ display:none; } label { display: inline-block; width: 30px; height: 30px; border: 1px solid #333; border-radius: 50%; position: relative; } label::after { -webkit-transition: all .5s ease; -moz-transition: all .5s ease; -o-transition: all .5s ease; -ms-transition: all .5s ease; transition: all .5s ease; cursor: pointer; position: absolute; width: 16px; height: 16px; border-radius: 50%; top: 50%; left: 50%; margin-top:-8px; margin-left:-8px; z-index: 1; content: ''; border:1px solid #333; } input:checked+label::after{ background:red; }
實現效果:
點擊前和點擊后:
自定義checkbox
漂亮的checkbox長這樣的,看著就很可愛
我們可以不追求那么完美的樣式,可以實現下面簡單好看的樣式就可以
html代碼:
<input type="checkbox" id="checkbox"> <label for="checkbox"></label>
css代碼:
input{ display:none; } label { display: inline-block; width: 30px; height: 30px; border: 1px solid #333; position: relative; } label::after { -webkit-transition: opacity .5s ease; -moz-transition: opacity .5s ease; -o-transition: opacity .5s ease; -ms-transition: opacity .5s ease; transition: opacity .5s ease; cursor: pointer; position: absolute; content: ''; opacity: 0; } input:checked+label::after{ border: 2px solid #d73d32; border-top: none; border-right: none; -webkit-transform: rotate(-45deg); -ms-transform: rotate(-45deg); transform: rotate(-45deg); width:20px; height:10px; top:50%; margin-top:-8px; left:50%; margin-left:-10px; opacity: 1.0; }
實現效果:
點擊前和點擊后:
自定義switch
繼續分享一個iOS風格的switch開關按鈕,樣子也非常常見,如圖:
主要是使用了<input ?type="checkbox">來模擬實現,具體的HTML:
html 代碼:
<label><input class="mui-switch" type="checkbox"> 默認未選中</label> <label><input class="mui-switch" type="checkbox" checked> 默認選中</label> <label><input class="mui-switch mui-switch-animbg" type="checkbox"> 默認未選中,簡單的背景過渡效果,加mui-switch-animbg類即可</label> <label><input class="mui-switch mui-switch-animbg" type="checkbox" checked> 默認選中</label> <label><input class="mui-switch mui-switch-anim" type="checkbox"> 默認未選中,過渡效果,加 mui-switch-anim 類即可</label> <label><input class="mui-switch mui-switch-anim" type="checkbox" checked> 默認選中</label>
在實際的使用中后來又增加了兩個過渡效果,分別加?mui-switch-animbg和mui-switch-anim?類即可,具體效果查看下面的demo頁面。
CSS代碼(SCSS導出的,排版有些奇怪):
css 代碼:
剩下部分
這里給出具體的css,方便大家復制本地實現
<style> .mui-switch { width: 52px; height: 31px; position: relative; border: 1px solid #dfdfdf; background-color: #fdfdfd; box-shadow: #dfdfdf 0 0 0 0 inset; border-radius: 20px; border-top-left-radius: 20px; border-top-right-radius: 20px; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; background-clip: content-box; display: inline-block; -webkit-appearance: none; user-select: none; outline: none; } .mui-switch:before { content: ''; width: 29px; height: 29px; position: absolute; top: 0px; left: 0; border-radius: 20px; border-top-left-radius: 20px; border-top-right-radius: 20px; border-bottom-left-radius: 20px; border-bottom-right-radius: 20px; background-color: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); } .mui-switch:checked { border-color: #64bd63; box-shadow: #64bd63 0 0 0 16px inset; background-color: #64bd63; } .mui-switch:checked:before { left: 21px; } .mui-switch.mui-switch-animbg { transition: background-color ease 0.4s; } .mui-switch.mui-switch-animbg:before { transition: left 0.3s; } .mui-switch.mui-switch-animbg:checked { box-shadow: #dfdfdf 0 0 0 0 inset; background-color: #64bd63; transition: border-color 0.4s, background-color ease 0.4s; } .mui-switch.mui-switch-animbg:checked:before { transition: left 0.3s; } .mui-switch.mui-switch-anim { transition: border cubic-bezier(0, 0, 0, 1) 0.4s, box-shadow cubic-bezier(0, 0, 0, 1) 0.4s; } .mui-switch.mui-switch-anim:before { transition: left 0.3s; } .mui-switch.mui-switch-anim:checked { box-shadow: #64bd63 0 0 0 16px inset; background-color: #64bd63; transition: border ease 0.4s, box-shadow ease 0.4s, background-color ease 1.2s; } .mui-switch.mui-switch-anim:checked:before { transition: left 0.3s; } /*# sourceMappingURL=mui-switch.css.map */ </style>
如果你喜歡scss,那么代碼更加簡潔
@mixin borderRadius($radius:20px) { border-radius: $radius; border-top-left-radius: $radius; border-top-right-radius: $radius; border-bottom-left-radius: $radius; border-bottom-right-radius: $radius; } $duration: .4s; $checkedColor: #64bd63; .mui-switch { width: 52px; height: 31px; position: relative; border: 1px solid #dfdfdf; background-color: #fdfdfd; box-shadow: #dfdfdf 0 0 0 0 inset; @include borderRadius(); background-clip: content-box; display: inline-block; -webkit-appearance: none; user-select: none; outline: none; &:before { content: ''; width: 29px; height: 29px; position: absolute; top: 0px; left: 0; @include borderRadius(); background-color: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); } &:checked { border-color: $checkedColor; box-shadow: $checkedColor 0 0 0 16px inset; background-color: $checkedColor; &:before { left: 21px; } } &.mui-switch-animbg { transition: background-color ease $duration; &:before { transition: left 0.3s; } &:checked { box-shadow: #dfdfdf 0 0 0 0 inset; background-color: $checkedColor; transition: border-color $duration, background-color ease $duration; &:before { transition: left 0.3s; } } } &.mui-switch-anim { transition: border cubic-bezier(0, 0, 0, 1) $duration, box-shadow cubic-bezier(0, 0, 0, 1) $duration; &:before { transition: left 0.3s; } &:checked { box-shadow: $checkedColor 0 0 0 16px inset; background-color: $checkedColor; transition: border ease $duration, box-shadow ease $duration, background-color ease $duration*3; &:before { transition: left 0.3s; } } } }
鏈接文章
https://www.html.cn/archives/9274
https://segmentfault.com/a/1190000003711140
*請認真填寫需求信息,我們會在24小時內與您取得聯系。